haskell-src-exts 1.2.0 → 1.24.0
raw patch · 1167 files changed
This diff is very large; some files are shown as “too large to diff”. Download the raw patch for the complete diff.
Files
- CHANGELOG +736/−0
- README.md +48/−0
- RELEASENOTES-1.17.0 +35/−0
- Setup.hs +1/−7
- dist/build/Language/Haskell/Exts/InternalParser.hs +0/−7941
- haskell-src-exts.cabal +71/−45
- src/Language/Haskell/Exts.hs +106/−23
- src/Language/Haskell/Exts/Annotated.hs +0/−116
- src/Language/Haskell/Exts/Annotated/Build.hs +0/−290
- src/Language/Haskell/Exts/Annotated/ExactPrint.hs +0/−1417
- src/Language/Haskell/Exts/Annotated/Fixity.hs +0/−359
- src/Language/Haskell/Exts/Annotated/Simplify.hs +0/−514
- src/Language/Haskell/Exts/Annotated/Syntax.hs +0/−2196
- src/Language/Haskell/Exts/Build.hs +143/−139
- src/Language/Haskell/Exts/Comments.hs +189/−19
- src/Language/Haskell/Exts/ExactPrint.hs +2219/−0
- src/Language/Haskell/Exts/ExtScheme.hs +39/−37
- src/Language/Haskell/Exts/Extension.hs +750/−250
- src/Language/Haskell/Exts/Fixity.hs +449/−343
- src/Language/Haskell/Exts/InternalLexer.hs +1497/−0
- src/Language/Haskell/Exts/InternalParser.ly +2272/−1765
- src/Language/Haskell/Exts/Lexer.hs +47/−1066
- src/Language/Haskell/Exts/ParseMonad.hs +254/−95
- src/Language/Haskell/Exts/ParseSyntax.hs +385/−432
- src/Language/Haskell/Exts/ParseUtils.hs +1310/−1373
- src/Language/Haskell/Exts/Parser.hs +259/−154
- src/Language/Haskell/Exts/Pretty.hs +1717/−1634
- src/Language/Haskell/Exts/SrcLoc.hs +194/−146
- src/Language/Haskell/Exts/Syntax.hs +1952/−1020
- src/Language/Preprocessor/Unlit.hs +72/−0
- tests/Extensions.hs +53/−0
- tests/Runner.hs +189/−0
- tests/examples/AmbiguousFixities.hs +1/−0
- tests/examples/AmbiguousFixities.hs.exactprinter.golden +1/−0
- tests/examples/AmbiguousFixities.hs.parser.golden +1/−0
- tests/examples/AmbiguousFixities.hs.prettyparser.golden +1/−0
- tests/examples/AmbiguousFixities.hs.prettyprinter.golden +1/−0
- tests/examples/ArityMismatch.hs +7/−0
- tests/examples/ArityMismatch.hs.exactprinter.golden +1/−0
- tests/examples/ArityMismatch.hs.parser.golden +3/−0
- tests/examples/ArityMismatch.hs.prettyparser.golden +1/−0
- tests/examples/ArityMismatch.hs.prettyprinter.golden +1/−0
- tests/examples/ArrowBrackets.hs +8/−0
- tests/examples/ArrowBrackets.hs.exactprinter.golden +1/−0
- tests/examples/ArrowBrackets.hs.parser.golden +541/−0
- tests/examples/ArrowBrackets.hs.prettyparser.golden +1/−0
- tests/examples/ArrowBrackets.hs.prettyprinter.golden +7/−0
- tests/examples/ArrowLayout.hs +7/−0
- tests/examples/ArrowLayout.hs.exactprinter.golden +1/−0
- tests/examples/ArrowLayout.hs.parser.golden +338/−0
- tests/examples/ArrowLayout.hs.prettyparser.golden +1/−0
- tests/examples/ArrowLayout.hs.prettyprinter.golden +7/−0
- tests/examples/AtOperator.hs +8/−0
- tests/examples/AtOperator.hs.exactprinter.golden +1/−0
- tests/examples/AtOperator.hs.parser.golden +291/−0
- tests/examples/AtOperator.hs.prettyparser.golden +1/−0
- tests/examples/AtOperator.hs.prettyprinter.golden +6/−0
- tests/examples/AtSign.hs +17/−0
- tests/examples/AtSign.hs.exactprinter.golden +1/−0
- tests/examples/AtSign.hs.parser.golden +591/−0
- tests/examples/AtSign.hs.prettyparser.golden +1/−0
- tests/examples/AtSign.hs.prettyprinter.golden +9/−0
- tests/examples/Attributes.hs +2181/−0
- tests/examples/Attributes.hs.exactprinter.golden +1/−0
- tests/examples/Attributes.hs.parser.golden too large to diff
- tests/examples/Attributes.hs.prettyparser.golden +1/−0
- tests/examples/Attributes.hs.prettyprinter.golden +1718/−0
- tests/examples/BadStringLineBreak.hs +5/−0
- tests/examples/BadStringLineBreak.hs.exactprinter.golden +1/−0
- tests/examples/BadStringLineBreak.hs.parser.golden +3/−0
- tests/examples/BadStringLineBreak.hs.prettyparser.golden +1/−0
- tests/examples/BadStringLineBreak.hs.prettyprinter.golden +1/−0
- tests/examples/BangPatterns.hs +8/−0
- tests/examples/BangPatterns.hs.exactprinter.golden +1/−0
- tests/examples/BangPatterns.hs.parser.golden +768/−0
- tests/examples/BangPatterns.hs.prettyparser.golden +1/−0
- tests/examples/BangPatterns.hs.prettyprinter.golden +9/−0
- tests/examples/BangViewPat.hs +2/−0
- tests/examples/BangViewPat.hs.exactprinter.golden +1/−0
- tests/examples/BangViewPat.hs.parser.golden +129/−0
- tests/examples/BangViewPat.hs.prettyparser.golden +1/−0
- tests/examples/BangViewPat.hs.prettyprinter.golden +2/−0
- tests/examples/BinaryLiteralsBad.hs +4/−0
- tests/examples/BinaryLiteralsBad.hs.exactprinter.golden +1/−0
- tests/examples/BinaryLiteralsBad.hs.parser.golden +3/−0
- tests/examples/BinaryLiteralsBad.hs.prettyparser.golden +1/−0
- tests/examples/BinaryLiteralsBad.hs.prettyprinter.golden +1/−0
- tests/examples/BinaryLiteralsGood.hs +23/−0
- tests/examples/BinaryLiteralsGood.hs.exactprinter.golden +1/−0
- tests/examples/BinaryLiteralsGood.hs.parser.golden +1539/−0
- tests/examples/BinaryLiteralsGood.hs.prettyparser.golden +10/−0
- tests/examples/BinaryLiteralsGood.hs.prettyprinter.golden +13/−0
- tests/examples/BlockArguments.hs +16/−0
- tests/examples/BlockArguments.hs.exactprinter.golden +1/−0
- tests/examples/BlockArguments.hs.parser.golden +1099/−0
- tests/examples/BlockArguments.hs.prettyparser.golden +10/−0
- tests/examples/BlockArguments.hs.prettyprinter.golden +15/−0
- tests/examples/BracketInstanceHead.hs +1/−0
- tests/examples/BracketInstanceHead.hs.exactprinter.golden +1/−0
- tests/examples/BracketInstanceHead.hs.parser.golden +151/−0
- tests/examples/BracketInstanceHead.hs.prettyparser.golden +1/−0
- tests/examples/BracketInstanceHead.hs.prettyprinter.golden +1/−0
- tests/examples/Bug.hs +2/−0
- tests/examples/Bug.hs.exactprinter.golden +1/−0
- tests/examples/Bug.hs.parser.golden +42/−0
- tests/examples/Bug.hs.prettyparser.golden +1/−0
- tests/examples/Bug.hs.prettyprinter.golden +1/−0
- tests/examples/Bundles.hs +4/−0
- tests/examples/Bundles.hs.exactprinter.golden +1/−0
- tests/examples/Bundles.hs.parser.golden +252/−0
- tests/examples/Bundles.hs.prettyparser.golden +1/−0
- tests/examples/Bundles.hs.prettyprinter.golden +4/−0
- tests/examples/ByteStringUtils.hs +541/−0
- tests/examples/ByteStringUtils.hs.exactprinter.golden +1/−0
- tests/examples/ByteStringUtils.hs.parser.golden too large to diff
- tests/examples/ByteStringUtils.hs.prettyparser.golden +10/−0
- tests/examples/ByteStringUtils.hs.prettyprinter.golden +384/−0
- tests/examples/CApiFFI.hs +3/−0
- tests/examples/CApiFFI.hs.exactprinter.golden +1/−0
- tests/examples/CApiFFI.hs.parser.golden +72/−0
- tests/examples/CApiFFI.hs.prettyparser.golden +1/−0
- tests/examples/CApiFFI.hs.prettyprinter.golden +2/−0
- tests/examples/CStyleLinePragmas.hs +2/−0
- tests/examples/CStyleLinePragmas.hs.exactprinter.golden +1/−0
- tests/examples/CStyleLinePragmas.hs.parser.golden +2/−0
- tests/examples/CStyleLinePragmas.hs.prettyparser.golden +1/−0
- tests/examples/CStyleLinePragmas.hs.prettyprinter.golden +1/−0
- tests/examples/ClassContext.hs +2/−0
- tests/examples/ClassContext.hs.exactprinter.golden +1/−0
- tests/examples/ClassContext.hs.parser.golden +228/−0
- tests/examples/ClassContext.hs.prettyparser.golden +1/−0
- tests/examples/ClassContext.hs.prettyprinter.golden +2/−0
- tests/examples/ClassDeclSrcSpan.hs +6/−0
- tests/examples/ClassDeclSrcSpan.hs.exactprinter.golden +1/−0
- tests/examples/ClassDeclSrcSpan.hs.parser.golden +204/−0
- tests/examples/ClassDeclSrcSpan.hs.prettyparser.golden +1/−0
- tests/examples/ClassDeclSrcSpan.hs.prettyprinter.golden +5/−0
- tests/examples/ClassInstType.hs +17/−0
- tests/examples/ClassInstType.hs.exactprinter.golden +1/−0
- tests/examples/ClassInstType.hs.parser.golden +1420/−0
- tests/examples/ClassInstType.hs.prettyparser.golden +1/−0
- tests/examples/ClassInstType.hs.prettyprinter.golden +19/−0
- tests/examples/ClosedTypeFamily.hs +8/−0
- tests/examples/ClosedTypeFamily.hs.exactprinter.golden +1/−0
- tests/examples/ClosedTypeFamily.hs.parser.golden +293/−0
- tests/examples/ClosedTypeFamily.hs.prettyparser.golden +1/−0
- tests/examples/ClosedTypeFamily.hs.prettyprinter.golden +6/−0
- tests/examples/Completesig03A.hs +6/−0
- tests/examples/Completesig03A.hs.exactprinter.golden +1/−0
- tests/examples/Completesig03A.hs.parser.golden +123/−0
- tests/examples/Completesig03A.hs.prettyparser.golden +1/−0
- tests/examples/Completesig03A.hs.prettyprinter.golden +6/−0
- tests/examples/ConstraintKinds.hs +10/−0
- tests/examples/ConstraintKinds.hs.exactprinter.golden +1/−0
- tests/examples/ConstraintKinds.hs.parser.golden +493/−0
- tests/examples/ConstraintKinds.hs.prettyparser.golden +1/−0
- tests/examples/ConstraintKinds.hs.prettyprinter.golden +12/−0
- tests/examples/ConstraintKinds2.hs +6/−0
- tests/examples/ConstraintKinds2.hs.exactprinter.golden +1/−0
- tests/examples/ConstraintKinds2.hs.parser.golden +216/−0
- tests/examples/ConstraintKinds2.hs.prettyparser.golden +1/−0
- tests/examples/ConstraintKinds2.hs.prettyprinter.golden +6/−0
- tests/examples/ConstraintKinds3.hs +7/−0
- tests/examples/ConstraintKinds3.hs.exactprinter.golden +1/−0
- tests/examples/ConstraintKinds3.hs.parser.golden +246/−0
- tests/examples/ConstraintKinds3.hs.prettyparser.golden +1/−0
- tests/examples/ConstraintKinds3.hs.prettyprinter.golden +5/−0
- tests/examples/ConstructorAndClassOperators.hs +5/−0
- tests/examples/ConstructorAndClassOperators.hs.exactprinter.golden +6/−0
- tests/examples/ConstructorAndClassOperators.hs.parser.golden +354/−0
- tests/examples/ConstructorAndClassOperators.hs.prettyparser.golden +1/−0
- tests/examples/ConstructorAndClassOperators.hs.prettyprinter.golden +5/−0
- tests/examples/ContextOrdering.hs +5/−0
- tests/examples/ContextOrdering.hs.exactprinter.golden +1/−0
- tests/examples/ContextOrdering.hs.parser.golden +208/−0
- tests/examples/ContextOrdering.hs.prettyparser.golden +1/−0
- tests/examples/ContextOrdering.hs.prettyprinter.golden +5/−0
- tests/examples/CxtWhitespace.hs +6/−0
- tests/examples/CxtWhitespace.hs.exactprinter.golden +1/−0
- tests/examples/CxtWhitespace.hs.parser.golden +268/−0
- tests/examples/CxtWhitespace.hs.prettyparser.golden +1/−0
- tests/examples/CxtWhitespace.hs.prettyprinter.golden +3/−0
- tests/examples/DataHeadParen.hs +4/−0
- tests/examples/DataHeadParen.hs.exactprinter.golden +1/−0
- tests/examples/DataHeadParen.hs.parser.golden +129/−0
- tests/examples/DataHeadParen.hs.prettyparser.golden +1/−0
- tests/examples/DataHeadParen.hs.prettyprinter.golden +4/−0
- tests/examples/DataKinds.hs +34/−0
- tests/examples/DataKinds.hs.exactprinter.golden +1/−0
- tests/examples/DataKinds.hs.parser.golden +1523/−0
- tests/examples/DataKinds.hs.prettyparser.golden +1/−0
- tests/examples/DataKinds.hs.prettyprinter.golden +30/−0
- tests/examples/DataKinds2.hs +9/−0
- tests/examples/DataKinds2.hs.exactprinter.golden +1/−0
- tests/examples/DataKinds2.hs.parser.golden +283/−0
- tests/examples/DataKinds2.hs.prettyparser.golden +1/−0
- tests/examples/DataKinds2.hs.prettyprinter.golden +9/−0
- tests/examples/DefaultSignatures.hs +5/−0
- tests/examples/DefaultSignatures.hs.exactprinter.golden +1/−0
- tests/examples/DefaultSignatures.hs.parser.golden +441/−0
- tests/examples/DefaultSignatures.hs.prettyparser.golden +1/−0
- tests/examples/DefaultSignatures.hs.prettyprinter.golden +7/−0
- tests/examples/DeriveGeneric.hs +4/−0
- tests/examples/DeriveGeneric.hs.exactprinter.golden +1/−0
- tests/examples/DeriveGeneric.hs.parser.golden +239/−0
- tests/examples/DeriveGeneric.hs.prettyparser.golden +1/−0
- tests/examples/DeriveGeneric.hs.prettyprinter.golden +5/−0
- tests/examples/DerivingParen.hs +2/−0
- tests/examples/DerivingParen.hs.exactprinter.golden +1/−0
- tests/examples/DerivingParen.hs.parser.golden +177/−0
- tests/examples/DerivingParen.hs.prettyparser.golden +1/−0
- tests/examples/DerivingParen.hs.prettyprinter.golden +3/−0
- tests/examples/DerivingStrategies.hs +18/−0
- tests/examples/DerivingStrategies.hs.exactprinter.golden +1/−0
- tests/examples/DerivingStrategies.hs.parser.golden +849/−0
- tests/examples/DerivingStrategies.hs.prettyparser.golden +1/−0
- tests/examples/DerivingStrategies.hs.prettyprinter.golden +21/−0
- tests/examples/DerivingVia.hs +459/−0
- tests/examples/DerivingVia.hs.exactprinter.golden +460/−0
- tests/examples/DerivingVia.hs.parser.golden +32882/−0
- tests/examples/DerivingVia.hs.prettyparser.golden +1/−0
- tests/examples/DerivingVia.hs.prettyprinter.golden +418/−0
- tests/examples/DerivingVia2.hs +41/−0
- tests/examples/DerivingVia2.hs.exactprinter.golden +42/−0
- tests/examples/DerivingVia2.hs.parser.golden +2346/−0
- tests/examples/DerivingVia2.hs.prettyparser.golden +1/−0
- tests/examples/DerivingVia2.hs.prettyprinter.golden +47/−0
- tests/examples/DerivingViaStealing.hs +5/−0
- tests/examples/DerivingViaStealing.hs.exactprinter.golden +1/−0
- tests/examples/DerivingViaStealing.hs.parser.golden +201/−0
- tests/examples/DerivingViaStealing.hs.prettyparser.golden +1/−0
- tests/examples/DerivingViaStealing.hs.prettyprinter.golden +4/−0
- tests/examples/Directory.hs +913/−0
- tests/examples/Directory.hs.exactprinter.golden +1/−0
- tests/examples/Directory.hs.parser.golden +29264/−0
- tests/examples/Directory.hs.prettyparser.golden +1/−0
- tests/examples/Directory.hs.prettyprinter.golden +324/−0
- tests/examples/DoRec.hs +4/−0
- tests/examples/DoRec.hs.exactprinter.golden +1/−0
- tests/examples/DoRec.hs.parser.golden +177/−0
- tests/examples/DoRec.hs.prettyparser.golden +1/−0
- tests/examples/DoRec.hs.prettyprinter.golden +4/−0
- tests/examples/DoubleHashOp.hs +12/−0
- tests/examples/DoubleHashOp.hs.exactprinter.golden +1/−0
- tests/examples/DoubleHashOp.hs.parser.golden +317/−0
- tests/examples/DoubleHashOp.hs.prettyparser.golden +1/−0
- tests/examples/DoubleHashOp.hs.prettyprinter.golden +8/−0
- tests/examples/DsStrictData.hs +48/−0
- tests/examples/DsStrictData.hs.exactprinter.golden +1/−0
- tests/examples/DsStrictData.hs.parser.golden +3591/−0
- tests/examples/DsStrictData.hs.prettyparser.golden +1/−0
- tests/examples/DsStrictData.hs.prettyprinter.golden +45/−0
- tests/examples/EmptyAnn.hs +1/−0
- tests/examples/EmptyAnn.hs.exactprinter.golden +1/−0
- tests/examples/EmptyAnn.hs.parser.golden +49/−0
- tests/examples/EmptyAnn.hs.prettyparser.golden +1/−0
- tests/examples/EmptyAnn.hs.prettyprinter.golden +1/−0
- tests/examples/EmptyCase.hs +6/−0
- tests/examples/EmptyCase.hs.exactprinter.golden +1/−0
- tests/examples/EmptyCase.hs.parser.golden +159/−0
- tests/examples/EmptyCase.hs.prettyparser.golden +1/−0
- tests/examples/EmptyCase.hs.prettyprinter.golden +4/−0
- tests/examples/EmptyContext.hs +1/−0
- tests/examples/EmptyContext.hs.exactprinter.golden +1/−0
- tests/examples/EmptyContext.hs.parser.golden +79/−0
- tests/examples/EmptyContext.hs.prettyparser.golden +1/−0
- tests/examples/EmptyContext.hs.prettyprinter.golden +1/−0
- tests/examples/EmptyFunDepPremise.hs +4/−0
- tests/examples/EmptyFunDepPremise.hs.exactprinter.golden +1/−0
- tests/examples/EmptyFunDepPremise.hs.parser.golden +115/−0
- tests/examples/EmptyFunDepPremise.hs.prettyparser.golden +1/−0
- tests/examples/EmptyFunDepPremise.hs.prettyprinter.golden +4/−0
- tests/examples/EmptyInstance.hs +4/−0
- tests/examples/EmptyInstance.hs.exactprinter.golden +1/−0
- tests/examples/EmptyInstance.hs.parser.golden +141/−0
- tests/examples/EmptyInstance.hs.prettyparser.golden +1/−0
- tests/examples/EmptyInstance.hs.prettyprinter.golden +4/−0
- tests/examples/EmptyList.hs +3/−0
- tests/examples/EmptyList.hs.exactprinter.golden +1/−0
- tests/examples/EmptyList.hs.parser.golden +65/−0
- tests/examples/EmptyList.hs.prettyparser.golden +1/−0
- tests/examples/EmptyList.hs.prettyprinter.golden +2/−0
- tests/examples/EmptyWhere.hs +1/−0
- tests/examples/EmptyWhere.hs.exactprinter.golden +1/−0
- tests/examples/EmptyWhere.hs.parser.golden +64/−0
- tests/examples/EmptyWhere.hs.prettyparser.golden +1/−0
- tests/examples/EmptyWhere.hs.prettyprinter.golden +2/−0
- tests/examples/EqualityConstraints1.hs +5/−0
- tests/examples/EqualityConstraints1.hs.exactprinter.golden +1/−0
- tests/examples/EqualityConstraints1.hs.parser.golden +178/−0
- tests/examples/EqualityConstraints1.hs.prettyparser.golden +1/−0
- tests/examples/EqualityConstraints1.hs.prettyprinter.golden +4/−0
- tests/examples/EqualityConstraints2.hs +2/−0
- tests/examples/EqualityConstraints2.hs.exactprinter.golden +1/−0
- tests/examples/EqualityConstraints2.hs.parser.golden +3/−0
- tests/examples/EqualityConstraints2.hs.prettyparser.golden +1/−0
- tests/examples/EqualityConstraints2.hs.prettyprinter.golden +1/−0
- tests/examples/ExplicitNamespaces1.hs +4/−0
- tests/examples/ExplicitNamespaces1.hs.exactprinter.golden +1/−0
- tests/examples/ExplicitNamespaces1.hs.parser.golden +237/−0
- tests/examples/ExplicitNamespaces1.hs.prettyparser.golden +1/−0
- tests/examples/ExplicitNamespaces1.hs.prettyprinter.golden +4/−0
- tests/examples/ExplicitNamespaces2.hs +4/−0
- tests/examples/ExplicitNamespaces2.hs.exactprinter.golden +1/−0
- tests/examples/ExplicitNamespaces2.hs.parser.golden +164/−0
- tests/examples/ExplicitNamespaces2.hs.prettyparser.golden +1/−0
- tests/examples/ExplicitNamespaces2.hs.prettyprinter.golden +3/−0
- tests/examples/ExplicitNamespaces3.hs +5/−0
- tests/examples/ExplicitNamespaces3.hs.exactprinter.golden +1/−0
- tests/examples/ExplicitNamespaces3.hs.parser.golden +145/−0
- tests/examples/ExplicitNamespaces3.hs.prettyparser.golden +1/−0
- tests/examples/ExplicitNamespaces3.hs.prettyprinter.golden +4/−0
- tests/examples/ExplicitNamespaces4.hs +5/−0
- tests/examples/ExplicitNamespaces4.hs.exactprinter.golden +6/−0
- tests/examples/ExplicitNamespaces4.hs.parser.golden +171/−0
- tests/examples/ExplicitNamespaces4.hs.prettyparser.golden +1/−0
- tests/examples/ExplicitNamespaces4.hs.prettyprinter.golden +5/−0
- tests/examples/ExprHole.hs +10/−0
- tests/examples/ExprHole.hs.exactprinter.golden +1/−0
- tests/examples/ExprHole.hs.parser.golden +260/−0
- tests/examples/ExprHole.hs.prettyparser.golden +1/−0
- tests/examples/ExprHole.hs.prettyprinter.golden +5/−0
- tests/examples/ExtraEndBrace.hs +3/−0
- tests/examples/ExtraEndBrace.hs.exactprinter.golden +1/−0
- tests/examples/ExtraEndBrace.hs.parser.golden +2/−0
- tests/examples/ExtraEndBrace.hs.prettyparser.golden +1/−0
- tests/examples/ExtraEndBrace.hs.prettyprinter.golden +1/−0
- tests/examples/ExtraPrettyParentheses.hs +9/−0
- tests/examples/ExtraPrettyParentheses.hs.exactprinter.golden +1/−0
- tests/examples/ExtraPrettyParentheses.hs.parser.golden +480/−0
- tests/examples/ExtraPrettyParentheses.hs.prettyparser.golden +10/−0
- tests/examples/ExtraPrettyParentheses.hs.prettyprinter.golden +4/−0
- tests/examples/FFIExtensions.hs +7/−0
- tests/examples/FFIExtensions.hs.exactprinter.golden +1/−0
- tests/examples/FFIExtensions.hs.parser.golden +234/−0
- tests/examples/FFIExtensions.hs.prettyparser.golden +1/−0
- tests/examples/FFIExtensions.hs.prettyprinter.golden +8/−0
- tests/examples/FFIInterruptible.hs +3/−0
- tests/examples/FFIInterruptible.hs.exactprinter.golden +1/−0
- tests/examples/FFIInterruptible.hs.parser.golden +83/−0
- tests/examples/FFIInterruptible.hs.prettyparser.golden +1/−0
- tests/examples/FFIInterruptible.hs.prettyprinter.golden +2/−0
- tests/examples/FamilyKindSig.hs +4/−0
- tests/examples/FamilyKindSig.hs.exactprinter.golden +1/−0
- tests/examples/FamilyKindSig.hs.parser.golden +107/−0
- tests/examples/FamilyKindSig.hs.prettyparser.golden +1/−0
- tests/examples/FamilyKindSig.hs.prettyprinter.golden +4/−0
- tests/examples/FamilyVarid.hs +4/−0
- tests/examples/FamilyVarid.hs.exactprinter.golden +1/−0
- tests/examples/FamilyVarid.hs.parser.golden +113/−0
- tests/examples/FamilyVarid.hs.prettyparser.golden +1/−0
- tests/examples/FamilyVarid.hs.prettyprinter.golden +3/−0
- tests/examples/Fixity2.hs +3/−0
- tests/examples/Fixity2.hs.exactprinter.golden +1/−0
- tests/examples/Fixity2.hs.parser.golden +297/−0
- tests/examples/Fixity2.hs.prettyparser.golden +1/−0
- tests/examples/Fixity2.hs.prettyprinter.golden +4/−0
- tests/examples/Fixity3.hs +5/−0
- tests/examples/Fixity3.hs.exactprinter.golden +1/−0
- tests/examples/Fixity3.hs.parser.golden +466/−0
- tests/examples/Fixity3.hs.prettyparser.golden +1/−0
- tests/examples/Fixity3.hs.prettyprinter.golden +5/−0
- tests/examples/FixityTests.hs +3/−0
- tests/examples/FixityTests.hs.exactprinter.golden +1/−0
- tests/examples/FixityTests.hs.parser.golden +343/−0
- tests/examples/FixityTests.hs.prettyparser.golden +1/−0
- tests/examples/FixityTests.hs.prettyprinter.golden +5/−0
- tests/examples/FlexibleContextsWithoutVars.hs +3/−0
- tests/examples/FlexibleContextsWithoutVars.hs.exactprinter.golden +1/−0
- tests/examples/FlexibleContextsWithoutVars.hs.parser.golden +187/−0
- tests/examples/FlexibleContextsWithoutVars.hs.prettyparser.golden +1/−0
- tests/examples/FlexibleContextsWithoutVars.hs.prettyprinter.golden +4/−0
- tests/examples/ForallInInstance.hs +4/−0
- tests/examples/ForallInInstance.hs.exactprinter.golden +1/−0
- tests/examples/ForallInInstance.hs.parser.golden +195/−0
- tests/examples/ForallInInstance.hs.prettyparser.golden +1/−0
- tests/examples/ForallInInstance.hs.prettyprinter.golden +4/−0
- tests/examples/ForeignImport.hs +4/−0
- tests/examples/ForeignImport.hs.exactprinter.golden +1/−0
- tests/examples/ForeignImport.hs.parser.golden +212/−0
- tests/examples/ForeignImport.hs.prettyparser.golden +1/−0
- tests/examples/ForeignImport.hs.prettyprinter.golden +2/−0
- tests/examples/ForeignImportJavascript.hs +4/−0
- tests/examples/ForeignImportJavascript.hs.exactprinter.golden +1/−0
- tests/examples/ForeignImportJavascript.hs.parser.golden +166/−0
- tests/examples/ForeignImportJavascript.hs.prettyparser.golden +1/−0
- tests/examples/ForeignImportJavascript.hs.prettyprinter.golden +4/−0
- tests/examples/GADTRecord.hs +4/−0
- tests/examples/GADTRecord.hs.exactprinter.golden +1/−0
- tests/examples/GADTRecord.hs.parser.golden +128/−0
- tests/examples/GADTRecord.hs.prettyparser.golden +1/−0
- tests/examples/GADTRecord.hs.prettyprinter.golden +4/−0
- tests/examples/GADTRecord2.hs +4/−0
- tests/examples/GADTRecord2.hs.exactprinter.golden +1/−0
- tests/examples/GADTRecord2.hs.parser.golden +137/−0
- tests/examples/GADTRecord2.hs.prettyparser.golden +1/−0
- tests/examples/GADTRecord2.hs.prettyprinter.golden +4/−0
- tests/examples/GadtDeriving.hs +5/−0
- tests/examples/GadtDeriving.hs.exactprinter.golden +1/−0
- tests/examples/GadtDeriving.hs.parser.golden +199/−0
- tests/examples/GadtDeriving.hs.prettyparser.golden too large to diff
- tests/examples/GadtDeriving.hs.prettyprinter.golden too large to diff
- tests/examples/GadtRecordFields.hs too large to diff
- tests/examples/GadtRecordFields.hs.exactprinter.golden too large to diff
- tests/examples/GadtRecordFields.hs.parser.golden too large to diff
- tests/examples/GadtRecordFields.hs.prettyparser.golden too large to diff
- tests/examples/GadtRecordFields.hs.prettyprinter.golden too large to diff
- tests/examples/GadtStrictness.hs too large to diff
- tests/examples/GadtStrictness.hs.exactprinter.golden too large to diff
- tests/examples/GadtStrictness.hs.parser.golden too large to diff
- tests/examples/GadtStrictness.hs.prettyparser.golden too large to diff
- tests/examples/GadtStrictness.hs.prettyprinter.golden too large to diff
- tests/examples/GenericTree.hs too large to diff
- tests/examples/GenericTree.hs.exactprinter.golden too large to diff
- tests/examples/GenericTree.hs.parser.golden too large to diff
- tests/examples/GenericTree.hs.prettyparser.golden too large to diff
- tests/examples/GenericTree.hs.prettyprinter.golden too large to diff
- tests/examples/GhcDeriving.hs too large to diff
- tests/examples/GhcDeriving.hs.exactprinter.golden too large to diff
- tests/examples/GhcDeriving.hs.parser.golden too large to diff
- tests/examples/GhcDeriving.hs.prettyparser.golden too large to diff
- tests/examples/GhcDeriving.hs.prettyprinter.golden too large to diff
- tests/examples/GroupKeyword.hs too large to diff
- tests/examples/GroupKeyword.hs.exactprinter.golden too large to diff
- tests/examples/GroupKeyword.hs.parser.golden too large to diff
- tests/examples/GroupKeyword.hs.prettyparser.golden too large to diff
- tests/examples/GroupKeyword.hs.prettyprinter.golden too large to diff
- tests/examples/HaddockComments.hs too large to diff
- tests/examples/HaddockComments.hs.exactprinter.golden too large to diff
- tests/examples/HaddockComments.hs.parser.golden too large to diff
- tests/examples/HaddockComments.hs.prettyparser.golden too large to diff
- tests/examples/HaddockComments.hs.prettyprinter.golden too large to diff
- tests/examples/HappyDoAction.hs too large to diff
- tests/examples/HappyDoAction.hs.exactprinter.golden too large to diff
- tests/examples/HappyDoAction.hs.parser.golden too large to diff
- tests/examples/HappyDoAction.hs.prettyparser.golden too large to diff
- tests/examples/HappyDoAction.hs.prettyprinter.golden too large to diff
- tests/examples/HashOperator.hs too large to diff
- tests/examples/HashOperator.hs.exactprinter.golden too large to diff
- tests/examples/HashOperator.hs.parser.golden too large to diff
- tests/examples/HashOperator.hs.prettyparser.golden too large to diff
- tests/examples/HashOperator.hs.prettyprinter.golden too large to diff
- tests/examples/HaskellParser.hs too large to diff
- tests/examples/HaskellParser.hs.exactprinter.golden too large to diff
- tests/examples/HaskellParser.hs.parser.golden too large to diff
- tests/examples/HaskellParser.hs.prettyparser.golden too large to diff
- tests/examples/HaskellParser.hs.prettyprinter.golden too large to diff
- tests/examples/HexPrec.hs too large to diff
- tests/examples/HexPrec.hs.exactprinter.golden too large to diff
- tests/examples/HexPrec.hs.parser.golden too large to diff
- tests/examples/HexPrec.hs.prettyparser.golden too large to diff
- tests/examples/HexPrec.hs.prettyprinter.golden too large to diff
- tests/examples/IfThenElseLayout.hs too large to diff
- tests/examples/IfThenElseLayout.hs.exactprinter.golden too large to diff
- tests/examples/IfThenElseLayout.hs.parser.golden too large to diff
- tests/examples/IfThenElseLayout.hs.prettyparser.golden too large to diff
- tests/examples/IfThenElseLayout.hs.prettyprinter.golden too large to diff
- tests/examples/IllDataTypeDecl.hs too large to diff
- tests/examples/IllDataTypeDecl.hs.exactprinter.golden too large to diff
- tests/examples/IllDataTypeDecl.hs.parser.golden too large to diff
- tests/examples/IllDataTypeDecl.hs.prettyparser.golden too large to diff
- tests/examples/IllDataTypeDecl.hs.prettyprinter.golden too large to diff
- tests/examples/ImplicitWhereBlocks.hs too large to diff
- tests/examples/ImplicitWhereBlocks.hs.exactprinter.golden too large to diff
- tests/examples/ImplicitWhereBlocks.hs.parser.golden too large to diff
- tests/examples/ImplicitWhereBlocks.hs.prettyparser.golden too large to diff
- tests/examples/ImplicitWhereBlocks.hs.prettyprinter.golden too large to diff
- tests/examples/ImportQualifiedPost.hs too large to diff
- tests/examples/ImportQualifiedPost.hs.exactprinter.golden too large to diff
- tests/examples/ImportQualifiedPost.hs.parser.golden too large to diff
- tests/examples/ImportQualifiedPost.hs.prettyparser.golden too large to diff
- tests/examples/ImportQualifiedPost.hs.prettyprinter.golden too large to diff
- tests/examples/IndentedModule1.hs too large to diff
- tests/examples/IndentedModule1.hs.exactprinter.golden too large to diff
- tests/examples/IndentedModule1.hs.parser.golden too large to diff
- tests/examples/IndentedModule1.hs.prettyparser.golden too large to diff
- tests/examples/IndentedModule1.hs.prettyprinter.golden too large to diff
- tests/examples/IndentedModule2.hs too large to diff
- tests/examples/IndentedModule2.hs.exactprinter.golden too large to diff
- tests/examples/IndentedModule2.hs.parser.golden too large to diff
- tests/examples/IndentedModule2.hs.prettyparser.golden too large to diff
- tests/examples/IndentedModule2.hs.prettyprinter.golden too large to diff
- tests/examples/IndentedTopLevelWhere.hs too large to diff
- tests/examples/IndentedTopLevelWhere.hs.exactprinter.golden too large to diff
- tests/examples/IndentedTopLevelWhere.hs.parser.golden too large to diff
- tests/examples/IndentedTopLevelWhere.hs.prettyparser.golden too large to diff
- tests/examples/IndentedTopLevelWhere.hs.prettyprinter.golden too large to diff
- tests/examples/IndentedWhere.hs too large to diff
- tests/examples/IndentedWhere.hs.exactprinter.golden too large to diff
- tests/examples/IndentedWhere.hs.parser.golden too large to diff
- tests/examples/IndentedWhere.hs.prettyparser.golden too large to diff
- tests/examples/IndentedWhere.hs.prettyprinter.golden too large to diff
- tests/examples/IndentedWhereBlock.hs too large to diff
- tests/examples/IndentedWhereBlock.hs.exactprinter.golden too large to diff
- tests/examples/IndentedWhereBlock.hs.parser.golden too large to diff
- tests/examples/IndentedWhereBlock.hs.prettyparser.golden too large to diff
- tests/examples/IndentedWhereBlock.hs.prettyprinter.golden too large to diff
- tests/examples/InfixApp.hs too large to diff
- tests/examples/InfixApp.hs.exactprinter.golden too large to diff
- tests/examples/InfixApp.hs.parser.golden too large to diff
- tests/examples/InfixApp.hs.prettyparser.golden too large to diff
- tests/examples/InfixApp.hs.prettyprinter.golden too large to diff
- tests/examples/InfixBang.hs too large to diff
- tests/examples/InfixBang.hs.exactprinter.golden too large to diff
- tests/examples/InfixBang.hs.parser.golden too large to diff
- tests/examples/InfixBang.hs.prettyparser.golden too large to diff
- tests/examples/InfixBang.hs.prettyprinter.golden too large to diff
- tests/examples/InfixFunBind.hs too large to diff
- tests/examples/InfixFunBind.hs.exactprinter.golden too large to diff
- tests/examples/InfixFunBind.hs.parser.golden too large to diff
- tests/examples/InfixFunBind.hs.prettyparser.golden too large to diff
- tests/examples/InfixFunBind.hs.prettyprinter.golden too large to diff
- tests/examples/InfixParser.hs too large to diff
- tests/examples/InfixParser.hs.exactprinter.golden too large to diff
- tests/examples/InfixParser.hs.parser.golden too large to diff
- tests/examples/InfixParser.hs.prettyparser.golden too large to diff
- tests/examples/InfixParser.hs.prettyprinter.golden too large to diff
- tests/examples/InfixTypeMinus.hs too large to diff
- tests/examples/InfixTypeMinus.hs.exactprinter.golden too large to diff
- tests/examples/InfixTypeMinus.hs.parser.golden too large to diff
- tests/examples/InfixTypeMinus.hs.prettyparser.golden too large to diff
- tests/examples/InfixTypeMinus.hs.prettyprinter.golden too large to diff
- tests/examples/InjectiveTypeFamilies.hs too large to diff
- tests/examples/InjectiveTypeFamilies.hs.exactprinter.golden too large to diff
- tests/examples/InjectiveTypeFamilies.hs.parser.golden too large to diff
- tests/examples/InjectiveTypeFamilies.hs.prettyparser.golden too large to diff
- tests/examples/InjectiveTypeFamilies.hs.prettyprinter.golden too large to diff
- tests/examples/InlineConlike.hs too large to diff
- tests/examples/InlineConlike.hs.exactprinter.golden too large to diff
- tests/examples/InlineConlike.hs.parser.golden too large to diff
- tests/examples/InlineConlike.hs.prettyparser.golden too large to diff
- tests/examples/InlineConlike.hs.prettyprinter.golden too large to diff
- tests/examples/InstanceSigs.hs too large to diff
- tests/examples/InstanceSigs.hs.exactprinter.golden too large to diff
- tests/examples/InstanceSigs.hs.parser.golden too large to diff
- tests/examples/InstanceSigs.hs.prettyparser.golden too large to diff
- tests/examples/InstanceSigs.hs.prettyprinter.golden too large to diff
- tests/examples/LambdaCase.hs too large to diff
- tests/examples/LambdaCase.hs.exactprinter.golden too large to diff
- tests/examples/LambdaCase.hs.parser.golden too large to diff
- tests/examples/LambdaCase.hs.prettyparser.golden too large to diff
- tests/examples/LambdaCase.hs.prettyprinter.golden too large to diff
- tests/examples/LanguagePragma.hs too large to diff
- tests/examples/LanguagePragma.hs.exactprinter.golden too large to diff
- tests/examples/LanguagePragma.hs.parser.golden too large to diff
- tests/examples/LanguagePragma.hs.prettyparser.golden too large to diff
- tests/examples/LanguagePragma.hs.prettyprinter.golden too large to diff
- tests/examples/Lib.hs too large to diff
- tests/examples/Lib.hs.exactprinter.golden too large to diff
- tests/examples/Lib.hs.parser.golden too large to diff
- tests/examples/Lib.hs.prettyparser.golden too large to diff
- tests/examples/Lib.hs.prettyprinter.golden too large to diff
- tests/examples/LineOptionsPragma.hs too large to diff
- tests/examples/LineOptionsPragma.hs.exactprinter.golden too large to diff
- tests/examples/LineOptionsPragma.hs.parser.golden too large to diff
- tests/examples/LineOptionsPragma.hs.prettyparser.golden too large to diff
- tests/examples/LineOptionsPragma.hs.prettyprinter.golden too large to diff
- tests/examples/List2.hs too large to diff
- tests/examples/List2.hs.exactprinter.golden too large to diff
- tests/examples/List2.hs.parser.golden too large to diff
- tests/examples/List2.hs.prettyparser.golden too large to diff
- tests/examples/List2.hs.prettyprinter.golden too large to diff
- tests/examples/MagicHashN.hs too large to diff
- tests/examples/MagicHashN.hs.exactprinter.golden too large to diff
- tests/examples/MagicHashN.hs.parser.golden too large to diff
- tests/examples/MagicHashN.hs.prettyparser.golden too large to diff
- tests/examples/MagicHashN.hs.prettyprinter.golden too large to diff
- tests/examples/MagicHashUnboxedTuples.hs too large to diff
- tests/examples/MagicHashUnboxedTuples.hs.exactprinter.golden too large to diff
- tests/examples/MagicHashUnboxedTuples.hs.parser.golden too large to diff
- tests/examples/MagicHashUnboxedTuples.hs.prettyparser.golden too large to diff
- tests/examples/MagicHashUnboxedTuples.hs.prettyprinter.golden too large to diff
- tests/examples/MinimalPragma.hs too large to diff
- tests/examples/MinimalPragma.hs.exactprinter.golden too large to diff
- tests/examples/MinimalPragma.hs.parser.golden too large to diff
- tests/examples/MinimalPragma.hs.prettyparser.golden too large to diff
- tests/examples/MinimalPragma.hs.prettyprinter.golden too large to diff
- tests/examples/MultiCtxt.hs too large to diff
- tests/examples/MultiCtxt.hs.exactprinter.golden too large to diff
- tests/examples/MultiCtxt.hs.parser.golden too large to diff
- tests/examples/MultiCtxt.hs.prettyparser.golden too large to diff
- tests/examples/MultiCtxt.hs.prettyprinter.golden too large to diff
- tests/examples/MultiLinePragma.hs too large to diff
- tests/examples/MultiLinePragma.hs.exactprinter.golden too large to diff
- tests/examples/MultiLinePragma.hs.parser.golden too large to diff
- tests/examples/MultiLinePragma.hs.prettyparser.golden too large to diff
- tests/examples/MultiLinePragma.hs.prettyprinter.golden too large to diff
- tests/examples/MultiParam.hs too large to diff
- tests/examples/MultiParam.hs.exactprinter.golden too large to diff
- tests/examples/MultiParam.hs.parser.golden too large to diff
- tests/examples/MultiParam.hs.prettyparser.golden too large to diff
- tests/examples/MultiParam.hs.prettyprinter.golden too large to diff
- tests/examples/MultiWayIf.hs too large to diff
- tests/examples/MultiWayIf.hs.exactprinter.golden too large to diff
- tests/examples/MultiWayIf.hs.parser.golden too large to diff
- tests/examples/MultiWayIf.hs.prettyparser.golden too large to diff
- tests/examples/MultiWayIf.hs.prettyprinter.golden too large to diff
- tests/examples/NPlusK.hs too large to diff
- tests/examples/NPlusK.hs.exactprinter.golden too large to diff
- tests/examples/NPlusK.hs.parser.golden too large to diff
- tests/examples/NPlusK.hs.prettyparser.golden too large to diff
- tests/examples/NPlusK.hs.prettyprinter.golden too large to diff
- tests/examples/NegPrimWordLiteral.hs too large to diff
- tests/examples/NegPrimWordLiteral.hs.exactprinter.golden too large to diff
- tests/examples/NegPrimWordLiteral.hs.parser.golden too large to diff
- tests/examples/NegPrimWordLiteral.hs.prettyparser.golden too large to diff
- tests/examples/NegPrimWordLiteral.hs.prettyprinter.golden too large to diff
- tests/examples/NegativePatterns.hs too large to diff
- tests/examples/NegativePatterns.hs.exactprinter.golden too large to diff
- tests/examples/NegativePatterns.hs.parser.golden too large to diff
- tests/examples/NegativePatterns.hs.prettyparser.golden too large to diff
- tests/examples/NegativePatterns.hs.prettyprinter.golden too large to diff
- tests/examples/NestedAsPat.hs too large to diff
- tests/examples/NestedAsPat.hs.exactprinter.golden too large to diff
- tests/examples/NestedAsPat.hs.parser.golden too large to diff
- tests/examples/NestedAsPat.hs.prettyparser.golden too large to diff
- tests/examples/NestedAsPat.hs.prettyprinter.golden too large to diff
- tests/examples/NoStartNumIdents.hs too large to diff
- tests/examples/NoStartNumIdents.hs.exactprinter.golden too large to diff
- tests/examples/NoStartNumIdents.hs.parser.golden too large to diff
- tests/examples/NoStartNumIdents.hs.prettyparser.golden too large to diff
- tests/examples/NoStartNumIdents.hs.prettyprinter.golden too large to diff
- tests/examples/NonDecreasing.hs too large to diff
- tests/examples/NonDecreasing.hs.exactprinter.golden too large to diff
- tests/examples/NonDecreasing.hs.parser.golden too large to diff
- tests/examples/NonDecreasing.hs.prettyparser.golden too large to diff
- tests/examples/NonDecreasing.hs.prettyprinter.golden too large to diff
- tests/examples/Nounpack2.hs too large to diff
- tests/examples/Nounpack2.hs.exactprinter.golden too large to diff
- tests/examples/Nounpack2.hs.parser.golden too large to diff
- tests/examples/Nounpack2.hs.prettyparser.golden too large to diff
- tests/examples/Nounpack2.hs.prettyprinter.golden too large to diff
- tests/examples/OptionsPragma.hs too large to diff
- tests/examples/OptionsPragma.hs.exactprinter.golden too large to diff
- tests/examples/OptionsPragma.hs.parser.golden too large to diff
- tests/examples/OptionsPragma.hs.prettyparser.golden too large to diff
- tests/examples/OptionsPragma.hs.prettyprinter.golden too large to diff
- tests/examples/Overlapable.hs too large to diff
- tests/examples/Overlapable.hs.exactprinter.golden too large to diff
- tests/examples/Overlapable.hs.parser.golden too large to diff
- tests/examples/Overlapable.hs.prettyparser.golden too large to diff
- tests/examples/Overlapable.hs.prettyprinter.golden too large to diff
- tests/examples/Overlapping.hs too large to diff
- tests/examples/Overlapping.hs.exactprinter.golden too large to diff
- tests/examples/Overlapping.hs.parser.golden too large to diff
- tests/examples/Overlapping.hs.prettyparser.golden too large to diff
- tests/examples/Overlapping.hs.prettyprinter.golden too large to diff
- tests/examples/OverloadedLabels.hs too large to diff
- tests/examples/OverloadedLabels.hs.exactprinter.golden too large to diff
- tests/examples/OverloadedLabels.hs.parser.golden too large to diff
- tests/examples/OverloadedLabels.hs.prettyparser.golden too large to diff
- tests/examples/OverloadedLabels.hs.prettyprinter.golden too large to diff
- tests/examples/PackageImports.hs too large to diff
- tests/examples/PackageImports.hs.exactprinter.golden too large to diff
- tests/examples/PackageImports.hs.parser.golden too large to diff
- tests/examples/PackageImports.hs.prettyparser.golden too large to diff
- tests/examples/PackageImports.hs.prettyprinter.golden too large to diff
- tests/examples/PackageImportsMissing.hs too large to diff
- tests/examples/PackageImportsMissing.hs.exactprinter.golden too large to diff
- tests/examples/PackageImportsMissing.hs.parser.golden too large to diff
- tests/examples/PackageImportsMissing.hs.prettyparser.golden too large to diff
- tests/examples/PackageImportsMissing.hs.prettyprinter.golden too large to diff
- tests/examples/ParallelArrays.hs too large to diff
- tests/examples/ParallelArrays.hs.exactprinter.golden too large to diff
- tests/examples/ParallelArrays.hs.parser.golden too large to diff
- tests/examples/ParallelArrays.hs.prettyparser.golden too large to diff
- tests/examples/ParallelArrays.hs.prettyprinter.golden too large to diff
- tests/examples/ParallelArrays2.hs too large to diff
- tests/examples/ParallelArrays2.hs.exactprinter.golden too large to diff
- tests/examples/ParallelArrays2.hs.parser.golden too large to diff
- tests/examples/ParallelArrays2.hs.prettyparser.golden too large to diff
- tests/examples/ParallelArrays2.hs.prettyprinter.golden too large to diff
- tests/examples/ParallelListComp.hs too large to diff
- tests/examples/ParallelListComp.hs.exactprinter.golden too large to diff
- tests/examples/ParallelListComp.hs.parser.golden too large to diff
- tests/examples/ParallelListComp.hs.prettyparser.golden too large to diff
- tests/examples/ParallelListComp.hs.prettyprinter.golden too large to diff
- tests/examples/ParenFunBind.hs too large to diff
- tests/examples/ParenFunBind.hs.exactprinter.golden too large to diff
- tests/examples/ParenFunBind.hs.parser.golden too large to diff
- tests/examples/ParenFunBind.hs.prettyparser.golden too large to diff
- tests/examples/ParenFunBind.hs.prettyprinter.golden too large to diff
- tests/examples/PartialSignatures.hs too large to diff
- tests/examples/PartialSignatures.hs.exactprinter.golden too large to diff
- tests/examples/PartialSignatures.hs.parser.golden too large to diff
- tests/examples/PartialSignatures.hs.prettyparser.golden too large to diff
- tests/examples/PartialSignatures.hs.prettyprinter.golden too large to diff
- tests/examples/PatSynFix.hs too large to diff
- tests/examples/PatSynFix.hs.exactprinter.golden too large to diff
- tests/examples/PatSynFix.hs.parser.golden too large to diff
- tests/examples/PatSynFix.hs.prettyparser.golden too large to diff
- tests/examples/PatSynFix.hs.prettyprinter.golden too large to diff
- tests/examples/PatternSplice.hs too large to diff
- tests/examples/PatternSplice.hs.exactprinter.golden too large to diff
- tests/examples/PatternSplice.hs.parser.golden too large to diff
- tests/examples/PatternSplice.hs.prettyparser.golden too large to diff
- tests/examples/PatternSplice.hs.prettyprinter.golden too large to diff
- tests/examples/PatternSynonymImport.hs too large to diff
- tests/examples/PatternSynonymImport.hs.exactprinter.golden too large to diff
- tests/examples/PatternSynonymImport.hs.parser.golden too large to diff
- tests/examples/PatternSynonymImport.hs.prettyparser.golden too large to diff
- tests/examples/PatternSynonymImport.hs.prettyprinter.golden too large to diff
- tests/examples/PatternSynonymSignatures.hs too large to diff
- tests/examples/PatternSynonymSignatures.hs.exactprinter.golden too large to diff
- tests/examples/PatternSynonymSignatures.hs.parser.golden too large to diff
- tests/examples/PatternSynonymSignatures.hs.prettyparser.golden too large to diff
- tests/examples/PatternSynonymSignatures.hs.prettyprinter.golden too large to diff
- tests/examples/PatternSynonyms.hs too large to diff
- tests/examples/PatternSynonyms.hs.exactprinter.golden too large to diff
- tests/examples/PatternSynonyms.hs.parser.golden too large to diff
- tests/examples/PatternSynonyms.hs.prettyparser.golden too large to diff
- tests/examples/PatternSynonyms.hs.prettyprinter.golden too large to diff
- tests/examples/PatternSynonyms2.hs too large to diff
- tests/examples/PatternSynonyms2.hs.exactprinter.golden too large to diff
- tests/examples/PatternSynonyms2.hs.parser.golden too large to diff
- tests/examples/PatternSynonyms2.hs.prettyparser.golden too large to diff
- tests/examples/PatternSynonyms2.hs.prettyprinter.golden too large to diff
- tests/examples/PatternSynonyms3.hs too large to diff
- tests/examples/PatternSynonyms3.hs.exactprinter.golden too large to diff
- tests/examples/PatternSynonyms3.hs.parser.golden too large to diff
- tests/examples/PatternSynonyms3.hs.prettyparser.golden too large to diff
- tests/examples/PatternSynonyms3.hs.prettyprinter.golden too large to diff
- tests/examples/PolyKindSigs.hs too large to diff
- tests/examples/PolyKindSigs.hs.exactprinter.golden too large to diff
- tests/examples/PolyKindSigs.hs.parser.golden too large to diff
- tests/examples/PolyKindSigs.hs.prettyparser.golden too large to diff
- tests/examples/PolyKindSigs.hs.prettyprinter.golden too large to diff
- tests/examples/PolyKinds.hs too large to diff
- tests/examples/PolyKinds.hs.exactprinter.golden too large to diff
- tests/examples/PolyKinds.hs.parser.golden too large to diff
- tests/examples/PolyKinds.hs.prettyparser.golden too large to diff
- tests/examples/PolyKinds.hs.prettyprinter.golden too large to diff
- tests/examples/Ppr048.hs too large to diff
- tests/examples/Ppr048.hs.exactprinter.golden too large to diff
- tests/examples/Ppr048.hs.parser.golden too large to diff
- tests/examples/Ppr048.hs.prettyparser.golden too large to diff
- tests/examples/Ppr048.hs.prettyprinter.golden too large to diff
- tests/examples/PrimitiveIntHexLiteral.hs too large to diff
- tests/examples/PrimitiveIntHexLiteral.hs.exactprinter.golden too large to diff
- tests/examples/PrimitiveIntHexLiteral.hs.parser.golden too large to diff
- tests/examples/PrimitiveIntHexLiteral.hs.prettyparser.golden too large to diff
- tests/examples/PrimitiveIntHexLiteral.hs.prettyprinter.golden too large to diff
- tests/examples/PromotedSpace.hs too large to diff
- tests/examples/PromotedSpace.hs.exactprinter.golden too large to diff
- tests/examples/PromotedSpace.hs.parser.golden too large to diff
- tests/examples/PromotedSpace.hs.prettyparser.golden too large to diff
- tests/examples/PromotedSpace.hs.prettyprinter.golden too large to diff
- tests/examples/QQType.hs too large to diff
- tests/examples/QQType.hs.exactprinter.golden too large to diff
- tests/examples/QQType.hs.parser.golden too large to diff
- tests/examples/QQType.hs.prettyparser.golden too large to diff
- tests/examples/QQType.hs.prettyprinter.golden too large to diff
- tests/examples/QualifiedDot.hs too large to diff
- tests/examples/QualifiedDot.hs.exactprinter.golden too large to diff
- tests/examples/QualifiedDot.hs.parser.golden too large to diff
- tests/examples/QualifiedDot.hs.prettyparser.golden too large to diff
- tests/examples/QualifiedDot.hs.prettyprinter.golden too large to diff
- tests/examples/QualifiedQQuote.hs too large to diff
- tests/examples/QualifiedQQuote.hs.exactprinter.golden too large to diff
- tests/examples/QualifiedQQuote.hs.parser.golden too large to diff
- tests/examples/QualifiedQQuote.hs.prettyparser.golden too large to diff
- tests/examples/QualifiedQQuote.hs.prettyprinter.golden too large to diff
- tests/examples/QualifiedRecordfieldPuns.hs too large to diff
- tests/examples/QualifiedRecordfieldPuns.hs.exactprinter.golden too large to diff
- tests/examples/QualifiedRecordfieldPuns.hs.parser.golden too large to diff
- tests/examples/QualifiedRecordfieldPuns.hs.prettyparser.golden too large to diff
- tests/examples/QualifiedRecordfieldPuns.hs.prettyprinter.golden too large to diff
- tests/examples/QuantifiedConstraints.hs too large to diff
- tests/examples/QuantifiedConstraints.hs.exactprinter.golden too large to diff
- tests/examples/QuantifiedConstraints.hs.parser.golden too large to diff
- tests/examples/QuantifiedConstraints.hs.prettyparser.golden too large to diff
- tests/examples/QuantifiedConstraints.hs.prettyprinter.golden too large to diff
- tests/examples/QuasiQuoteLines.hs too large to diff
- tests/examples/QuasiQuoteLines.hs.exactprinter.golden too large to diff
- tests/examples/QuasiQuoteLines.hs.parser.golden too large to diff
- tests/examples/QuasiQuoteLines.hs.prettyparser.golden too large to diff
- tests/examples/QuasiQuoteLines.hs.prettyprinter.golden too large to diff
- tests/examples/QuasiQuoteOld.hs too large to diff
- tests/examples/QuasiQuoteOld.hs.exactprinter.golden too large to diff
- tests/examples/QuasiQuoteOld.hs.parser.golden too large to diff
- tests/examples/QuasiQuoteOld.hs.prettyparser.golden too large to diff
- tests/examples/QuasiQuoteOld.hs.prettyprinter.golden too large to diff
- tests/examples/QuasiQuoteQual2.hs too large to diff
- tests/examples/QuasiQuoteQual2.hs.exactprinter.golden too large to diff
- tests/examples/QuasiQuoteQual2.hs.parser.golden too large to diff
- tests/examples/QuasiQuoteQual2.hs.prettyparser.golden too large to diff
- tests/examples/QuasiQuoteQual2.hs.prettyprinter.golden too large to diff
- tests/examples/QuasiQuoteSplice.hs too large to diff
- tests/examples/QuasiQuoteSplice.hs.exactprinter.golden too large to diff
- tests/examples/QuasiQuoteSplice.hs.parser.golden too large to diff
- tests/examples/QuasiQuoteSplice.hs.prettyparser.golden too large to diff
- tests/examples/QuasiQuoteSplice.hs.prettyprinter.golden too large to diff
- tests/examples/QuasiQuoteToplevel.hs too large to diff
- tests/examples/QuasiQuoteToplevel.hs.exactprinter.golden too large to diff
- tests/examples/QuasiQuoteToplevel.hs.parser.golden too large to diff
- tests/examples/QuasiQuoteToplevel.hs.prettyparser.golden too large to diff
- tests/examples/QuasiQuoteToplevel.hs.prettyprinter.golden too large to diff
- tests/examples/QuasiQuoteUnit.hs too large to diff
- tests/examples/QuasiQuoteUnit.hs.exactprinter.golden too large to diff
- tests/examples/QuasiQuoteUnit.hs.parser.golden too large to diff
- tests/examples/QuasiQuoteUnit.hs.prettyparser.golden too large to diff
- tests/examples/QuasiQuoteUnit.hs.prettyprinter.golden too large to diff
- tests/examples/RCategory.hs too large to diff
- tests/examples/RCategory.hs.exactprinter.golden too large to diff
- tests/examples/RCategory.hs.parser.golden too large to diff
- tests/examples/RCategory.hs.prettyparser.golden too large to diff
- tests/examples/RCategory.hs.prettyprinter.golden too large to diff
- tests/examples/RCategory2.hs too large to diff
- tests/examples/RCategory2.hs.exactprinter.golden too large to diff
- tests/examples/RCategory2.hs.parser.golden too large to diff
- tests/examples/RCategory2.hs.prettyparser.golden too large to diff
- tests/examples/RCategory2.hs.prettyprinter.golden too large to diff
- tests/examples/RCategory3.hs too large to diff
- tests/examples/RCategory3.hs.exactprinter.golden too large to diff
- tests/examples/RCategory3.hs.parser.golden too large to diff
- tests/examples/RCategory3.hs.prettyparser.golden too large to diff
- tests/examples/RCategory3.hs.prettyprinter.golden too large to diff
- tests/examples/ReadP.hs too large to diff
- tests/examples/ReadP.hs.exactprinter.golden too large to diff
- tests/examples/ReadP.hs.parser.golden too large to diff
- tests/examples/ReadP.hs.prettyparser.golden too large to diff
- tests/examples/ReadP.hs.prettyprinter.golden too large to diff
- tests/examples/RealGHC.lhs too large to diff
- tests/examples/RealGHC.lhs.exactprinter.golden too large to diff
- tests/examples/RealGHC.lhs.parser.golden too large to diff
- tests/examples/RealGHC.lhs.prettyparser.golden too large to diff
- tests/examples/RealGHC.lhs.prettyprinter.golden too large to diff
- tests/examples/RecordInfixSelector.hs too large to diff
- tests/examples/RecordInfixSelector.hs.exactprinter.golden too large to diff
- tests/examples/RecordInfixSelector.hs.parser.golden too large to diff
- tests/examples/RecordInfixSelector.hs.prettyparser.golden too large to diff
- tests/examples/RecordInfixSelector.hs.prettyprinter.golden too large to diff
- tests/examples/RecordPatternSynonyms.hs too large to diff
- tests/examples/RecordPatternSynonyms.hs.exactprinter.golden too large to diff
- tests/examples/RecordPatternSynonyms.hs.parser.golden too large to diff
- tests/examples/RecordPatternSynonyms.hs.prettyparser.golden too large to diff
- tests/examples/RecordPatternSynonyms.hs.prettyprinter.golden too large to diff
- tests/examples/RecordPuns.hs too large to diff
- tests/examples/RecordPuns.hs.exactprinter.golden too large to diff
- tests/examples/RecordPuns.hs.parser.golden too large to diff
- tests/examples/RecordPuns.hs.prettyparser.golden too large to diff
- tests/examples/RecordPuns.hs.prettyprinter.golden too large to diff
- tests/examples/RecordWildcard.hs too large to diff
- tests/examples/RecordWildcard.hs.exactprinter.golden too large to diff
- tests/examples/RecordWildcard.hs.parser.golden too large to diff
- tests/examples/RecordWildcard.hs.prettyparser.golden too large to diff
- tests/examples/RecordWildcard.hs.prettyprinter.golden too large to diff
- tests/examples/RecordWildcardError.hs too large to diff
- tests/examples/RecordWildcardError.hs.exactprinter.golden too large to diff
- tests/examples/RecordWildcardError.hs.parser.golden too large to diff
- tests/examples/RecordWildcardError.hs.prettyparser.golden too large to diff
- tests/examples/RecordWildcardError.hs.prettyprinter.golden too large to diff
- tests/examples/RecursiveDo.hs too large to diff
- tests/examples/RecursiveDo.hs.exactprinter.golden too large to diff
- tests/examples/RecursiveDo.hs.parser.golden too large to diff
- tests/examples/RecursiveDo.hs.prettyparser.golden too large to diff
- tests/examples/RecursiveDo.hs.prettyprinter.golden too large to diff
- tests/examples/RegularPatterns.hs too large to diff
- tests/examples/RegularPatterns.hs.exactprinter.golden too large to diff
- tests/examples/RegularPatterns.hs.parser.golden too large to diff
- tests/examples/RegularPatterns.hs.prettyparser.golden too large to diff
- tests/examples/RegularPatterns.hs.prettyprinter.golden too large to diff
- tests/examples/RelaxedDo.hs too large to diff
- tests/examples/RelaxedDo.hs.exactprinter.golden too large to diff
- tests/examples/RelaxedDo.hs.parser.golden too large to diff
- tests/examples/RelaxedDo.hs.prettyparser.golden too large to diff
- tests/examples/RelaxedDo.hs.prettyprinter.golden too large to diff
- tests/examples/RoleAnnotations.hs too large to diff
- tests/examples/RoleAnnotations.hs.exactprinter.golden too large to diff
- tests/examples/RoleAnnotations.hs.parser.golden too large to diff
- tests/examples/RoleAnnotations.hs.prettyparser.golden too large to diff
- tests/examples/RoleAnnotations.hs.prettyprinter.golden too large to diff
- tests/examples/RoleAnnotations2.hs too large to diff
- tests/examples/RoleAnnotations2.hs.exactprinter.golden too large to diff
- tests/examples/RoleAnnotations2.hs.parser.golden too large to diff
- tests/examples/RoleAnnotations2.hs.prettyparser.golden too large to diff
- tests/examples/RoleAnnotations2.hs.prettyprinter.golden too large to diff
- tests/examples/Rules.hs too large to diff
- tests/examples/Rules.hs.exactprinter.golden too large to diff
- tests/examples/Rules.hs.parser.golden too large to diff
- tests/examples/Rules.hs.prettyparser.golden too large to diff
- tests/examples/Rules.hs.prettyprinter.golden too large to diff
- tests/examples/SCCPragmas.hs too large to diff
- tests/examples/SCCPragmas.hs.exactprinter.golden too large to diff
- tests/examples/SCCPragmas.hs.parser.golden too large to diff
- tests/examples/SCCPragmas.hs.prettyparser.golden too large to diff
- tests/examples/SCCPragmas.hs.prettyprinter.golden too large to diff
- tests/examples/SafeImports1.hs too large to diff
- tests/examples/SafeImports1.hs.exactprinter.golden too large to diff
- tests/examples/SafeImports1.hs.parser.golden too large to diff
- tests/examples/SafeImports1.hs.prettyparser.golden too large to diff
- tests/examples/SafeImports1.hs.prettyprinter.golden too large to diff
- tests/examples/SafeImports2.hs too large to diff
- tests/examples/SafeImports2.hs.exactprinter.golden too large to diff
- tests/examples/SafeImports2.hs.parser.golden too large to diff
- tests/examples/SafeImports2.hs.prettyparser.golden too large to diff
- tests/examples/SafeImports2.hs.prettyprinter.golden too large to diff
- tests/examples/SafeImports3.hs too large to diff
- tests/examples/SafeImports3.hs.exactprinter.golden too large to diff
- tests/examples/SafeImports3.hs.parser.golden too large to diff
- tests/examples/SafeImports3.hs.prettyparser.golden too large to diff
- tests/examples/SafeImports3.hs.prettyprinter.golden too large to diff
- tests/examples/ScopedTypeVariables.hs too large to diff
- tests/examples/ScopedTypeVariables.hs.exactprinter.golden too large to diff
- tests/examples/ScopedTypeVariables.hs.parser.golden too large to diff
- tests/examples/ScopedTypeVariables.hs.prettyparser.golden too large to diff
- tests/examples/ScopedTypeVariables.hs.prettyprinter.golden too large to diff
- tests/examples/SimpleDeriving.hs too large to diff
- tests/examples/SimpleDeriving.hs.exactprinter.golden too large to diff
- tests/examples/SimpleDeriving.hs.parser.golden too large to diff
- tests/examples/SimpleDeriving.hs.prettyparser.golden too large to diff
- tests/examples/SimpleDeriving.hs.prettyprinter.golden too large to diff
- tests/examples/SingleClassAsst.hs too large to diff
- tests/examples/SingleClassAsst.hs.exactprinter.golden too large to diff
- tests/examples/SingleClassAsst.hs.parser.golden too large to diff
- tests/examples/SingleClassAsst.hs.prettyparser.golden too large to diff
- tests/examples/SingleClassAsst.hs.prettyprinter.golden too large to diff
- tests/examples/SpecializeInstance.hs too large to diff
- tests/examples/SpecializeInstance.hs.exactprinter.golden too large to diff
- tests/examples/SpecializeInstance.hs.parser.golden too large to diff
- tests/examples/SpecializeInstance.hs.prettyparser.golden too large to diff
- tests/examples/SpecializeInstance.hs.prettyprinter.golden too large to diff
- tests/examples/SpecializePhaseControl.hs too large to diff
- tests/examples/SpecializePhaseControl.hs.exactprinter.golden too large to diff
- tests/examples/SpecializePhaseControl.hs.parser.golden too large to diff
- tests/examples/SpecializePhaseControl.hs.prettyparser.golden too large to diff
- tests/examples/SpecializePhaseControl.hs.prettyprinter.golden too large to diff
- tests/examples/StarInType.hs too large to diff
- tests/examples/StarInType.hs.exactprinter.golden too large to diff
- tests/examples/StarInType.hs.parser.golden too large to diff
- tests/examples/StarInType.hs.prettyparser.golden too large to diff
- tests/examples/StarInType.hs.prettyprinter.golden too large to diff
- tests/examples/T11727.hs too large to diff
- tests/examples/T11727.hs.exactprinter.golden too large to diff
- tests/examples/T11727.hs.parser.golden too large to diff
- tests/examples/T11727.hs.prettyparser.golden too large to diff
- tests/examples/T11727.hs.prettyprinter.golden too large to diff
- tests/examples/T13050.hs too large to diff
- tests/examples/T13050.hs.exactprinter.golden too large to diff
- tests/examples/T13050.hs.parser.golden too large to diff
- tests/examples/T13050.hs.prettyparser.golden too large to diff
- tests/examples/T13050.hs.prettyprinter.golden too large to diff
- tests/examples/T326.hs too large to diff
- tests/examples/T326.hs.exactprinter.golden too large to diff
- tests/examples/T326.hs.parser.golden too large to diff
- tests/examples/T326.hs.prettyparser.golden too large to diff
- tests/examples/T326.hs.prettyprinter.golden too large to diff
- tests/examples/THTSplices.hs too large to diff
- tests/examples/THTSplices.hs.exactprinter.golden too large to diff
- tests/examples/THTSplices.hs.parser.golden too large to diff
- tests/examples/THTSplices.hs.prettyparser.golden too large to diff
- tests/examples/THTSplices.hs.prettyprinter.golden too large to diff
- tests/examples/THTypedSplices.hs too large to diff
- tests/examples/THTypedSplices.hs.exactprinter.golden too large to diff
- tests/examples/THTypedSplices.hs.parser.golden too large to diff
- tests/examples/THTypedSplices.hs.prettyparser.golden too large to diff
- tests/examples/THTypedSplices.hs.prettyprinter.golden too large to diff
- tests/examples/THTypes.hs too large to diff
- tests/examples/THTypes.hs.exactprinter.golden too large to diff
- tests/examples/THTypes.hs.parser.golden too large to diff
- tests/examples/THTypes.hs.prettyparser.golden too large to diff
- tests/examples/THTypes.hs.prettyprinter.golden too large to diff
- tests/examples/TabWhitespace.hs too large to diff
- tests/examples/TabWhitespace.hs.exactprinter.golden too large to diff
- tests/examples/TabWhitespace.hs.parser.golden too large to diff
- tests/examples/TabWhitespace.hs.prettyparser.golden too large to diff
- tests/examples/TabWhitespace.hs.prettyprinter.golden too large to diff
- tests/examples/TemplateHaskellQuotedNames.hs too large to diff
- tests/examples/TemplateHaskellQuotedNames.hs.exactprinter.golden too large to diff
- tests/examples/TemplateHaskellQuotedNames.hs.parser.golden too large to diff
- tests/examples/TemplateHaskellQuotedNames.hs.prettyparser.golden too large to diff
- tests/examples/TemplateHaskellQuotedNames.hs.prettyprinter.golden too large to diff
- tests/examples/TensorTests.hs too large to diff
- tests/examples/TensorTests.hs.exactprinter.golden too large to diff
- tests/examples/TensorTests.hs.parser.golden too large to diff
- tests/examples/TensorTests.hs.prettyparser.golden too large to diff
- tests/examples/TensorTests.hs.prettyprinter.golden too large to diff
- tests/examples/Testing.hs too large to diff
- tests/examples/Testing.hs.exactprinter.golden too large to diff
- tests/examples/Testing.hs.parser.golden too large to diff
- tests/examples/Testing.hs.prettyparser.golden too large to diff
- tests/examples/Testing.hs.prettyprinter.golden too large to diff
- tests/examples/TrailingWhere.hs too large to diff
- tests/examples/TrailingWhere.hs.exactprinter.golden too large to diff
- tests/examples/TrailingWhere.hs.parser.golden too large to diff
- tests/examples/TrailingWhere.hs.prettyparser.golden too large to diff
- tests/examples/TrailingWhere.hs.prettyprinter.golden too large to diff
- tests/examples/TrailingWhere2.hs too large to diff
- tests/examples/TrailingWhere2.hs.exactprinter.golden too large to diff
- tests/examples/TrailingWhere2.hs.parser.golden too large to diff
- tests/examples/TrailingWhere2.hs.prettyparser.golden too large to diff
- tests/examples/TrailingWhere2.hs.prettyprinter.golden too large to diff
- tests/examples/TrailingWhere3.hs too large to diff
- tests/examples/TrailingWhere3.hs.exactprinter.golden too large to diff
- tests/examples/TrailingWhere3.hs.parser.golden too large to diff
- tests/examples/TrailingWhere3.hs.prettyparser.golden too large to diff
- tests/examples/TrailingWhere3.hs.prettyprinter.golden too large to diff
- tests/examples/TupleSections.hs too large to diff
- tests/examples/TupleSections.hs.exactprinter.golden too large to diff
- tests/examples/TupleSections.hs.parser.golden too large to diff
- tests/examples/TupleSections.hs.prettyparser.golden too large to diff
- tests/examples/TupleSections.hs.prettyprinter.golden too large to diff
- tests/examples/TyQuasiQuote.hs too large to diff
- tests/examples/TyQuasiQuote.hs.exactprinter.golden too large to diff
- tests/examples/TyQuasiQuote.hs.parser.golden too large to diff
- tests/examples/TyQuasiQuote.hs.prettyparser.golden too large to diff
- tests/examples/TyQuasiQuote.hs.prettyprinter.golden too large to diff
- tests/examples/TySplice.hs too large to diff
- tests/examples/TySplice.hs.exactprinter.golden too large to diff
- tests/examples/TySplice.hs.parser.golden too large to diff
- tests/examples/TySplice.hs.prettyparser.golden too large to diff
- tests/examples/TySplice.hs.prettyprinter.golden too large to diff
- tests/examples/TySplice2.hs too large to diff
- tests/examples/TySplice2.hs.exactprinter.golden too large to diff
- tests/examples/TySplice2.hs.parser.golden too large to diff
- tests/examples/TySplice2.hs.prettyparser.golden too large to diff
- tests/examples/TySplice2.hs.prettyprinter.golden too large to diff
- tests/examples/TySplice3.hs too large to diff
- tests/examples/TySplice3.hs.exactprinter.golden too large to diff
- tests/examples/TySplice3.hs.parser.golden too large to diff
- tests/examples/TySplice3.hs.prettyparser.golden too large to diff
- tests/examples/TySplice3.hs.prettyprinter.golden too large to diff
- tests/examples/TySplice4.hs too large to diff
- tests/examples/TySplice4.hs.exactprinter.golden too large to diff
- tests/examples/TySplice4.hs.parser.golden too large to diff
- tests/examples/TySplice4.hs.prettyparser.golden too large to diff
- tests/examples/TySplice4.hs.prettyprinter.golden too large to diff
- tests/examples/TypeEqualityParen.hs too large to diff
- tests/examples/TypeEqualityParen.hs.exactprinter.golden too large to diff
- tests/examples/TypeEqualityParen.hs.parser.golden too large to diff
- tests/examples/TypeEqualityParen.hs.prettyparser.golden too large to diff
- tests/examples/TypeEqualityParen.hs.prettyprinter.golden too large to diff
- tests/examples/TypeErrorMessage.hs too large to diff
- tests/examples/TypeErrorMessage.hs.exactprinter.golden too large to diff
- tests/examples/TypeErrorMessage.hs.parser.golden too large to diff
- tests/examples/TypeErrorMessage.hs.prettyparser.golden too large to diff
- tests/examples/TypeErrorMessage.hs.prettyprinter.golden too large to diff
- tests/examples/TypeFunctions.hs too large to diff
- tests/examples/TypeFunctions.hs.exactprinter.golden too large to diff
- tests/examples/TypeFunctions.hs.parser.golden too large to diff
- tests/examples/TypeFunctions.hs.prettyparser.golden too large to diff
- tests/examples/TypeFunctions.hs.prettyprinter.golden too large to diff
- tests/examples/TypeInstances.hs too large to diff
- tests/examples/TypeInstances.hs.exactprinter.golden too large to diff
- tests/examples/TypeInstances.hs.parser.golden too large to diff
- tests/examples/TypeInstances.hs.prettyparser.golden too large to diff
- tests/examples/TypeInstances.hs.prettyprinter.golden too large to diff
- tests/examples/TypeListCons.hs too large to diff
- tests/examples/TypeListCons.hs.exactprinter.golden too large to diff
- tests/examples/TypeListCons.hs.parser.golden too large to diff
- tests/examples/TypeListCons.hs.prettyparser.golden too large to diff
- tests/examples/TypeListCons.hs.prettyprinter.golden too large to diff
- tests/examples/TypeOperatorAsVariable.hs too large to diff
- tests/examples/TypeOperatorAsVariable.hs.exactprinter.golden too large to diff
- tests/examples/TypeOperatorAsVariable.hs.parser.golden too large to diff
- tests/examples/TypeOperatorAsVariable.hs.prettyparser.golden too large to diff
- tests/examples/TypeOperatorAsVariable.hs.prettyprinter.golden too large to diff
- tests/examples/TypeOperatorsTest.hs too large to diff
- tests/examples/TypeOperatorsTest.hs.exactprinter.golden too large to diff
- tests/examples/TypeOperatorsTest.hs.parser.golden too large to diff
- tests/examples/TypeOperatorsTest.hs.prettyparser.golden too large to diff
- tests/examples/TypeOperatorsTest.hs.prettyprinter.golden too large to diff
- tests/examples/UnboxedSingleton.hs too large to diff
- tests/examples/UnboxedSingleton.hs.exactprinter.golden too large to diff
- tests/examples/UnboxedSingleton.hs.parser.golden too large to diff
- tests/examples/UnboxedSingleton.hs.prettyparser.golden too large to diff
- tests/examples/UnboxedSingleton.hs.prettyprinter.golden too large to diff
- tests/examples/UnboxedTuples.hs too large to diff
- tests/examples/UnboxedTuples.hs.exactprinter.golden too large to diff
- tests/examples/UnboxedTuples.hs.parser.golden too large to diff
- tests/examples/UnboxedTuples.hs.prettyparser.golden too large to diff
- tests/examples/UnboxedTuples.hs.prettyprinter.golden too large to diff
- tests/examples/Unicode.hs too large to diff
- tests/examples/Unicode.hs.exactprinter.golden too large to diff
- tests/examples/Unicode.hs.parser.golden too large to diff
- tests/examples/Unicode.hs.prettyparser.golden too large to diff
- tests/examples/Unicode.hs.prettyprinter.golden too large to diff
- tests/examples/Unicode2.hs too large to diff
- tests/examples/Unicode2.hs.exactprinter.golden too large to diff
- tests/examples/Unicode2.hs.parser.golden too large to diff
- tests/examples/Unicode2.hs.prettyparser.golden too large to diff
- tests/examples/Unicode2.hs.prettyprinter.golden too large to diff
- tests/examples/UnicodeArrow.hs too large to diff
- tests/examples/UnicodeArrow.hs.exactprinter.golden too large to diff
- tests/examples/UnicodeArrow.hs.parser.golden too large to diff
- tests/examples/UnicodeArrow.hs.prettyparser.golden too large to diff
- tests/examples/UnicodeArrow.hs.prettyprinter.golden too large to diff
- tests/examples/UnicodeIdents.hs too large to diff
- tests/examples/UnicodeIdents.hs.exactprinter.golden too large to diff
- tests/examples/UnicodeIdents.hs.parser.golden too large to diff
- tests/examples/UnicodeIdents.hs.prettyparser.golden too large to diff
- tests/examples/UnicodeIdents.hs.prettyprinter.golden too large to diff
- tests/examples/UnicodeRelation.hs too large to diff
- tests/examples/UnicodeRelation.hs.exactprinter.golden too large to diff
- tests/examples/UnicodeRelation.hs.parser.golden too large to diff
- tests/examples/UnicodeRelation.hs.prettyparser.golden too large to diff
- tests/examples/UnicodeRelation.hs.prettyprinter.golden too large to diff
- tests/examples/UnicodeSubscript.hs too large to diff
- tests/examples/UnicodeSubscript.hs.exactprinter.golden too large to diff
- tests/examples/UnicodeSubscript.hs.parser.golden too large to diff
- tests/examples/UnicodeSubscript.hs.prettyparser.golden too large to diff
- tests/examples/UnicodeSubscript.hs.prettyprinter.golden too large to diff
- tests/examples/UnicodeSuperscript.hs too large to diff
- tests/examples/UnicodeSuperscript.hs.exactprinter.golden too large to diff
- tests/examples/UnicodeSuperscript.hs.parser.golden too large to diff
- tests/examples/UnicodeSuperscript.hs.prettyparser.golden too large to diff
- tests/examples/UnicodeSuperscript.hs.prettyprinter.golden too large to diff
- tests/examples/UnicodeSyntax.hs too large to diff
- tests/examples/UnicodeSyntax.hs.exactprinter.golden too large to diff
- tests/examples/UnicodeSyntax.hs.parser.golden too large to diff
- tests/examples/UnicodeSyntax.hs.prettyparser.golden too large to diff
- tests/examples/UnicodeSyntax.hs.prettyprinter.golden too large to diff
- tests/examples/UnindentedPragmaClose.hs too large to diff
- tests/examples/UnindentedPragmaClose.hs.exactprinter.golden too large to diff
- tests/examples/UnindentedPragmaClose.hs.parser.golden too large to diff
- tests/examples/UnindentedPragmaClose.hs.prettyparser.golden too large to diff
- tests/examples/UnindentedPragmaClose.hs.prettyprinter.golden too large to diff
- tests/examples/Unpack.hs too large to diff
- tests/examples/Unpack.hs.exactprinter.golden too large to diff
- tests/examples/Unpack.hs.parser.golden too large to diff
- tests/examples/Unpack.hs.prettyparser.golden too large to diff
- tests/examples/Unpack.hs.prettyprinter.golden too large to diff
- tests/examples/ViewPatterns.hs too large to diff
- tests/examples/ViewPatterns.hs.exactprinter.golden too large to diff
- tests/examples/ViewPatterns.hs.parser.golden too large to diff
- tests/examples/ViewPatterns.hs.prettyparser.golden too large to diff
- tests/examples/ViewPatterns.hs.prettyprinter.golden too large to diff
- tests/examples/Vta1.hs too large to diff
- tests/examples/Vta1.hs.exactprinter.golden too large to diff
- tests/examples/Vta1.hs.parser.golden too large to diff
- tests/examples/Vta1.hs.prettyparser.golden too large to diff
- tests/examples/Vta1.hs.prettyprinter.golden too large to diff
- tests/examples/Vta2.hs too large to diff
- tests/examples/Vta2.hs.exactprinter.golden too large to diff
- tests/examples/Vta2.hs.parser.golden too large to diff
- tests/examples/Vta2.hs.prettyparser.golden too large to diff
- tests/examples/Vta2.hs.prettyprinter.golden too large to diff
- tests/examples/WhereBlock.hs too large to diff
- tests/examples/WhereBlock.hs.exactprinter.golden too large to diff
- tests/examples/WhereBlock.hs.parser.golden too large to diff
- tests/examples/WhereBlock.hs.prettyparser.golden too large to diff
- tests/examples/WhereBlock.hs.prettyprinter.golden too large to diff
- tests/examples/WildcardTyFam.hs too large to diff
- tests/examples/WildcardTyFam.hs.exactprinter.golden too large to diff
- tests/examples/WildcardTyFam.hs.parser.golden too large to diff
- tests/examples/WildcardTyFam.hs.prettyparser.golden too large to diff
- tests/examples/WildcardTyFam.hs.prettyprinter.golden too large to diff
- tests/examples/brackets.hs too large to diff
- tests/examples/brackets.hs.exactprinter.golden too large to diff
- tests/examples/brackets.hs.parser.golden too large to diff
- tests/examples/brackets.hs.prettyparser.golden too large to diff
- tests/examples/brackets.hs.prettyprinter.golden too large to diff
- tests/examples/completesig01.hs too large to diff
- tests/examples/completesig01.hs.exactprinter.golden too large to diff
- tests/examples/completesig01.hs.parser.golden too large to diff
- tests/examples/completesig01.hs.prettyparser.golden too large to diff
- tests/examples/completesig01.hs.prettyprinter.golden too large to diff
- tests/examples/t403.hs too large to diff
- tests/examples/t403.hs.exactprinter.golden too large to diff
- tests/examples/t403.hs.parser.golden too large to diff
- tests/examples/t403.hs.prettyparser.golden too large to diff
- tests/examples/t403.hs.prettyprinter.golden too large to diff
- tests/examples/t412.hs too large to diff
- tests/examples/t412.hs.exactprinter.golden too large to diff
- tests/examples/t412.hs.parser.golden too large to diff
- tests/examples/t412.hs.prettyparser.golden too large to diff
- tests/examples/t412.hs.prettyprinter.golden too large to diff
@@ -0,0 +1,736 @@+1.23.1 --> 1.24.0+=================+* Support ImportQualifiedPost (#477)+ - Technically breaking change: KnownExtension gained a new constructor ImportQualifiedPost+* Fix pretty printing of promoted list/tuple with space padding (#423)+* Fix lexing of operator symbols like @: when TypeApplications is enabled (#430)+* Read files strictly before closing to prevent resource leaks (#460)+* Add Safe Haskell annotations to many modules (#465)+* Remove noncanonical return and mappend definitions (#481)+* Solve some compiler warnings (#464)+* Performance optimization: use strict accumulators in lexString and parseInteger (#479)+++1.23.0 --> 1.23.1+=================+* show instance for SrcLoc and SrcSpan renders "(-1)" instead of "-1"+* Allow empty closed type families (#452)+++1.22.0 --> 1.23.0+=================+* Add support for BlockArguments (#444)+ - Technically breaking change: KnownExtension gained a new constructor BlockArguments+* Add support for Arrow Brackets (#445)+ - Tecnically breaking change: Exp gained new constructor ArrOp++1.21.1 --> 1.22.0+=================+* Support QuantifiedConstraints (#427)+ - Breaking change: constructors for PAsst changed+ - Technically breaking change: KnownExtention gained a new constructor QuantifiedConstraints+* Support Template Haskell typed splices and quotations (#432)+ - Breaking change: new constructors on Token data type+* Fix unicode identifier parsing (#442)++1.21.0 --> 1.21.1+=================+* GHC 8.8.1 compatibility (MonadFail)++1.20.3 --> 1.21.0+=================+* DerivingVia (#420)+* TypeInType (#414)+* Parse TH-quoted list constructor (#415)++1.20.2 --> 1.20.3+=================+* GHC 8.6.1 compatability (MonadFail)+* Remove cpphs dependency++1.20.1 --> 1.20.2+=================+* Add fixity of (&)+* GHC 8.4.1 compatability++1.20.0 --> 1.20.1+===================+* Fix two test failures++1.19.1 --> 1.20.0+===================++* GHC 8.2 updates+* Add some missing Generics instances (#380)+* Support Template Haskell pattern splices (#352)+* Fix overloaded labels starting with _ (#362)+* Relax MultiParamTypeClass check (#333)+* DeriveAnyClass (#337)+* Deriving Strategies (#387)+* OVERLAPS/OVERLAPPING/OVERLAPPABLE pragmas+* Unboxed Sums+* Expression holes in infix expressions+* Support multiple pattern synonyms per pattern synonym signature+* COMPLETE pragmas+* Fix #309, remove unnecessary semi-colon from pretty printer+* Refine ExplicitNamespaces to properly export type operators++1.19.0 --> 1.19.1+===================++* Revert making fields of `SrcLoc` strict. (#340)+++1.18.2 --> 1.19.0+===================++* Add JavaScriptFFI to known extensions (#335)+* Remove space when pretty printing `SrcLoc`. (#307)+* Don't reverse arguments in a context. (#328)+* Add support for EmptyCase extension (#255)+++1.18.1 --> 1.18.2+===================++* Fix overzealous lexing of type applications++1.18.0 --> 1.18.1+===================++* Fix overzealous lexing of overloaded labels.+++1.17.1 --> 1.18.0+===================++* Remove simplified AST+* GHC 8.0 update: Overloaded labels, type applications, pattern synonym+extensions, StrictData, injective type families++AST changes:++* Add TyQuasiQuote (#279).++Other changes:++* Only treat 'role' as a keyword in certain contexts (#286).+* Prettyprint '!' in patterns correctly when BangPatterns are enabled (#287).+* Parse magic hash with multiple trailing hashes (#300).+* Apply fixities inside pattern synonym builders+* Fix lexing of idents with multiple trailing #++** 1.17.x++1.17.0 --> 1.17.1+=================++Bug Fix:++* Fix bug in parsing view patterns (#284)++1.16.0.1 --> 1.17.0+===================++AST changes:++* Replaced VarA with AppA in Asst (#168).+* Promoted list/tuple members changed from Promoted to Type (#162).+* Update PatBind, Match, and Alt from containing Binds to Maybe Binds to+ distinguish between empty where clauses and where clauses with no+ binds (#244).+* Add RoleAnnotDecl and Role to support Role annotations (#215).+* Move NameSpace field from EVar/IVar to EAbs/IAbs.++Other changes:++* Add standalone parsers for ImportDecl.+* Fix pretty-printer bugs for HaRP (#160).+* Insert parentheses when pretty-printing non-atomic bang types (#169).+* Un-reverse confusion of left and right arrow (#175).+* Prettyprint option pragmas like 1.15 (#172).+* Conditionally insert lines when pretty-printing declarations (#171).+* Distinguish deriving (Show) from deriving Show (#189).+* Allow parsing of unicode subscript and superscript functions (#173).+* Pretty print unboxed tuples with spaces (#193).+* Improve performance when parsing long extension lists (#200).+* Properly pretty print constructor and class operators (#204).+* Read Haskell source files as UTF-8 (#223).+* Fix ExplicitNamespaces parsing (#216).+* PolyKinds implies KindSignatures (#220).+* Preserve location information for infix binds (#205).+* Preserve positional information in checkPattern (#231).+* Maintain correct line numbers when parsing multiline GHC_OPTIONS (#218).+* Correctly parse "*" with TypeOperators (#81).+* Export the "pretty" method (#222).+* Add javascript calling convention for foreign imports (#236).+* Add non-greedy parsers for module heads (#191).+* Add a flag to disable arity checking when parsing (#260).+* Parse "-" in type signatures (#206).+* Add support for type wildcards and expression holes (#252).+* Add support for Pattern Synonyms (#197).+* Bump the happy lower bound (#250).+* Make test suite pass on GHC 7.12 (#224).+* Support linking Haddock comments to AST nodes (#213).+* Parse multiline LANGUAGE pragmas (#217).+* Parse trailing where (#25).+* Parse modules starting with pragmas and indented+ "module" keyword (#122).+* Use pretty-show to get human readable test outputs.+* Respect fixity declarations inside where/let/class in+ `applyFixities` (#212).+* Correctly parse the combination of view patterns and bang patterns. (#276)++** 1.16.x++1.16.0 --> 1.16.0.1+===================++Include generated InternalParser.hs in the release tarball+(See http://ro-che.info/articles/2014-03-08-happy-alex-ghc-7.8 for details)++1.15.0.1 --> 1.16.0+===================++New language features:++* DoRec+* Closed type families+* GADT records+* ExplicitNamespaces+* Type equality constraints+* PolyKinds+* DataKinds+* Default associated types+* Instance signatures+* OVERLAP pragma+* Parallel arrays+* MINIMAL pragma+* Default signatures+* Safe Haskell+* Binary literals+* Qualified record puns+* Type splices++AST changes:++* PatBind no longer contains the optional Maybe Type field. The type+ signature is now represented as part of the pattern (PatTypeSig)+* GuardedAlt and GuardedAlts types are replaced with the isomorphic+ GuardedRhs and Rhs types+* Move parentheses from the Context to Asst type+* Change DeclHead and InstHead to make it possible to represent+ various ways to put parentheses around parts of declarations. Introduce a new+ type InstRule for the same purpose.+* Change representation of negated patterns+* Make strictness annotations on data type fields part of those fields' Type++Notable bug fixes:++* Allow statements, and not just expression, in MultiWayIf conditions+* Allow equality constraints when GADTs are enabled+* Fix parsing and printing of pragma modifiers, such as CONLIKE+* Don't treat 'capi' or 'interruptible' as a keyword except after 'foreign'+* Let ImpredicativeTypes imply ExplicitForAll+* Let RecursiveDo enable 'rec' keyword+* Fix pretty-printing of the unary minus sign+* Do not require FlexibleContexts for things like Ord (i Int) => ...+* Fix pretty-printing of deriving clauses+* Parse "Constraint" as a kind with ConstraintKinds enabled+* Support qualified quasi-quoters+* Enable ScopedTypeVariables when parsing rules+* Only permit record wildcards in last position+* Allow n-parameter infix data declaration heads++Other changes:++* Expose showToken from Language.Haskell.Exts.Lexer+* Show instance for SrcLoc and SrcSpan are changed (now they do not contain+* field names)+* Add DeriveGeneric to known extensions++** 1.15.x++1.15.0 --> 1.15.0.1+===============++* Eliminate inexhaustive patterns (and consequent bugs)+* The test suite for 1.15.0 wouldn't build due to a missing file in the source+ distribution. Fixed.++1.14.0.1 --> 1.15.0+===============++* Add support for extensions:+ - MultiWayIf+ - LambdaCase+ - DataKinds+* Remove support for old (deprecated) Generics+* Derive GHC's Generic instances for datatypes+* Derive some missing Data and Typeable instances+* Multiple bug fixes+* Add missing Functor and Applicative instances for monads+* Remove support for GHCs older than 7.4++** 1.14.x++1.14.0 --> 1.14.0.1+===============++Nothing has actually changed here (apart from the CHANGELOG). This release is+done to include InternalParser.hs generated with happy 1.19 so that it compiles+with GHC 7.8.++1.13.6 --> 1.14.0+===============++* Modernize the Extension datatype in L.H.E.Extension, following the lead+ of Cabal, to allow negative and positive extension modifiers (turning+ features on and off). You need to worry about backwards-incompatible+ changes if any of the following pertains to you:+ 1) If you use the Extension datatype programmatically - it has changed+ significantly (see documentation).+ 2) The ParseMode record now has one more field+ (baseLanguage :: Language), which might give you a type error.+ 3) The behavior of the (extensions :: [Extension]) field has changed,+ which could bite you if you pass custom extensions in the ParseMode.+ Previously, the ParseMode defaulted to the list of extensions accepted+ by Haskell2010, and if you set the list explicitly you would override+ this. Now, the defaults are { baseLanguage = Haskell2010, extensions = [] },+ and explicitly setting a list of extensions will be interpreted on top of+ Haskell2010. See further the documentation for L.H.E.Extension.++* Add support for the 'capi' calling convention. It is enabled with the CApiFFI+ extension. It's been included since GHC 7.4, and advertised since 7.6.++* Add support for the 'interruptible' FFI safety annotation, enabled with+ the InterruptibleFFI extension.++* Give better error message when lexing newline fails. In particular, fix the bug+ when the parser would crash if the file didn't end with a newline.++* Support unboxed tuple expressions and patterns.++* Fix bug in lexing of primitive integer literals in hex or octal notation.++* Disallow negative primitive word literals+ (such as W# (-0x8000000000000000##)).++* Allow phase control for SPECIALIZE pragma.++* Derive Foldable and Traversable instances for all annotated AST types.++* Fix bug with pretty-printing WARNING and DEPRECATED pragmas.+++** 1.13.x++1.13.5 --> 1.13.6+===============++* Allow 0-parameter type classes when MultiParamTypeClasses is on.++* Add support for NondecreasingIndentation. Previously it was always on,+ which is the default behavior in GHC. Now it is on only if enabled, or+ when using the newly added ghcDefaults extension set (instead of haskell2010).+++1.13.4 --> 1.13.5+===============++* Expose Language.Haskell.Exts.Lexer, which implements+ a standalone token stream lexer. The module is+ re-exported both by Language.Haskell.Exts and by+ Language.Haskell.Exts.Annotated.+++1.13.3 --> 1.13.4+===============++* Fix bug where operators starting with # written in+ parentheses would not be parsed when UnboxedTuples is+ turned on. Now works.++* Allow 'family' and 'forall' as (non-type) varid's. This+ adds one more shift/reduce conflict to the parser, and+ its resolution means that '{-# RULES "name" forall = ... #-}'+ is not allowed.++* Complete the set of FFI calling conventions from the Haskell+ 2010 report (even if no compiler implements them). Also+ include the 'js' calling convention, supported by UHC.+++1.13.2 --> 1.13.3+===============++* Fundep premises are now allowed to be empty.++* Fix the bug where the lexer would crash on a LINE pragma+ that did not include a line number.++* Fix the bug where the lexer would require the # of a+ MagicHash-style type constructor to be succeeded by at+ least one character in the file.++* Fix long-standing bug where the parser would crash with+ an ugly "Internal error" error message if encountering+ an extra }.++* Report errors at the right place for function arity+ mismatches. Earlier they were reported at end of file,+ now they are reported where the function is declared.++* Lexer now properly fails on line-breaks in string literals.++* Lexer now handles character escapes up to 0x10FFFF (unicode).+++1.13.1 --> 1.13.2+===============++* Fix the bug with the precedence of unary prefix minus.+ Previously it was resolved as binding more tightly+ than any infix operator, now it is correctly treated+ as having the same fixity as binary infix minus.+++1.13.0 --> 1.13.1+===============++* Allow an optional semi before the closing tag of+ an element. This achieves a similar effect for+ XmlSyntax in do blocks as DoAndIfThenElse does for+ the if construct. No more need to indent the closing+ tag one step further than the opening tag.++* Add a dummy 'noLoc :: SrcLoc' to L.H.E.SrcLoc, to+ use when generating code. It could definitely be+ done more elegantly, but not without inducing another+ major version bump, so later.++* Fix a regression from 1.11.x where the parser would crash+ upon encountering non-simple class/data declaration+ heads, e.g. 'data A [a]'. Now fails with a parse error+ as intended.+++1.12.0 --> 1.13.0+===============++* Add extensions DoAndIfThenElse and NPlusKPatterns to+ Language.Haskell.Exts.Extensions.++* DoAndIfThenElse is now supported, at long last,+ making HSE compatible with Haskell2010++* Introduce haskell98 and haskell2010 extension groups,+ exported from Language.Haskell.Exts.Extensions.++* Backwards-incompatible change: default parse mode+ is now to use haskell2010, which means the following+ features are recognized by default: DoAndIfThenElse,+ PatternGuards, ForeignFunctionInterface, EmptyDataDecls.+ NPlusKPatterns is no longer recognized by default.+++** 1.12.x++1.11.1 --> 1.12.0+===============++* Move from old [$...| quasi-quote syntax to the new [...| one.+ The old syntax is still recognized while parsing.++* Allow symbols as variables when TypeOperators is enabled.++* Rename ExplicitForall in ExplicitForAll, to be consistent+ with GHC and the Haskell' process.+++** 1.11.x++1.10.2 --> 1.11.1+===============++* API change: the fixities field in ParseMode is now of type+ Maybe [Fixity]. If the field is Nothing the parsing will+ not try to do any fixity resolution whatsoever, otherwise+ it behaves as before.++* API change, bug fix: The Fixity type contains a QName rather+ than an Op to name the operator. The operator must match+ the given QName exactly (i.e., unqualified names only match+ unqualified names, and qualified names only match qualified+ names) for applyFixities to perform fixups.++* Bug fix: End-of-file inside an OPTIONS pragma no longer loops.++++** 1.10.x++1.10.1 --> 1.10.2+===============++* Fix a missing case in the Functor declaration for Decl. Thanks+ to Malcolm Wallace for the patch!++1.10.0 --> 1.10.1+===============++* Enable the unicode version of DoubleColon (x2237). Thanks+ to Andr�s Sicard-Ram�rez for the patch!++1.9.6 --> 1.10.0+===============++* Ensure that implied extensions are always picked up, not only+ when using the parseFile* family of functions as previously.++* Add the newly devised <%>...</%> syntax to the XmlSyntax support.+ This causes changes to pretty much everything, including adding+ a case to the AST which prompts the major version bump.+++** 1.9.x++1.9.5 --> 1.9.6+===============++* Fix a bug (#203) where the lexer loops on malformed quasi-quoters.++* Fix a bug with pretty-printing RULES pragmas.++1.9.4 --> 1.9.5+===============++* Fix a bug where deriving clauses for GADT-style data declarations+ were not properly indented.++* Pretty-printing patterns is now more accurate in inserting (and not+ inserting) parentheses when needed.++1.9.3 --> 1.9.4+===============++* Pretty-printer now inserts parentheses in clever places when+ printing kinds.++* Pretty-printing expressions is now far more accurate in inserting+ (and not inserting) parentheses when needed.++* Pretty-printing negative expressions no longer inserts a superfluous+ space between the - and the expression.++1.9.2 --> 1.9.3+===============++* Constructors for newtype declarations must now have exactly one+ argument. This is only when using the classic syntax, not with+ GADT-style syntax.++* Fix a bug where preceding commas in tuple sections were counted+ one too few.++1.9.1 --> 1.9.2+===============++* Fix a bug with pretty-printing lexer tokens.++* Fix a bug where non-colon TypeOperators could not be used in+ prefix mode.++1.9.0 --> 1.9.1+===============++* Export parseFileContentsWithExts from .Exts.++1.8.2 --> 1.9.0+===============++* OptionPragma is renamed to the more descriptive ModulePragma,+ and adds a constructor AnnModulePragma for handling ANN pragmas+ preceding module header.++* Add instances for Eq/Ord/Data/Typeable for Fixity.++* Add 'parseFileWithComments' and 'parseFileContentsWithComments'+ to L.H.Exts .++* More informative error messages when HSX tags are mismatched.++++** 1.8.x++1.8.1 --> 1.8.2+===============++* Don't insert redundant parentheses around record constructions+ and updates.++1.8.0 --> 1.8.1+===============++* Fix three bugs with the handling of ANN. I must have been really+ tired when implementing that support.++1.7.2 --> 1.8.0+===============++* Add an instance Show Fixity (derived).++* Support for the new ANN and INLINE_CONLIKE pragmas.++* Export knownExtensions from .Extension.++* Remove support for CFILES and INCLUDE pragmas. The support wasn't+ correct anyway, as it assumed the pragmas appeared at the top of+ files. As CFILES/INCLUDE pragmas can (and do) appear anywhere,+ there's no hope to support them in the AST. Better to remove the+ support altogether. Files with CFILES/INCLUDE pragmas can still+ be parsed of course, but those pragmas will be handled as comments.++* Parsing with ignoreLinePragmas = False now correctly updates the+ file name.++* Allow the whole SPECIALISE/INLINE family of pragmas in instance+ declarations. The InsInline constructor is removed, and is now+ represented by InsDecl (InlineSig ...).++* Fix a bug with line numbering and quasi quotes, and a similar one+ with line numbering and CDATA.++* Fix a few minor bugs in the exactPrinter.++* Fix the strange handling of so called strings in LINE pragmas.++** 1.7.x++1.7.1 --> 1.7.2+===============++* Fixes a bug in lexing LINE pragmas (used when ignoreLinePragmas+ is set to False).++1.7.0 --> 1.7.1+===============++* UnicodeSyntax now also enables the forall symbol (U+2200).++1.6.1 --> 1.7.0+===============++* Operators defined on the form++ (a `op` b) c = ...++ could not be handled by the (annotated) AST, nor the parser. I had to+ change the definition of the AST node for InfixMatch to allow a list+ of right-hand subpatterns, i.e.++ InfixMatch l (Pat l) (Name l) (Pat l) ...++ has become++ InfixMatch l (Pat l) (Name l) [Pat l] ...++ I also had an epiphany and fixed the issue that would arise with+ exact printing of prefix definitions including parentheses, so+ that now works too!++** 1.6.x++1.6.0 --> 1.6.1+===============++* UnicodeSyntax now works not only for identifiers, but also for+ ->, <- and =>, as well as Arrows arrows and kind stars.++1.5.3 --> 1.6.0+===============++* (=~=) turns out to be too general at Functor (for intuitive and not+ technical reasons), so is specialised to Annotated to closer mirror+ the original intention.++* applyFixities is hoisted to a monad, and now fails on ambiguous infix+ expressions.++** 1.5.x++1.5.2 --> 1.5.3+===============++* Several small bug fixes in the exact printer, and fail more gracefully+ if the number of srcInfoPoints doesn't match the needs of the node.++1.5.1 --> 1.5.2+===============++* Fix a bug in the exact printer that made it always print the first token+ at position (0,0).++* In fixing the above, Annotated is now a superclass of ExactP. It was already+ a superclass in spirit, and nothing can break from this since ExactP is only+ exported abstractly.++1.5.0 --> 1.5.1+===============++* The pretty printer now introduces parentheses for non-atomic arguments to+ function application. Note that infix applications are left untouched, no+ parentheses will be inserted there, as it is assumed that fixities are+ already properly resolved.++* Fix a bug in the pretty printer where view patterns and n+k patterns were+ not properly parenthesised.++1.4.0 --> 1.5.0+===============++* Add support for acting on LINE pragmas while parsing, i.e. updating the source+ position according to info given in LINE pragmas. This is done conditionally+ based on a new flag ignoreLinePragmas in the ParseMode, hence the need to+ increase the major version.++** 1.4.x++1.3.5 --> 1.4.0+===============++* The AST node for Proc in the simple AST is changed to include a SrcLoc argument,+ to make it consistent with similar nodes e.g. Lambda. This is specifically needed+ for transformation of patterns in HSX.+++** 1.3.x++1.3.4 --> 1.3.5+===============++* Added an entry point in the parser for statements, and an instance Parseable Stmt+ to go with it.++* Ensured that .Annotated exports all relevant parseXXX(WithYYY) functions.++1.3.3 --> 1.3.4+===============++* Operator fixities are now resolved in patterns.++1.3.2 --> 1.3.3+===============++* Fixes a bug where qualified keywords are rejected even if the extension that+ enables the keyword in question is not turned on.+++1.3.0 --> 1.3.2+===============++(Let's forget 1.3.1 ever existed.)++* Fix a bug where declarations of infix operators were not properly merged as FunBinds.+
@@ -0,0 +1,48 @@+Haskell Source Extensions+=========================++haskell-src-exts is a package for handling and manipulating Haskell source+code. It is a descendant of the haskell-src package that is part of the standard+libraries, but extends this to support a number of syntactic+extensions, e.g. MPTCs, fundeps, GADTs, TH etc. The aim is to support all+extensions recognized by the community, as determined by what is implemented+in compilers and tools.++Apart from the more standard extensions supported by e.g. GHC,+haskell-src-exts provides support for HaRP (Haskell Regular Patterns)+and HSX (Haskell Source with XML) syntax.++Package structure+-----------------++The modules that comprise haskell-src-exts all reside in the hierarchic+namespace Language.Haskell.Exts. Notable exposed modules include:++* `Language.Haskell.Exts` - Imports and re-exports all the below,+ and also defines some functions that combine functionality from several+ modules.+* `Language.Haskell.Exts.Syntax` - The abstract syntax tree+ that the other modules work on.+* `Language.Haskell.Exts.Build` - Combinators for building+ abstract syntax.+* `Language.Haskell.Exts.Parser` - Functions for parsing Haskell+ source code into an abstract syntax representation.+++License+-------++The haskell-src-exts Package is distributed under a derived BSD-style license. It+derives from several sources, all of which are distributable under+BSD-style or compatible licenses. See the file LICENSE for the complete+license text.+++Maintenance+--------------++Dan Burton is currently keeping haskell-src-exts on life support.+If you are interested in more actively making improvements to this package,+please make your interests known.++You might want to try [ghc-lib-parser](http://hackage.haskell.org/package/ghc-lib-parser) instead.
@@ -0,0 +1,35 @@+I am pleased to announce the release of haskell-src-exts-1.17.0! ++Hackage: https://hackage.haskell.org/package/haskell-src-exts-1.17.0 +GitHub: https://github.com/haskell-suite/haskell-src-exts ++This release brings bugfixes, as well as the following language +features: ++* Type wildcards and expression holes (#252).+* Pattern Synonyms (#197).++The full changelog is available at ++https://github.com/haskell-suite/haskell-src-exts/blob/1.17.0/CHANGELOG++This release is brought to you by:++Matthew Pickering+Michael Walker+Simon Marlow+Neil Mitchell+JP Moresmau+Артур Файзрахманов+phischu+Michael Sloan+m00nlight+Niklas Broberg+Stijn van Drongelen+Jakub Kozlowski+Leonid Onokhov++Matthew Pickering is a force of nature who deserves a special mention+for all his contributions to this release.++Peter
@@ -1,8 +1,2 @@ import Distribution.Simple-import System.Process (rawSystem)-import System.Exit (ExitCode(..))-import System.FilePath ((</>))-main = defaultMainWithHooks $ simpleUserHooks { runTests = \args _ _ _ -> do- ExitSuccess <- rawSystem "runhaskell" (("Test" </> "Runner.hs") : args)- return ()- }+main = defaultMain
@@ -1,7941 +0,0 @@-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-} -{-# OPTIONS -fglasgow-exts -cpp #-} -{-# OPTIONS_HADDOCK hide #-} ------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.Annotated.Parser --- Copyright : (c) Niklas Broberg 2004-2009, --- Original (c) Simon Marlow, Sven Panne 1997-2000 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : stable --- Portability : portable --- --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.InternalParser ( - -- * General parsing - ParseMode(..), defaultParseMode, ParseResult(..), fromParseResult, - -- * Parsing of specific AST elements - -- ** Modules - parseModule, parseModuleWithMode, parseModuleWithComments, - -- ** Expressions - parseExp, parseExpWithMode, parseExpWithComments, - -- ** Patterns - parsePat, parsePatWithMode, parsePatWithComments, - -- ** Declarations - parseDecl, parseDeclWithMode, parseDeclWithComments, - -- ** Types - parseType, parseTypeWithMode, parseTypeWithComments, - -- ** Option pragmas - getTopPragmas - ) where -import Language.Haskell.Exts.Annotated.Syntax hiding ( Type(..), Exp(..), Asst(..), XAttr(..), FieldUpdate(..) ) -import Language.Haskell.Exts.Annotated.Syntax ( Type, Exp, Asst ) -import Language.Haskell.Exts.ParseMonad -import Language.Haskell.Exts.Lexer -import Language.Haskell.Exts.ParseUtils -import Language.Haskell.Exts.Annotated.Fixity -import Language.Haskell.Exts.SrcLoc -import Language.Haskell.Exts.Comments ( Comment ) -import Language.Haskell.Exts.Extension - -import Control.Monad ( liftM ) -#if __GLASGOW_HASKELL__ >= 503 -import qualified Data.Array as Happy_Data_Array -#else -import qualified Array as Happy_Data_Array -#endif -#if __GLASGOW_HASKELL__ >= 503 -import qualified GHC.Exts as Happy_GHC_Exts -#else -import qualified GlaExts as Happy_GHC_Exts -#endif - --- parser produced by Happy Version 1.18.4 - -newtype HappyAbsSyn = HappyAbsSyn HappyAny -#if __GLASGOW_HASKELL__ >= 607 -type HappyAny = Happy_GHC_Exts.Any -#else -type HappyAny = forall a . a -#endif -happyIn9 :: (Module L) -> (HappyAbsSyn ) -happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn9 #-} -happyOut9 :: (HappyAbsSyn ) -> (Module L) -happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut9 #-} -happyIn10 :: (PExp L) -> (HappyAbsSyn ) -happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn10 #-} -happyOut10 :: (HappyAbsSyn ) -> (PExp L) -happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut10 #-} -happyIn11 :: (([OptionPragma L],[S],L)) -> (HappyAbsSyn ) -happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn11 #-} -happyOut11 :: (HappyAbsSyn ) -> (([OptionPragma L],[S],L)) -happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut11 #-} -happyIn12 :: (([OptionPragma L],[S],Maybe L)) -> (HappyAbsSyn ) -happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn12 #-} -happyOut12 :: (HappyAbsSyn ) -> (([OptionPragma L],[S],Maybe L)) -happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut12 #-} -happyIn13 :: (OptionPragma L) -> (HappyAbsSyn ) -happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn13 #-} -happyOut13 :: (HappyAbsSyn ) -> (OptionPragma L) -happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut13 #-} -happyIn14 :: (([Name L],[S])) -> (HappyAbsSyn ) -happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn14 #-} -happyOut14 :: (HappyAbsSyn ) -> (([Name L],[S])) -happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut14 #-} -happyIn15 :: ([OptionPragma L] -> [S] -> L -> Module L) -> (HappyAbsSyn ) -happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn15 #-} -happyOut15 :: (HappyAbsSyn ) -> ([OptionPragma L] -> [S] -> L -> Module L) -happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut15 #-} -happyIn16 :: (Maybe (ModuleHead L)) -> (HappyAbsSyn ) -happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn16 #-} -happyOut16 :: (HappyAbsSyn ) -> (Maybe (ModuleHead L)) -happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut16 #-} -happyIn17 :: (Maybe (WarningText L)) -> (HappyAbsSyn ) -happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn17 #-} -happyOut17 :: (HappyAbsSyn ) -> (Maybe (WarningText L)) -happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut17 #-} -happyIn18 :: (([ImportDecl L],[Decl L],[S],L)) -> (HappyAbsSyn ) -happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn18 #-} -happyOut18 :: (HappyAbsSyn ) -> (([ImportDecl L],[Decl L],[S],L)) -happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut18 #-} -happyIn19 :: (([ImportDecl L],[Decl L],[S])) -> (HappyAbsSyn ) -happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn19 #-} -happyOut19 :: (HappyAbsSyn ) -> (([ImportDecl L],[Decl L],[S])) -happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut19 #-} -happyIn20 :: ([S]) -> (HappyAbsSyn ) -happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn20 #-} -happyOut20 :: (HappyAbsSyn ) -> ([S]) -happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut20 #-} -happyIn21 :: ([S]) -> (HappyAbsSyn ) -happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn21 #-} -happyOut21 :: (HappyAbsSyn ) -> ([S]) -happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut21 #-} -happyIn22 :: (Maybe (ExportSpecList L)) -> (HappyAbsSyn ) -happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn22 #-} -happyOut22 :: (HappyAbsSyn ) -> (Maybe (ExportSpecList L)) -happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut22 #-} -happyIn23 :: (ExportSpecList L) -> (HappyAbsSyn ) -happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn23 #-} -happyOut23 :: (HappyAbsSyn ) -> (ExportSpecList L) -happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut23 #-} -happyIn24 :: ([S]) -> (HappyAbsSyn ) -happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn24 #-} -happyOut24 :: (HappyAbsSyn ) -> ([S]) -happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut24 #-} -happyIn25 :: (([ExportSpec L],[S])) -> (HappyAbsSyn ) -happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn25 #-} -happyOut25 :: (HappyAbsSyn ) -> (([ExportSpec L],[S])) -happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut25 #-} -happyIn26 :: (ExportSpec L) -> (HappyAbsSyn ) -happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn26 #-} -happyOut26 :: (HappyAbsSyn ) -> (ExportSpec L) -happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut26 #-} -happyIn27 :: (([ImportDecl L],[S])) -> (HappyAbsSyn ) -happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn27 #-} -happyOut27 :: (HappyAbsSyn ) -> (([ImportDecl L],[S])) -happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut27 #-} -happyIn28 :: (ImportDecl L) -> (HappyAbsSyn ) -happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn28 #-} -happyOut28 :: (HappyAbsSyn ) -> (ImportDecl L) -happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut28 #-} -happyIn29 :: ((Bool,[S])) -> (HappyAbsSyn ) -happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn29 #-} -happyOut29 :: (HappyAbsSyn ) -> ((Bool,[S])) -happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut29 #-} -happyIn30 :: ((Bool,[S])) -> (HappyAbsSyn ) -happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn30 #-} -happyOut30 :: (HappyAbsSyn ) -> ((Bool,[S])) -happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut30 #-} -happyIn31 :: ((Maybe String,[S])) -> (HappyAbsSyn ) -happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn31 #-} -happyOut31 :: (HappyAbsSyn ) -> ((Maybe String,[S])) -happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut31 #-} -happyIn32 :: ((Maybe (ModuleName L),[S],Maybe L)) -> (HappyAbsSyn ) -happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn32 #-} -happyOut32 :: (HappyAbsSyn ) -> ((Maybe (ModuleName L),[S],Maybe L)) -happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut32 #-} -happyIn33 :: (Maybe (ImportSpecList L)) -> (HappyAbsSyn ) -happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn33 #-} -happyOut33 :: (HappyAbsSyn ) -> (Maybe (ImportSpecList L)) -happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut33 #-} -happyIn34 :: (ImportSpecList L) -> (HappyAbsSyn ) -happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn34 #-} -happyOut34 :: (HappyAbsSyn ) -> (ImportSpecList L) -happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut34 #-} -happyIn35 :: ((Bool, Maybe L,[S])) -> (HappyAbsSyn ) -happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn35 #-} -happyOut35 :: (HappyAbsSyn ) -> ((Bool, Maybe L,[S])) -happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut35 #-} -happyIn36 :: (([ImportSpec L],[S])) -> (HappyAbsSyn ) -happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn36 #-} -happyOut36 :: (HappyAbsSyn ) -> (([ImportSpec L],[S])) -happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut36 #-} -happyIn37 :: (ImportSpec L) -> (HappyAbsSyn ) -happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn37 #-} -happyOut37 :: (HappyAbsSyn ) -> (ImportSpec L) -happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut37 #-} -happyIn38 :: (([CName L],[S])) -> (HappyAbsSyn ) -happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn38 #-} -happyOut38 :: (HappyAbsSyn ) -> (([CName L],[S])) -happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut38 #-} -happyIn39 :: (CName L) -> (HappyAbsSyn ) -happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn39 #-} -happyOut39 :: (HappyAbsSyn ) -> (CName L) -happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut39 #-} -happyIn40 :: (Decl L) -> (HappyAbsSyn ) -happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn40 #-} -happyOut40 :: (HappyAbsSyn ) -> (Decl L) -happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut40 #-} -happyIn41 :: ((Maybe Int, [S])) -> (HappyAbsSyn ) -happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn41 #-} -happyOut41 :: (HappyAbsSyn ) -> ((Maybe Int, [S])) -happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut41 #-} -happyIn42 :: (Assoc L) -> (HappyAbsSyn ) -happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn42 #-} -happyOut42 :: (HappyAbsSyn ) -> (Assoc L) -happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut42 #-} -happyIn43 :: (([Op L],[S],L)) -> (HappyAbsSyn ) -happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn43 #-} -happyOut43 :: (HappyAbsSyn ) -> (([Op L],[S],L)) -happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut43 #-} -happyIn44 :: (([Decl L],[S])) -> (HappyAbsSyn ) -happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn44 #-} -happyOut44 :: (HappyAbsSyn ) -> (([Decl L],[S])) -happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut44 #-} -happyIn45 :: (([Decl L],[S])) -> (HappyAbsSyn ) -happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn45 #-} -happyOut45 :: (HappyAbsSyn ) -> (([Decl L],[S])) -happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut45 #-} -happyIn46 :: (Decl L) -> (HappyAbsSyn ) -happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn46 #-} -happyOut46 :: (HappyAbsSyn ) -> (Decl L) -happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut46 #-} -happyIn47 :: (DataOrNew L) -> (HappyAbsSyn ) -happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn47 #-} -happyOut47 :: (HappyAbsSyn ) -> (DataOrNew L) -happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut47 #-} -happyIn48 :: (([Type L],[S])) -> (HappyAbsSyn ) -happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn48 #-} -happyOut48 :: (HappyAbsSyn ) -> (([Type L],[S])) -happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut48 #-} -happyIn49 :: (([Decl L],[S])) -> (HappyAbsSyn ) -happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn49 #-} -happyOut49 :: (HappyAbsSyn ) -> (([Decl L],[S])) -happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut49 #-} -happyIn50 :: (([Decl L],[S])) -> (HappyAbsSyn ) -happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn50 #-} -happyOut50 :: (HappyAbsSyn ) -> (([Decl L],[S])) -happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut50 #-} -happyIn51 :: (Decl L) -> (HappyAbsSyn ) -happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn51 #-} -happyOut51 :: (HappyAbsSyn ) -> (Decl L) -happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut51 #-} -happyIn52 :: (Binds L) -> (HappyAbsSyn ) -happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn52 #-} -happyOut52 :: (HappyAbsSyn ) -> (Binds L) -happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut52 #-} -happyIn53 :: (Decl L) -> (HappyAbsSyn ) -happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn53 #-} -happyOut53 :: (HappyAbsSyn ) -> (Decl L) -happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut53 #-} -happyIn54 :: (([Type L],[S])) -> (HappyAbsSyn ) -happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn54 #-} -happyOut54 :: (HappyAbsSyn ) -> (([Type L],[S])) -happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut54 #-} -happyIn55 :: (Type L) -> (HappyAbsSyn ) -happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn55 #-} -happyOut55 :: (HappyAbsSyn ) -> (Type L) -happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut55 #-} -happyIn56 :: (Binds L) -> (HappyAbsSyn ) -happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn56 #-} -happyOut56 :: (HappyAbsSyn ) -> (Binds L) -happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut56 #-} -happyIn57 :: (([Name L],[S],L)) -> (HappyAbsSyn ) -happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn57 #-} -happyOut57 :: (HappyAbsSyn ) -> (([Name L],[S],L)) -happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut57 #-} -happyIn58 :: (CallConv L) -> (HappyAbsSyn ) -happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn58 #-} -happyOut58 :: (HappyAbsSyn ) -> (CallConv L) -happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut58 #-} -happyIn59 :: (Maybe (Safety L)) -> (HappyAbsSyn ) -happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn59 #-} -happyOut59 :: (HappyAbsSyn ) -> (Maybe (Safety L)) -happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut59 #-} -happyIn60 :: ((Maybe String, Name L, Type L, [S])) -> (HappyAbsSyn ) -happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn60 #-} -happyOut60 :: (HappyAbsSyn ) -> ((Maybe String, Name L, Type L, [S])) -happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut60 #-} -happyIn61 :: ([Rule L]) -> (HappyAbsSyn ) -happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn61 #-} -happyOut61 :: (HappyAbsSyn ) -> ([Rule L]) -happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut61 #-} -happyIn62 :: (Rule L) -> (HappyAbsSyn ) -happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn62 #-} -happyOut62 :: (HappyAbsSyn ) -> (Rule L) -happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut62 #-} -happyIn63 :: (Maybe (Activation L)) -> (HappyAbsSyn ) -happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn63 #-} -happyOut63 :: (HappyAbsSyn ) -> (Maybe (Activation L)) -happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut63 #-} -happyIn64 :: ((Maybe [RuleVar L],[S])) -> (HappyAbsSyn ) -happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn64 #-} -happyOut64 :: (HappyAbsSyn ) -> ((Maybe [RuleVar L],[S])) -happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut64 #-} -happyIn65 :: ([RuleVar L]) -> (HappyAbsSyn ) -happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn65 #-} -happyOut65 :: (HappyAbsSyn ) -> ([RuleVar L]) -happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut65 #-} -happyIn66 :: (RuleVar L) -> (HappyAbsSyn ) -happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn66 #-} -happyOut66 :: (HappyAbsSyn ) -> (RuleVar L) -happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut66 #-} -happyIn67 :: (([([Name L],String)],[S])) -> (HappyAbsSyn ) -happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn67 #-} -happyOut67 :: (HappyAbsSyn ) -> (([([Name L],String)],[S])) -happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut67 #-} -happyIn68 :: ((([Name L], String),[S])) -> (HappyAbsSyn ) -happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn68 #-} -happyOut68 :: (HappyAbsSyn ) -> ((([Name L], String),[S])) -happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut68 #-} -happyIn69 :: (([Name L],[S])) -> (HappyAbsSyn ) -happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn69 #-} -happyOut69 :: (HappyAbsSyn ) -> (([Name L],[S])) -happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut69 #-} -happyIn70 :: (Name L) -> (HappyAbsSyn ) -happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn70 #-} -happyOut70 :: (HappyAbsSyn ) -> (Name L) -happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut70 #-} -happyIn71 :: (Type L) -> (HappyAbsSyn ) -happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn71 #-} -happyOut71 :: (HappyAbsSyn ) -> (Type L) -happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut71 #-} -happyIn72 :: (PType L) -> (HappyAbsSyn ) -happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn72 #-} -happyOut72 :: (HappyAbsSyn ) -> (PType L) -happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut72 #-} -happyIn73 :: (Type L) -> (HappyAbsSyn ) -happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn73 #-} -happyOut73 :: (HappyAbsSyn ) -> (Type L) -happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut73 #-} -happyIn74 :: (PType L) -> (HappyAbsSyn ) -happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn74 #-} -happyOut74 :: (HappyAbsSyn ) -> (PType L) -happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut74 #-} -happyIn75 :: (Type L) -> (HappyAbsSyn ) -happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn75 #-} -happyOut75 :: (HappyAbsSyn ) -> (Type L) -happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut75 #-} -happyIn76 :: (PType L) -> (HappyAbsSyn ) -happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn76 #-} -happyOut76 :: (HappyAbsSyn ) -> (PType L) -happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut76 #-} -happyIn77 :: (Type L) -> (HappyAbsSyn ) -happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn77 #-} -happyOut77 :: (HappyAbsSyn ) -> (Type L) -happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut77 #-} -happyIn78 :: (PType L) -> (HappyAbsSyn ) -happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn78 #-} -happyOut78 :: (HappyAbsSyn ) -> (PType L) -happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut78 #-} -happyIn79 :: (QName L) -> (HappyAbsSyn ) -happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn79 #-} -happyOut79 :: (HappyAbsSyn ) -> (QName L) -happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut79 #-} -happyIn80 :: (QName L) -> (HappyAbsSyn ) -happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn80 #-} -happyOut80 :: (HappyAbsSyn ) -> (QName L) -happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut80 #-} -happyIn81 :: (QName L) -> (HappyAbsSyn ) -happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn81 #-} -happyOut81 :: (HappyAbsSyn ) -> (QName L) -happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut81 #-} -happyIn82 :: (Type L) -> (HappyAbsSyn ) -happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn82 #-} -happyOut82 :: (HappyAbsSyn ) -> (Type L) -happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut82 #-} -happyIn83 :: (PType L) -> (HappyAbsSyn ) -happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn83 #-} -happyOut83 :: (HappyAbsSyn ) -> (PType L) -happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut83 #-} -happyIn84 :: (PContext L) -> (HappyAbsSyn ) -happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn84 #-} -happyOut84 :: (HappyAbsSyn ) -> (PContext L) -happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut84 #-} -happyIn85 :: (([PType L],[S])) -> (HappyAbsSyn ) -happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn85 #-} -happyOut85 :: (HappyAbsSyn ) -> (([PType L],[S])) -happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut85 #-} -happyIn86 :: (([PType L],[S])) -> (HappyAbsSyn ) -happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn86 #-} -happyOut86 :: (HappyAbsSyn ) -> (([PType L],[S])) -happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut86 #-} -happyIn87 :: (([TyVarBind L],Maybe L)) -> (HappyAbsSyn ) -happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn87 #-} -happyOut87 :: (HappyAbsSyn ) -> (([TyVarBind L],Maybe L)) -happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut87 #-} -happyIn88 :: (TyVarBind L) -> (HappyAbsSyn ) -happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn88 #-} -happyOut88 :: (HappyAbsSyn ) -> (TyVarBind L) -happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut88 #-} -happyIn89 :: (([Name L],Maybe L)) -> (HappyAbsSyn ) -happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn89 #-} -happyOut89 :: (HappyAbsSyn ) -> (([Name L],Maybe L)) -happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut89 #-} -happyIn90 :: (([Name L],L)) -> (HappyAbsSyn ) -happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn90 #-} -happyOut90 :: (HappyAbsSyn ) -> (([Name L],L)) -happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut90 #-} -happyIn91 :: (([FunDep L],[S],Maybe L)) -> (HappyAbsSyn ) -happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn91 #-} -happyOut91 :: (HappyAbsSyn ) -> (([FunDep L],[S],Maybe L)) -happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut91 #-} -happyIn92 :: (([FunDep L],[S],L)) -> (HappyAbsSyn ) -happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn92 #-} -happyOut92 :: (HappyAbsSyn ) -> (([FunDep L],[S],L)) -happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut92 #-} -happyIn93 :: (FunDep L) -> (HappyAbsSyn ) -happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn93 #-} -happyOut93 :: (HappyAbsSyn ) -> (FunDep L) -happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut93 #-} -happyIn94 :: (([GadtDecl L],[S],Maybe L)) -> (HappyAbsSyn ) -happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn94 #-} -happyOut94 :: (HappyAbsSyn ) -> (([GadtDecl L],[S],Maybe L)) -happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut94 #-} -happyIn95 :: (([GadtDecl L],[S])) -> (HappyAbsSyn ) -happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn95 #-} -happyOut95 :: (HappyAbsSyn ) -> (([GadtDecl L],[S])) -happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut95 #-} -happyIn96 :: (([GadtDecl L],[S])) -> (HappyAbsSyn ) -happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn96 #-} -happyOut96 :: (HappyAbsSyn ) -> (([GadtDecl L],[S])) -happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut96 #-} -happyIn97 :: (GadtDecl L) -> (HappyAbsSyn ) -happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn97 #-} -happyOut97 :: (HappyAbsSyn ) -> (GadtDecl L) -happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut97 #-} -happyIn98 :: (([QualConDecl L],[S],Maybe L)) -> (HappyAbsSyn ) -happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn98 #-} -happyOut98 :: (HappyAbsSyn ) -> (([QualConDecl L],[S],Maybe L)) -happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut98 #-} -happyIn99 :: (([QualConDecl L],[S],L)) -> (HappyAbsSyn ) -happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn99 #-} -happyOut99 :: (HappyAbsSyn ) -> (([QualConDecl L],[S],L)) -happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut99 #-} -happyIn100 :: (QualConDecl L) -> (HappyAbsSyn ) -happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn100 #-} -happyOut100 :: (HappyAbsSyn ) -> (QualConDecl L) -happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut100 #-} -happyIn101 :: ((Maybe [TyVarBind L], [S], Maybe L)) -> (HappyAbsSyn ) -happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn101 #-} -happyOut101 :: (HappyAbsSyn ) -> ((Maybe [TyVarBind L], [S], Maybe L)) -happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut101 #-} -happyIn102 :: (ConDecl L) -> (HappyAbsSyn ) -happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn102 #-} -happyOut102 :: (HappyAbsSyn ) -> (ConDecl L) -happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut102 #-} -happyIn103 :: ((Name L, [BangType L], L)) -> (HappyAbsSyn ) -happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn103 #-} -happyOut103 :: (HappyAbsSyn ) -> ((Name L, [BangType L], L)) -happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut103 #-} -happyIn104 :: ((Name L, [BangType L],L)) -> (HappyAbsSyn ) -happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn104 #-} -happyOut104 :: (HappyAbsSyn ) -> ((Name L, [BangType L],L)) -happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut104 #-} -happyIn105 :: (BangType L) -> (HappyAbsSyn ) -happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn105 #-} -happyOut105 :: (HappyAbsSyn ) -> (BangType L) -happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut105 #-} -happyIn106 :: (BangType L) -> (HappyAbsSyn ) -happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn106 #-} -happyOut106 :: (HappyAbsSyn ) -> (BangType L) -happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut106 #-} -happyIn107 :: (([FieldDecl L],[S])) -> (HappyAbsSyn ) -happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn107 #-} -happyOut107 :: (HappyAbsSyn ) -> (([FieldDecl L],[S])) -happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut107 #-} -happyIn108 :: (FieldDecl L) -> (HappyAbsSyn ) -happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn108 #-} -happyOut108 :: (HappyAbsSyn ) -> (FieldDecl L) -happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut108 #-} -happyIn109 :: (BangType L) -> (HappyAbsSyn ) -happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn109 #-} -happyOut109 :: (HappyAbsSyn ) -> (BangType L) -happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut109 #-} -happyIn110 :: (Maybe (Deriving L)) -> (HappyAbsSyn ) -happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn110 #-} -happyOut110 :: (HappyAbsSyn ) -> (Maybe (Deriving L)) -happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut110 #-} -happyIn111 :: (([InstHead L],[S])) -> (HappyAbsSyn ) -happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn111 #-} -happyOut111 :: (HappyAbsSyn ) -> (([InstHead L],[S])) -happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut111 #-} -happyIn112 :: (QName L) -> (HappyAbsSyn ) -happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn112 #-} -happyOut112 :: (HappyAbsSyn ) -> (QName L) -happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut112 #-} -happyIn113 :: (Kind L) -> (HappyAbsSyn ) -happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn113 #-} -happyOut113 :: (HappyAbsSyn ) -> (Kind L) -happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut113 #-} -happyIn114 :: (Kind L) -> (HappyAbsSyn ) -happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn114 #-} -happyOut114 :: (HappyAbsSyn ) -> (Kind L) -happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut114 #-} -happyIn115 :: (Kind L) -> (HappyAbsSyn ) -happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn115 #-} -happyOut115 :: (HappyAbsSyn ) -> (Kind L) -happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut115 #-} -happyIn116 :: ((Maybe (Kind L), [S])) -> (HappyAbsSyn ) -happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn116 #-} -happyOut116 :: (HappyAbsSyn ) -> ((Maybe (Kind L), [S])) -happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut116 #-} -happyIn117 :: ((Maybe [ClassDecl L],[S],Maybe L)) -> (HappyAbsSyn ) -happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn117 #-} -happyOut117 :: (HappyAbsSyn ) -> ((Maybe [ClassDecl L],[S],Maybe L)) -happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut117 #-} -happyIn118 :: (([ClassDecl L],[S])) -> (HappyAbsSyn ) -happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn118 #-} -happyOut118 :: (HappyAbsSyn ) -> (([ClassDecl L],[S])) -happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut118 #-} -happyIn119 :: (([ClassDecl L],[S])) -> (HappyAbsSyn ) -happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn119 #-} -happyOut119 :: (HappyAbsSyn ) -> (([ClassDecl L],[S])) -happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut119 #-} -happyIn120 :: (ClassDecl L) -> (HappyAbsSyn ) -happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn120 #-} -happyOut120 :: (HappyAbsSyn ) -> (ClassDecl L) -happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut120 #-} -happyIn121 :: (ClassDecl L) -> (HappyAbsSyn ) -happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn121 #-} -happyOut121 :: (HappyAbsSyn ) -> (ClassDecl L) -happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut121 #-} -happyIn122 :: ((Maybe [InstDecl L],[S],Maybe L)) -> (HappyAbsSyn ) -happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn122 #-} -happyOut122 :: (HappyAbsSyn ) -> ((Maybe [InstDecl L],[S],Maybe L)) -happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut122 #-} -happyIn123 :: (([InstDecl L],[S])) -> (HappyAbsSyn ) -happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn123 #-} -happyOut123 :: (HappyAbsSyn ) -> (([InstDecl L],[S])) -happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut123 #-} -happyIn124 :: (([InstDecl L],[S])) -> (HappyAbsSyn ) -happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn124 #-} -happyOut124 :: (HappyAbsSyn ) -> (([InstDecl L],[S])) -happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut124 #-} -happyIn125 :: (InstDecl L) -> (HappyAbsSyn ) -happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn125 #-} -happyOut125 :: (HappyAbsSyn ) -> (InstDecl L) -happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut125 #-} -happyIn126 :: (InstDecl L) -> (HappyAbsSyn ) -happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn126 #-} -happyOut126 :: (HappyAbsSyn ) -> (InstDecl L) -happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut126 #-} -happyIn127 :: (InstDecl L) -> (HappyAbsSyn ) -happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn127 #-} -happyOut127 :: (HappyAbsSyn ) -> (InstDecl L) -happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut127 #-} -happyIn128 :: (Decl L) -> (HappyAbsSyn ) -happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn128 #-} -happyOut128 :: (HappyAbsSyn ) -> (Decl L) -happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut128 #-} -happyIn129 :: ((Maybe (Binds L),[S])) -> (HappyAbsSyn ) -happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn129 #-} -happyOut129 :: (HappyAbsSyn ) -> ((Maybe (Binds L),[S])) -happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut129 #-} -happyIn130 :: ((Maybe (Type L),[S])) -> (HappyAbsSyn ) -happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn130 #-} -happyOut130 :: (HappyAbsSyn ) -> ((Maybe (Type L),[S])) -happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut130 #-} -happyIn131 :: (Rhs L) -> (HappyAbsSyn ) -happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn131 #-} -happyOut131 :: (HappyAbsSyn ) -> (Rhs L) -happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut131 #-} -happyIn132 :: (([GuardedRhs L],L)) -> (HappyAbsSyn ) -happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn132 #-} -happyOut132 :: (HappyAbsSyn ) -> (([GuardedRhs L],L)) -happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut132 #-} -happyIn133 :: (GuardedRhs L) -> (HappyAbsSyn ) -happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn133 #-} -happyOut133 :: (HappyAbsSyn ) -> (GuardedRhs L) -happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut133 #-} -happyIn134 :: (Exp L) -> (HappyAbsSyn ) -happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn134 #-} -happyOut134 :: (HappyAbsSyn ) -> (Exp L) -happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut134 #-} -happyIn135 :: (PExp L) -> (HappyAbsSyn ) -happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn135 #-} -happyOut135 :: (HappyAbsSyn ) -> (PExp L) -happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut135 #-} -happyIn136 :: (PExp L) -> (HappyAbsSyn ) -happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn136 #-} -happyOut136 :: (HappyAbsSyn ) -> (PExp L) -happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut136 #-} -happyIn137 :: (PExp L) -> (HappyAbsSyn ) -happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn137 #-} -happyOut137 :: (HappyAbsSyn ) -> (PExp L) -happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut137 #-} -happyIn138 :: (PExp L) -> (HappyAbsSyn ) -happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn138 #-} -happyOut138 :: (HappyAbsSyn ) -> (PExp L) -happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut138 #-} -happyIn139 :: (PExp L) -> (HappyAbsSyn ) -happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn139 #-} -happyOut139 :: (HappyAbsSyn ) -> (PExp L) -happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut139 #-} -happyIn140 :: (PExp L) -> (HappyAbsSyn ) -happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn140 #-} -happyOut140 :: (HappyAbsSyn ) -> (PExp L) -happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut140 #-} -happyIn141 :: (PExp L) -> (HappyAbsSyn ) -happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn141 #-} -happyOut141 :: (HappyAbsSyn ) -> (PExp L) -happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut141 #-} -happyIn142 :: (PExp L) -> (HappyAbsSyn ) -happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn142 #-} -happyOut142 :: (HappyAbsSyn ) -> (PExp L) -happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut142 #-} -happyIn143 :: ([Pat L]) -> (HappyAbsSyn ) -happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn143 #-} -happyOut143 :: (HappyAbsSyn ) -> ([Pat L]) -happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut143 #-} -happyIn144 :: (Pat L) -> (HappyAbsSyn ) -happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn144 #-} -happyOut144 :: (HappyAbsSyn ) -> (Pat L) -happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut144 #-} -happyIn145 :: (PExp L) -> (HappyAbsSyn ) -happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn145 #-} -happyOut145 :: (HappyAbsSyn ) -> (PExp L) -happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut145 #-} -happyIn146 :: (PExp L) -> (HappyAbsSyn ) -happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn146 #-} -happyOut146 :: (HappyAbsSyn ) -> (PExp L) -happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut146 #-} -happyIn147 :: (PExp L) -> (HappyAbsSyn ) -happyIn147 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn147 #-} -happyOut147 :: (HappyAbsSyn ) -> (PExp L) -happyOut147 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut147 #-} -happyIn148 :: ([S]) -> (HappyAbsSyn ) -happyIn148 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn148 #-} -happyOut148 :: (HappyAbsSyn ) -> ([S]) -happyOut148 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut148 #-} -happyIn149 :: (PExp L) -> (HappyAbsSyn ) -happyIn149 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn149 #-} -happyOut149 :: (HappyAbsSyn ) -> (PExp L) -happyOut149 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut149 #-} -happyIn150 :: (([Maybe (PExp L)],[S])) -> (HappyAbsSyn ) -happyIn150 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn150 #-} -happyOut150 :: (HappyAbsSyn ) -> (([Maybe (PExp L)],[S])) -happyOut150 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut150 #-} -happyIn151 :: (([PExp L],[S])) -> (HappyAbsSyn ) -happyIn151 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn151 #-} -happyOut151 :: (HappyAbsSyn ) -> (([PExp L],[S])) -happyOut151 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut151 #-} -happyIn152 :: (PExp L) -> (HappyAbsSyn ) -happyIn152 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn152 #-} -happyOut152 :: (HappyAbsSyn ) -> (PExp L) -happyOut152 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut152 #-} -happyIn153 :: (PExp L) -> (HappyAbsSyn ) -happyIn153 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn153 #-} -happyOut153 :: (HappyAbsSyn ) -> (PExp L) -happyOut153 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut153 #-} -happyIn154 :: ([PExp L]) -> (HappyAbsSyn ) -happyIn154 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn154 #-} -happyOut154 :: (HappyAbsSyn ) -> ([PExp L]) -happyOut154 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut154 #-} -happyIn155 :: (PExp L) -> (HappyAbsSyn ) -happyIn155 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn155 #-} -happyOut155 :: (HappyAbsSyn ) -> (PExp L) -happyOut155 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut155 #-} -happyIn156 :: (XName L) -> (HappyAbsSyn ) -happyIn156 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn156 #-} -happyOut156 :: (HappyAbsSyn ) -> (XName L) -happyOut156 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut156 #-} -happyIn157 :: (Loc String) -> (HappyAbsSyn ) -happyIn157 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn157 #-} -happyOut157 :: (HappyAbsSyn ) -> (Loc String) -happyOut157 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut157 #-} -happyIn158 :: (Loc String) -> (HappyAbsSyn ) -happyIn158 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn158 #-} -happyOut158 :: (HappyAbsSyn ) -> (Loc String) -happyOut158 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut158 #-} -happyIn159 :: ([ParseXAttr L]) -> (HappyAbsSyn ) -happyIn159 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn159 #-} -happyOut159 :: (HappyAbsSyn ) -> ([ParseXAttr L]) -happyOut159 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut159 #-} -happyIn160 :: (ParseXAttr L) -> (HappyAbsSyn ) -happyIn160 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn160 #-} -happyOut160 :: (HappyAbsSyn ) -> (ParseXAttr L) -happyOut160 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut160 #-} -happyIn161 :: (Maybe (PExp L)) -> (HappyAbsSyn ) -happyIn161 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn161 #-} -happyOut161 :: (HappyAbsSyn ) -> (Maybe (PExp L)) -happyOut161 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut161 #-} -happyIn162 :: (L -> PExp L) -> (HappyAbsSyn ) -happyIn162 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn162 #-} -happyOut162 :: (HappyAbsSyn ) -> (L -> PExp L) -happyOut162 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut162 #-} -happyIn163 :: (([PExp L],[S])) -> (HappyAbsSyn ) -happyIn163 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn163 #-} -happyOut163 :: (HappyAbsSyn ) -> (([PExp L],[S])) -happyOut163 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut163 #-} -happyIn164 :: (([[QualStmt L]],[S])) -> (HappyAbsSyn ) -happyIn164 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn164 #-} -happyOut164 :: (HappyAbsSyn ) -> (([[QualStmt L]],[S])) -happyOut164 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut164 #-} -happyIn165 :: (([QualStmt L],[S])) -> (HappyAbsSyn ) -happyIn165 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn165 #-} -happyOut165 :: (HappyAbsSyn ) -> (([QualStmt L],[S])) -happyOut165 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut165 #-} -happyIn166 :: (QualStmt L) -> (HappyAbsSyn ) -happyIn166 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn166 #-} -happyOut166 :: (HappyAbsSyn ) -> (QualStmt L) -happyOut166 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut166 #-} -happyIn167 :: (QualStmt L) -> (HappyAbsSyn ) -happyIn167 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn167 #-} -happyOut167 :: (HappyAbsSyn ) -> (QualStmt L) -happyOut167 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut167 #-} -happyIn168 :: (([Stmt L],[S])) -> (HappyAbsSyn ) -happyIn168 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn168 #-} -happyOut168 :: (HappyAbsSyn ) -> (([Stmt L],[S])) -happyOut168 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut168 #-} -happyIn169 :: (Stmt L) -> (HappyAbsSyn ) -happyIn169 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn169 #-} -happyOut169 :: (HappyAbsSyn ) -> (Stmt L) -happyOut169 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut169 #-} -happyIn170 :: (([Alt L],L,[S])) -> (HappyAbsSyn ) -happyIn170 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn170 #-} -happyOut170 :: (HappyAbsSyn ) -> (([Alt L],L,[S])) -happyOut170 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut170 #-} -happyIn171 :: (([Alt L],[S])) -> (HappyAbsSyn ) -happyIn171 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn171 #-} -happyOut171 :: (HappyAbsSyn ) -> (([Alt L],[S])) -happyOut171 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut171 #-} -happyIn172 :: (([Alt L],[S])) -> (HappyAbsSyn ) -happyIn172 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn172 #-} -happyOut172 :: (HappyAbsSyn ) -> (([Alt L],[S])) -happyOut172 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut172 #-} -happyIn173 :: (Alt L) -> (HappyAbsSyn ) -happyIn173 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn173 #-} -happyOut173 :: (HappyAbsSyn ) -> (Alt L) -happyOut173 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut173 #-} -happyIn174 :: (GuardedAlts L) -> (HappyAbsSyn ) -happyIn174 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn174 #-} -happyOut174 :: (HappyAbsSyn ) -> (GuardedAlts L) -happyOut174 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut174 #-} -happyIn175 :: (([GuardedAlt L],L)) -> (HappyAbsSyn ) -happyIn175 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn175 #-} -happyOut175 :: (HappyAbsSyn ) -> (([GuardedAlt L],L)) -happyOut175 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut175 #-} -happyIn176 :: (GuardedAlt L) -> (HappyAbsSyn ) -happyIn176 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn176 #-} -happyOut176 :: (HappyAbsSyn ) -> (GuardedAlt L) -happyOut176 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut176 #-} -happyIn177 :: (Pat L) -> (HappyAbsSyn ) -happyIn177 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn177 #-} -happyOut177 :: (HappyAbsSyn ) -> (Pat L) -happyOut177 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut177 #-} -happyIn178 :: (([Stmt L],L,[S])) -> (HappyAbsSyn ) -happyIn178 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn178 #-} -happyOut178 :: (HappyAbsSyn ) -> (([Stmt L],L,[S])) -happyOut178 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut178 #-} -happyIn179 :: (([Stmt L],[S])) -> (HappyAbsSyn ) -happyIn179 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn179 #-} -happyOut179 :: (HappyAbsSyn ) -> (([Stmt L],[S])) -happyOut179 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut179 #-} -happyIn180 :: (([Stmt L],[S])) -> (HappyAbsSyn ) -happyIn180 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn180 #-} -happyOut180 :: (HappyAbsSyn ) -> (([Stmt L],[S])) -happyOut180 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut180 #-} -happyIn181 :: (Stmt L) -> (HappyAbsSyn ) -happyIn181 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn181 #-} -happyOut181 :: (HappyAbsSyn ) -> (Stmt L) -happyOut181 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut181 #-} -happyIn182 :: (([PFieldUpdate L],[S])) -> (HappyAbsSyn ) -happyIn182 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn182 #-} -happyOut182 :: (HappyAbsSyn ) -> (([PFieldUpdate L],[S])) -happyOut182 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut182 #-} -happyIn183 :: (PFieldUpdate L) -> (HappyAbsSyn ) -happyIn183 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn183 #-} -happyOut183 :: (HappyAbsSyn ) -> (PFieldUpdate L) -happyOut183 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut183 #-} -happyIn184 :: (([IPBind L],[S])) -> (HappyAbsSyn ) -happyIn184 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn184 #-} -happyOut184 :: (HappyAbsSyn ) -> (([IPBind L],[S])) -happyOut184 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut184 #-} -happyIn185 :: (([IPBind L],[S])) -> (HappyAbsSyn ) -happyIn185 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn185 #-} -happyOut185 :: (HappyAbsSyn ) -> (([IPBind L],[S])) -happyOut185 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut185 #-} -happyIn186 :: (IPBind L) -> (HappyAbsSyn ) -happyIn186 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn186 #-} -happyOut186 :: (HappyAbsSyn ) -> (IPBind L) -happyOut186 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut186 #-} -happyIn187 :: (PExp L) -> (HappyAbsSyn ) -happyIn187 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn187 #-} -happyOut187 :: (HappyAbsSyn ) -> (PExp L) -happyOut187 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut187 #-} -happyIn188 :: (Name L) -> (HappyAbsSyn ) -happyIn188 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn188 #-} -happyOut188 :: (HappyAbsSyn ) -> (Name L) -happyOut188 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut188 #-} -happyIn189 :: (Name L) -> (HappyAbsSyn ) -happyIn189 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn189 #-} -happyOut189 :: (HappyAbsSyn ) -> (Name L) -happyOut189 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut189 #-} -happyIn190 :: (QName L) -> (HappyAbsSyn ) -happyIn190 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn190 #-} -happyOut190 :: (HappyAbsSyn ) -> (QName L) -happyOut190 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut190 #-} -happyIn191 :: (IPName L) -> (HappyAbsSyn ) -happyIn191 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn191 #-} -happyOut191 :: (HappyAbsSyn ) -> (IPName L) -happyOut191 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut191 #-} -happyIn192 :: (Name L) -> (HappyAbsSyn ) -happyIn192 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn192 #-} -happyOut192 :: (HappyAbsSyn ) -> (Name L) -happyOut192 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut192 #-} -happyIn193 :: (QName L) -> (HappyAbsSyn ) -happyIn193 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn193 #-} -happyOut193 :: (HappyAbsSyn ) -> (QName L) -happyOut193 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut193 #-} -happyIn194 :: (Name L) -> (HappyAbsSyn ) -happyIn194 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn194 #-} -happyOut194 :: (HappyAbsSyn ) -> (Name L) -happyOut194 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut194 #-} -happyIn195 :: (QName L) -> (HappyAbsSyn ) -happyIn195 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn195 #-} -happyOut195 :: (HappyAbsSyn ) -> (QName L) -happyOut195 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut195 #-} -happyIn196 :: (QName L) -> (HappyAbsSyn ) -happyIn196 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn196 #-} -happyOut196 :: (HappyAbsSyn ) -> (QName L) -happyOut196 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut196 #-} -happyIn197 :: (Name L) -> (HappyAbsSyn ) -happyIn197 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn197 #-} -happyOut197 :: (HappyAbsSyn ) -> (Name L) -happyOut197 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut197 #-} -happyIn198 :: (QName L) -> (HappyAbsSyn ) -happyIn198 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn198 #-} -happyOut198 :: (HappyAbsSyn ) -> (QName L) -happyOut198 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut198 #-} -happyIn199 :: (Op L) -> (HappyAbsSyn ) -happyIn199 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn199 #-} -happyOut199 :: (HappyAbsSyn ) -> (Op L) -happyOut199 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut199 #-} -happyIn200 :: (QOp L) -> (HappyAbsSyn ) -happyIn200 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn200 #-} -happyOut200 :: (HappyAbsSyn ) -> (QOp L) -happyOut200 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut200 #-} -happyIn201 :: (QOp L) -> (HappyAbsSyn ) -happyIn201 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn201 #-} -happyOut201 :: (HappyAbsSyn ) -> (QOp L) -happyOut201 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut201 #-} -happyIn202 :: (QName L) -> (HappyAbsSyn ) -happyIn202 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn202 #-} -happyOut202 :: (HappyAbsSyn ) -> (QName L) -happyOut202 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut202 #-} -happyIn203 :: (QName L) -> (HappyAbsSyn ) -happyIn203 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn203 #-} -happyOut203 :: (HappyAbsSyn ) -> (QName L) -happyOut203 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut203 #-} -happyIn204 :: (Name L) -> (HappyAbsSyn ) -happyIn204 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn204 #-} -happyOut204 :: (HappyAbsSyn ) -> (Name L) -happyOut204 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut204 #-} -happyIn205 :: (Name L) -> (HappyAbsSyn ) -happyIn205 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn205 #-} -happyOut205 :: (HappyAbsSyn ) -> (Name L) -happyOut205 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut205 #-} -happyIn206 :: (IPName L) -> (HappyAbsSyn ) -happyIn206 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn206 #-} -happyOut206 :: (HappyAbsSyn ) -> (IPName L) -happyOut206 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut206 #-} -happyIn207 :: (QName L) -> (HappyAbsSyn ) -happyIn207 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn207 #-} -happyOut207 :: (HappyAbsSyn ) -> (QName L) -happyOut207 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut207 #-} -happyIn208 :: (Name L) -> (HappyAbsSyn ) -happyIn208 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn208 #-} -happyOut208 :: (HappyAbsSyn ) -> (Name L) -happyOut208 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut208 #-} -happyIn209 :: (QName L) -> (HappyAbsSyn ) -happyIn209 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn209 #-} -happyOut209 :: (HappyAbsSyn ) -> (QName L) -happyOut209 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut209 #-} -happyIn210 :: (Name L) -> (HappyAbsSyn ) -happyIn210 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn210 #-} -happyOut210 :: (HappyAbsSyn ) -> (Name L) -happyOut210 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut210 #-} -happyIn211 :: (QName L) -> (HappyAbsSyn ) -happyIn211 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn211 #-} -happyOut211 :: (HappyAbsSyn ) -> (QName L) -happyOut211 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut211 #-} -happyIn212 :: (QName L) -> (HappyAbsSyn ) -happyIn212 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn212 #-} -happyOut212 :: (HappyAbsSyn ) -> (QName L) -happyOut212 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut212 #-} -happyIn213 :: (Name L) -> (HappyAbsSyn ) -happyIn213 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn213 #-} -happyOut213 :: (HappyAbsSyn ) -> (Name L) -happyOut213 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut213 #-} -happyIn214 :: (Name L) -> (HappyAbsSyn ) -happyIn214 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn214 #-} -happyOut214 :: (HappyAbsSyn ) -> (Name L) -happyOut214 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut214 #-} -happyIn215 :: (QName L) -> (HappyAbsSyn ) -happyIn215 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn215 #-} -happyOut215 :: (HappyAbsSyn ) -> (QName L) -happyOut215 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut215 #-} -happyIn216 :: (Literal L) -> (HappyAbsSyn ) -happyIn216 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn216 #-} -happyOut216 :: (HappyAbsSyn ) -> (Literal L) -happyOut216 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut216 #-} -happyIn217 :: (S) -> (HappyAbsSyn ) -happyIn217 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn217 #-} -happyOut217 :: (HappyAbsSyn ) -> (S) -happyOut217 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut217 #-} -happyIn218 :: (S) -> (HappyAbsSyn ) -happyIn218 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn218 #-} -happyOut218 :: (HappyAbsSyn ) -> (S) -happyOut218 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut218 #-} -happyIn219 :: (ModuleName L) -> (HappyAbsSyn ) -happyIn219 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn219 #-} -happyOut219 :: (HappyAbsSyn ) -> (ModuleName L) -happyOut219 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut219 #-} -happyIn220 :: (Name L) -> (HappyAbsSyn ) -happyIn220 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn220 #-} -happyOut220 :: (HappyAbsSyn ) -> (Name L) -happyOut220 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut220 #-} -happyIn221 :: (QName L) -> (HappyAbsSyn ) -happyIn221 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn221 #-} -happyOut221 :: (HappyAbsSyn ) -> (QName L) -happyOut221 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut221 #-} -happyIn222 :: (Name L) -> (HappyAbsSyn ) -happyIn222 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn222 #-} -happyOut222 :: (HappyAbsSyn ) -> (Name L) -happyOut222 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut222 #-} -happyIn223 :: (QName L) -> (HappyAbsSyn ) -happyIn223 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn223 #-} -happyOut223 :: (HappyAbsSyn ) -> (QName L) -happyOut223 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut223 #-} -happyIn224 :: (Name L) -> (HappyAbsSyn ) -happyIn224 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn224 #-} -happyOut224 :: (HappyAbsSyn ) -> (Name L) -happyOut224 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut224 #-} -happyInTok :: (Loc Token) -> (HappyAbsSyn ) -happyInTok x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyInTok #-} -happyOutTok :: (HappyAbsSyn ) -> (Loc Token) -happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOutTok #-} - - -happyActOffsets :: HappyAddr -happyActOffsets = HappyA# "\x00\x00\x1c\x11\xa0\x10\x52\x0a\x4b\x19\x00\x00\x00\x00\xf8\x07\x0b\x03\x34\x08\x00\x00\x00\x00\x73\x18\x00\x00\x00\x00\x00\x00\xb1\x07\x00\x00\x4b\x19\x0d\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x18\xcb\x18\x71\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x08\xa4\x07\x0b\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x1b\x00\x00\x00\x00\x00\x00\xe8\x17\x00\x00\x15\x08\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x0b\x30\x02\x44\x0c\x00\x00\x7c\x15\xe8\x17\xe8\x17\xe8\x17\x1c\x11\x00\x00\x1c\x11\x1c\x11\x1c\x11\x33\x19\x00\x00\x17\x08\x68\x1a\x00\x00\x74\x17\x1c\x11\x79\x00\x1c\x11\x33\x19\xc7\x07\x0c\x08\xb9\x07\x09\x08\x1c\x11\x00\x00\x00\x00\x00\x00\x33\x19\x07\x08\x06\x08\x00\x00\x7c\x15\x8b\x19\x00\x08\x97\x1a\x00\x08\x10\x08\x08\x08\x05\x08\x04\x08\xf2\x1a\xf2\x1a\x00\x00\x00\x00\x7e\x1b\x91\x07\x4d\x17\x91\x07\x00\x00\x91\x07\xfe\xff\x00\x00\x00\x00\xf5\x07\xd9\x16\xa6\x07\x95\x06\x00\x00\x00\x00\x00\x00\x1c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x07\x00\x00\x00\x00\x33\x19\x00\x00\x00\x00\x00\x00\x1c\x11\x1c\x11\x1c\x11\x1c\x11\x2d\x00\x00\x00\xfe\x07\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x76\x03\x25\x00\xfd\x07\x8b\x07\x87\x07\x22\x00\x00\x00\xdd\x07\xcc\x1a\x23\x00\xd3\x07\x2e\x00\x33\x19\xcc\x1a\xd1\x07\xb3\x18\x73\x19\x50\x1a\xcc\x07\x00\x00\xb2\x16\x00\x00\x3c\x0d\x3c\x0d\x00\x00\x98\x07\x00\x00\x00\x00\x85\x07\x7b\x07\x00\x00\x33\x19\x33\x19\x33\x19\xc1\x07\x7d\x07\x34\x06\x34\x06\xa5\x07\x00\x00\xba\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x02\x2b\x02\xbf\x07\x00\x00\x00\x00\x9c\x08\x52\x0a\xa1\x07\x9c\x07\x32\x1b\x99\x07\xc0\x07\xad\x07\x59\x00\x50\x04\xb2\x16\x00\x00\x26\x15\x00\x00\x9f\x07\xed\x01\xb0\x07\xb4\x07\x00\x00\x00\x00\x1c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x07\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x00\x00\x14\x04\x4c\x0b\xf4\x01\xb2\x07\xaf\x07\xae\x07\xac\x07\xab\x07\x00\x00\xaa\x07\xb2\x16\xa0\x07\x9d\x07\x73\x19\xb2\x16\xb2\x16\xa8\x13\x00\x00\x0d\x04\x1c\x11\xcc\x1a\x33\x19\x4c\x06\x33\x19\x43\x01\x00\x00\xca\x12\x8d\x07\x00\x00\x00\x00\xd7\x01\xae\x01\x00\x00\x33\x01\x96\x07\x83\x07\xf0\x01\x95\x07\x00\x00\x8f\x07\x50\x1a\x00\x00\x00\x00\x50\x1a\x00\x00\x50\x1a\x00\x00\x00\x00\xfb\x19\x33\x19\x50\x1a\x00\x00\x39\x00\x88\x07\x00\x00\x00\x00\x00\x00\x97\x07\x00\x00\x76\x07\x00\x00\x20\x00\x1b\x00\x19\x00\x0b\x03\x00\x00\x00\x00\x00\x00\xf3\x19\x00\x00\x6b\x07\x67\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x19\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x33\x19\x00\x00\x00\x00\x00\x00\x33\x18\x33\x19\x68\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x1b\x4c\x06\x2e\x07\x10\x07\x1d\x00\x29\x07\xc7\x03\xe8\x00\x00\x00\x00\x00\x00\x00\x05\x07\x48\x07\x00\x00\x1c\x11\x24\x10\xcb\x02\x00\x00\x37\x07\x00\x00\x00\x00\x00\x00\x00\x00\x54\x07\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x0a\x00\x00\x00\x00\xdf\x01\x00\x00\x1c\x11\x1c\x11\x00\x00\x42\x07\x00\x00\xc0\x0c\x00\x00\xc0\x0c\x1c\x11\x34\x0e\x00\x00\x1c\x11\xf9\x06\x1c\x11\x00\x00\x24\x10\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x45\x07\x3e\x16\x48\x14\x00\x00\xdb\x04\x00\x00\x00\x00\xb0\x08\x3c\x07\xe5\x06\x00\x00\x2f\x07\x3a\x07\x00\x00\x26\x07\x00\x00\x00\x00\x1c\x11\x00\x00\x27\x07\x86\x12\x25\x07\x24\x07\x39\x00\x39\x00\x1c\x11\x00\x00\x0f\x07\x0d\x07\x1a\x07\x1b\x07\x3c\x0d\x16\x07\x0c\x07\x39\x00\x00\x00\x1c\x11\x06\x07\x00\x00\x00\x07\x50\x1a\x33\x19\xa2\x06\xa1\x06\x33\x19\x03\x07\x17\x07\xf6\x06\xbc\x06\x0b\x07\x00\x00\x1c\x11\x1c\x11\xf5\x06\xc5\x1a\x00\x00\xfc\x06\xf7\x06\xc5\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x06\xe4\x05\x00\x00\x00\x00\xc7\x06\x00\x00\x00\x00\x00\x00\x00\x00\xed\x06\x56\x09\x39\x00\x48\x14\xc1\x06\xf4\x06\xf1\x06\xec\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x06\x00\x00\x00\x00\x00\x00\x1c\x11\x21\x1b\x33\x19\xd8\x06\x00\x00\x73\x06\xd2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x50\x1a\x00\x00\x33\x19\x00\x00\x00\x00\x00\x00\x89\x06\x00\x00\x00\x00\x3c\x0d\x00\x00\x1c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x18\x00\x00\x00\x00\xc3\x06\x00\x00\x00\x00\x00\x00\x8b\x06\x00\x00\x00\x00\x33\x18\xb9\x06\xbf\x06\x00\x00\x00\x00\xbb\x06\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x06\x00\x00\x25\x0b\x2f\x01\xb0\x08\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x06\x00\x00\x05\x06\xf8\x03\xe0\x03\xa5\x03\x8e\x03\x4f\x03\x47\x03\x43\x03\x2f\x03\xfa\x02\xf4\x02\xe8\x02\x00\x00\x52\x0a\xb5\x06\x87\x06\x00\x00\x43\x00\x00\x00\x9b\x06\xa6\x06\x00\x00\x00\x00\xa6\x06\x00\x00\x97\x06\x98\x06\x00\x00\x00\x00\x00\x00\xa8\x0f\x00\x00\x16\x02\x00\x00\x00\x00\x00\x00\x00\x00\x93\x06\x00\x00\x00\x00\x00\x00\xd6\x01\x00\x00\x00\x00\x1c\x11\x00\x00\x5b\x12\xd1\x01\x00\x00\x00\x00\x00\x00\x0d\x1b\x33\x19\x84\x06\x00\x00\xde\x08\x00\x00\x00\x00\x00\x00\x83\x06\x1d\x00\x00\x00\x00\x00\x50\x06\x82\x06\x00\x00\xde\x01\x45\x06\x36\x06\x72\x06\x6e\x06\x43\x01\x00\x00\x5b\x06\x00\x00\x6a\x06\x4e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x06\x0d\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00\x00\x00\x00\x00\xf3\x18\x00\x00\x00\x00\x00\x00\x44\x06\x1d\x00\xe5\x11\x00\x00\x41\x08\xde\x08\x00\x00\x00\x00\xd7\x08\x48\x00\x2d\x06\x2b\x06\x3d\x18\x50\x1a\xb1\x05\xd2\x05\x00\x00\x00\x00\x2f\x01\x2c\x0f\x1c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x11\xcc\x05\xf2\xff\x34\x0e\x34\x0e\x00\x00\xbc\x05\x1c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x16\x00\x00\xf6\x05\xe1\x05\x50\x1a\xb8\x0d\xdc\x05\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x17\x1c\x11\x5e\x13\xda\x05\x39\x00\x1c\x11\x3b\x06\xcf\x05\xbc\x14\xf2\x12\xcf\x05\x00\x00\x00\x00\x00\x00\x33\x19\x00\x00\x00\x00\x63\x05\xc0\x05\xf9\x1a\x00\x00\x91\x14\xaf\x05\xa1\x05\x50\x05\x41\x05\x4e\x05\x00\x00\xcb\x19\x00\x00\xf0\x05\x00\x00\x00\x00\x00\x00\x00\x00\x47\x05\x00\x00\x38\x05\x19\x05\xd4\x09\x94\x05\x00\x00\x00\x00\x91\x05\x75\x05\x00\x00\x00\x00\x00\x00\x83\x05\x00\x00\x21\x06\x00\x00\x00\x00\x00\x00\x7c\x05\x1c\x11\x66\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x05\x00\x00\x00\x00\x00\x00\x33\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x03\x00\x00\x50\x1a\x64\x05\x00\x00\x00\x00\x00\x00\x98\x11\x60\x05\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x02\x00\x00\x50\x1a\x00\x00\x00\x00\x08\x03\x00\x00\x53\x05\x00\x00\x1c\x11\x1c\x11\x1c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x05\x00\x00\x00\x00\x56\x05\x1d\x14\x81\x08\x59\x05\x00\x00\x00\x00\x50\x1a\xeb\x04\x97\x08\x00\x00\x50\x1a\x50\x1a\xde\x04\x00\x00\x00\x00\x00\x00\x72\x01\x31\x05\x39\x00\x3a\x05\x34\x05\x00\x00\x00\x00\x32\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x05\x77\x00\x06\x05\x00\x00\xb3\x19\x04\x05\x00\x00\x50\x1a\x00\x00\x4d\x00\xa2\x02\x00\x00\x00\x00\x0a\x05\x50\x1a\x00\x00\x00\x00\xb1\x04\x00\x00\x00\x00\x00\x00\xa3\x15\x1c\x11\x00\x00\xac\x04\xe9\x04\x00\x00\x2c\x0f\x1c\x11\xb0\x0e\xf2\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x19\x73\x19\xb1\x1a\xe3\x04\x33\x19\xd3\x13\xee\x04\xee\x05\x33\x19\x00\x00\xcf\x04\x00\x00\x80\x1a\xd9\x04\x28\x1a\x00\x00\xf1\x02\x00\x00\x00\x00\x00\x00\xdd\x04\x00\x00\x0c\x06\x00\x00\xa3\x15\x00\x00\x00\x00\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x04\xda\x04\xc9\x04\x7a\x04\x71\x04\x00\x00\x00\x00\x33\x19\x55\x04\xaa\x04\xa6\x04\x98\x04\x98\x04\x0f\x12\xae\x04\x00\x00\x00\x00\x7d\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x79\x04\x1c\x11\x00\x00\x00\x00\xb1\x1a\x2b\x08\x10\x1a\x10\x1a\x33\x19\xc7\x01\xa2\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x1a\x33\x04\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x11\x00\x00\x00\x00\x00\x00\x33\x19\x00\x00\x00\x00\x61\x04\x00\x00\x00\x00\x2f\x04\x00\x00\x00\x00\x3c\x1a\x66\x04\x58\x04\x2a\x00\x0c\x06\x00\x00\x00\x00\x1c\x11\x00\x00\x00\x00\x00\x00\x77\x04\x00\x00\x10\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x04\x00\x00\xfc\x14\x00\x00\x84\x04\x69\x04\x00\x00\x00\x00\x00\x00\x6d\x04\x59\x18\x5e\x04\x3c\x1a\x00\x00\x00\x00\x00\x00\x12\x01\x00\x00\x56\x04\x00\x00\x00\x00\x00\x00"# - -happyGotoOffsets :: HappyAddr -happyGotoOffsets = HappyA# "\x01\x00\x94\x21\x1e\x24\xa5\x01\xa3\x05\x03\x00\x02\x00\x62\x04\xfb\x05\x00\x00\x00\x00\x00\x00\xda\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x03\x7e\x04\xb7\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x04\x00\x00\x00\x00\x00\x00\x39\x04\x00\x00\x7a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x08\x00\x00\x00\x00\x00\x00\xa1\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x21\xcb\x03\x06\x22\x00\x00\x47\x16\x86\x2a\xac\x15\x70\x2a\x08\x24\x00\x00\x7e\x21\x2b\x21\xd6\x28\x90\x05\x7b\x03\x10\x01\x36\x02\x00\x00\x88\x04\x2e\x28\x00\x00\x18\x28\x67\x06\x00\x00\x00\x00\x00\x00\x92\xff\xc6\x27\x00\x00\x00\x00\x00\x00\x52\x06\xf5\xff\x8b\xff\x00\x00\x4a\x29\xca\x06\x0f\x04\x3f\x03\x03\x04\x81\x05\x00\x00\x00\x00\x00\x00\x77\x02\x69\x02\x00\x00\x00\x00\xaf\x09\x00\x00\x55\x2a\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\xf9\xff\x85\x04\x86\x05\x63\x03\x00\x00\x00\x00\x00\x00\xec\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x04\x00\x00\x00\x00\x7d\x05\x00\x00\x00\x00\x00\x00\xb0\x27\x5e\x27\x48\x27\xf6\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x03\x33\x03\x00\x00\x00\x00\x35\x02\x3f\x06\x46\x02\x00\x00\xda\x06\x9b\x01\xa8\x03\x00\x00\x00\x00\x2e\x2a\x00\x00\xf9\x1d\xa6\x1d\x00\x00\x00\x00\x1f\x00\x04\x00\xb2\x03\x00\x00\x00\x00\x2c\x06\x3f\x01\x19\x06\xc8\x03\x00\x00\xe6\x03\xdc\x03\x00\x00\x62\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\x68\x03\x00\x00\x00\x00\x00\x00\xc1\x01\x23\x01\x00\x00\x00\x00\x31\x09\x00\x00\x00\x00\x00\x00\x00\x00\x89\x04\x13\x2a\x00\x00\xe2\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x22\x3d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x15\x00\x00\x00\x00\xa4\x06\xfd\x29\xe2\x29\x3c\x03\x00\x00\x7f\x04\xec\x28\x7d\x00\x68\x05\xfe\x00\x55\x05\xec\xff\x00\x00\xcc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x04\x00\x00\x00\x00\x80\x03\x00\x00\xac\x00\x00\x00\x00\x00\xa7\x00\x06\x06\x2b\x07\x00\x00\x11\x03\x00\x00\x71\x05\x6f\x05\xfc\x04\x06\x00\xf1\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x04\x00\x00\x00\x00\x00\x00\x6d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x05\x00\x00\x00\x00\x64\x04\x00\x00\x00\x00\xde\x05\x00\x00\x00\x00\x00\x00\xdd\x00\xc9\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x02\xc8\x00\x73\x03\x66\x03\x51\x04\x3c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x03\x48\x03\x00\x00\x15\x21\x53\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x22\x00\x00\x00\x00\xfa\x01\x00\x00\xb6\x23\xe0\x26\x00\x00\x00\x00\x00\x00\x76\x22\x00\x00\x58\x22\x8e\x26\x0e\x1b\x00\x00\x78\x26\x2b\x03\x26\x26\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\xef\x02\xbb\x04\x00\x00\x00\x00\xdd\x03\xa0\x29\x00\x00\x74\x03\x00\x00\x00\x00\xe4\xff\x7e\xff\x2e\x03\x05\x02\x1e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x26\x00\x00\xa1\x02\x11\x02\x00\x00\x00\x00\x94\x02\x8c\x02\xbe\x25\x00\x00\x00\x00\x00\x00\x00\x00\xae\x02\xad\x1c\xef\xff\x87\xff\x6b\x02\x00\x00\xa8\x25\x00\x00\x00\x00\xc0\x02\x18\x07\x40\x05\x00\x00\x00\x00\x77\x03\x00\x00\x00\x00\x00\x00\xfd\x02\xde\x02\x00\x00\x56\x25\x40\x25\x00\x00\x57\x07\x00\x00\x00\x00\x00\x00\x5b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03\x00\x00\x00\x00\x00\x00\x6e\x02\x00\x00\x7d\x04\x5c\x04\x00\x00\x60\x00\x1d\x02\x8a\x29\xe1\x02\x86\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x28\x45\x00\x36\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x03\x00\x00\x2d\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x1c\x00\x00\xc2\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x04\x00\x00\x27\x02\x23\x04\x00\x00\x00\x00\x00\x00\x1c\x00\x16\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x02\x00\x00\x1a\x00\x09\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x0e\x02\xe0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\x00\x00\x00\x00\xde\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x01\x00\x00\x00\x00\xee\x24\x00\x00\x83\x01\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xff\x1a\x05\x00\x00\x00\x00\xef\x06\x54\x02\x00\x00\x00\x00\x00\x00\xbe\x03\x00\x00\x00\x00\x59\x02\xcd\x01\x00\x00\xaa\xff\x4b\x02\x76\x02\x00\x00\x00\x00\x81\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x03\x00\x00\x00\x00\x00\x00\x48\x02\x00\x00\x00\x00\x00\x00\x6b\x04\x40\x00\x37\x00\x00\x00\x00\x00\x41\x03\xcc\xff\x00\x00\x6d\x03\x04\x07\x00\x00\x00\x00\x57\x01\x64\x00\x00\x00\x00\x00\xc9\x03\x8e\x07\x00\x00\xb6\x03\x00\x00\x00\x00\xc9\x01\x4c\x1e\x59\x20\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x24\x00\x00\x00\x00\xb4\x1b\x61\x1b\x00\x00\x00\x00\x43\x20\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xbb\x29\x00\x00\x00\x00\x00\x00\x9e\x03\x38\x23\x00\x00\xb3\x01\x25\x01\x26\x00\x8b\x02\x4d\x03\x00\x00\x86\x24\xd2\x02\x00\x00\x92\x01\xf0\x1f\x8d\x00\x00\x00\x34\x29\x7d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x87\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\x87\x03\x00\x00\x00\x00\x37\x02\x00\x00\x47\x02\x00\x00\x76\x00\x00\x00\x78\x01\x00\x00\x00\x00\x0a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x01\x00\x00\x00\x00\x00\x00\x00\x00\xda\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x05\x46\x03\x00\x00\x00\x00\x00\x00\x00\x00\x27\x02\x00\x00\x94\x03\x63\x01\x00\x00\x00\x00\x00\x00\xf6\x01\x00\x00\xe3\x00\x00\x00\x00\x00\xeb\x02\x00\x00\xa3\x03\x00\x00\x17\x00\x00\x00\x00\x00\x7a\x01\x00\x00\x00\x00\x00\x00\x87\x1f\x71\x1f\x1e\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\xd6\x03\x07\x01\x00\x00\x00\x00\x89\x07\x00\x00\x6d\x03\x00\x00\x4a\x01\x79\x07\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\x6d\x03\x00\x00\x00\x00\x6d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x03\xa0\x23\x00\x00\x1b\x01\xdc\x00\x00\x00\x07\x1c\x08\x1f\x4e\x23\x00\x00\x00\x00\x00\x00\x00\x00\x63\x02\x00\x00\x00\x00\xb6\x05\x8a\x03\x7e\x01\x00\x00\xf4\x04\xea\x02\x00\x00\xb3\x00\xdf\x04\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x12\x00\x00\x00\x7a\x01\x00\x00\x00\x00\x00\x00\x67\x01\x00\x00\x9f\x00\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x00\xe1\x00\x00\x00\x00\x00\xcc\x04\x00\x00\x00\x00\x00\x00\xbf\x00\x91\x00\x62\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x1e\x00\x00\x00\x00\xd2\x00\x3b\x04\x64\x07\x40\x07\xa4\x04\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x1e\x00\x00\x00\x00\x00\x00\x91\x04\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\xb8\x00\xbc\x03\xb5\xff\x00\x00\x00\x00\x70\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -happyDefActions :: HappyAddr -happyDefActions = HappyA# "\xbe\xfd\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xfd\x00\x00\x00\x00\xf2\xff\x00\x00\x51\xff\x38\xff\x58\xff\x4e\xff\x4c\xff\x45\xff\x00\x00\x3b\xff\x00\x00\x00\x00\xe2\xfd\xb7\xfd\x02\xfe\x3e\xff\xdc\xfd\x4b\xff\xe9\xfd\xde\xfd\xdd\xfd\xda\xfd\xdb\xfd\x00\x00\x00\x00\x00\x00\xe5\xfd\xe1\xfd\xe0\xfd\xdf\xfd\xe4\xfd\xe3\xfd\xe8\xfd\x31\xff\xe6\xfd\xe7\xfd\x8a\xff\xb1\xff\x00\x00\x00\x00\x95\xff\x8b\xff\x89\xff\x9b\xff\xc8\xfe\xc7\xfe\xc5\xfe\xc3\xfe\xbe\xfe\xb9\xfe\xb4\xfe\xac\xfe\xa8\xfe\x9a\xfe\xa5\xfe\xa6\xfe\xa7\xfe\x09\xfe\x04\xfe\xeb\xfd\xff\xfd\xa4\xfe\xea\xfd\xc8\xfd\xc6\xfd\xc7\xfd\xc5\xfd\xc4\xfd\xc3\xfd\xc2\xfd\xc1\xfd\xc0\xfd\xbf\xfd\x00\x00\x00\x00\x00\x00\x9e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xfd\x00\x00\x00\x00\x8f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\xff\x00\x00\x00\x00\xbe\xfd\x00\x00\xaf\xff\xae\xff\xad\xff\x00\x00\xbe\xfd\xbe\xfd\x93\xff\x00\x00\x00\x00\x6b\xff\x00\x00\x6b\xff\x6d\xff\x00\x00\x00\x00\x00\x00\x5f\xff\x5f\xff\x24\xfe\xce\xfe\xc7\xfe\x00\x00\x00\x00\x00\x00\xd0\xfe\x00\x00\xe9\xff\xf9\xff\xf7\xff\xbe\xfd\x00\x00\xe9\xff\x00\x00\x23\xfe\xf1\xfd\xf0\xfd\xcd\xfe\xf5\xfd\xec\xfd\xd9\xfd\xfb\xfd\xd6\xfd\xd5\xfd\xd2\xfd\xd7\xfd\xc9\xfd\xd8\xfd\x00\x00\xcf\xfd\xed\xfd\x00\x00\xd1\xfd\xd0\xfd\xce\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xff\x00\x00\x5d\xff\x5a\xff\x5b\xff\x08\xfe\x01\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xff\x6b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\x00\x00\x00\x00\x00\x00\xb1\xfe\x00\x00\xba\xfe\x1e\xfe\x1e\xfe\x7d\xff\x00\x00\xdd\xff\xdd\xff\xe7\xfe\x00\x00\xbb\xfe\x00\x00\x90\xff\x00\x00\x2b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xfe\x79\xfe\x75\xfe\x78\xfe\x77\xfe\x76\xfe\x71\xfe\x70\xfe\x6f\xfe\x6e\xfe\x6d\xfe\x6c\xfe\x6b\xfe\x6a\xfe\x69\xfe\x68\xfe\x73\xfe\x72\xfe\x67\xfe\x66\xfe\x65\xfe\x64\xfe\x63\xfe\x62\xfe\x61\xfe\x60\xfe\x5f\xfe\x5e\xfe\x5d\xfe\x5c\xfe\x5b\xfe\x5a\xfe\x59\xfe\x58\xfe\x57\xfe\x56\xfe\x55\xfe\x54\xfe\x53\xfe\x52\xfe\x51\xfe\x74\xfe\x50\xfe\x4f\xfe\x4e\xfe\x90\xfe\x91\xfe\x00\x00\x00\x00\x00\x00\x93\xfe\x92\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xfe\x00\x00\x00\x00\x85\xfe\x00\x00\x00\x00\xbc\xfe\xad\xfe\x00\x00\xb2\xfe\x8c\xfe\x48\xfe\x00\x00\x47\xfe\xef\xfd\xee\xfd\x00\x00\xf9\xfd\xd4\xfd\xd3\xfd\xcd\xfd\x0d\xfe\x00\x00\xcb\xfd\xcc\xfd\xca\xfd\x00\x00\x0b\xfe\x8d\xfe\x8c\xfe\x00\x00\x00\x00\x00\x00\xf5\xfd\x00\x00\xd3\xfd\xcd\xfd\x0e\xfe\xcb\xfd\xd1\xfd\xcc\xfd\xca\xfd\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xfe\x00\x00\x00\x00\xb0\xff\x00\x00\x00\x00\x42\xff\x34\xff\x00\x00\x00\x00\x40\xff\x34\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\xff\x00\x00\x00\x00\x39\xff\x4f\xff\x00\x00\x3c\xff\x00\x00\xb5\xfd\xb4\xfd\x00\x00\x00\x00\x00\x00\x37\xff\x00\x00\x00\x00\xdd\xff\xdd\xff\xdd\xff\x00\x00\xdd\xff\xec\xff\xde\xff\x00\x00\x00\x00\x00\x00\xf2\xff\xf4\xff\xbc\xfd\xbd\xfd\x54\xff\x55\xff\x00\x00\x00\x00\x56\xff\x57\xff\x52\xff\x43\xff\x3d\xff\x41\xff\x8e\xfe\x00\x00\x4a\xff\x47\xff\x00\x00\x3f\xff\x49\xff\x00\x00\x48\xff\x32\xff\x30\xff\x00\x00\x00\x00\xb2\xff\xf3\xfd\xf2\xfd\xab\xff\xf7\xfd\xfd\xfd\x00\x00\xf7\xfe\x03\xff\x24\xff\x00\x00\x19\xff\x86\xff\x00\x00\x79\xff\xc6\xfe\xc4\xfe\xd8\xfe\xd4\xfe\xd2\xfe\x00\x00\x00\x00\x00\x00\x16\xfe\x14\xfe\xab\xfe\x13\xfe\xae\xfe\xaf\xfe\x00\x00\x53\xff\x03\xfe\xfe\xfd\x9d\xfe\x00\x00\xa2\xfe\xa3\xfe\x00\x00\x0c\xfe\x00\x00\x00\x00\x0a\xfe\x00\x00\x8b\xfe\x00\x00\x9f\xfe\x00\x00\x46\xfe\x00\x00\xb3\xfe\x00\x00\xd8\xfe\x00\x00\x9c\xfe\x00\x00\x98\xfe\x97\xfe\x96\xfe\x95\xfe\x00\x00\xdd\xff\xa8\xff\x00\x00\x00\x00\x49\xfe\x80\xfe\x73\xff\x78\xff\x77\xff\x00\x00\xbe\xfd\xf3\xfe\x2d\xff\xf7\xfe\x00\x00\x91\xff\x53\xff\x92\xff\x9d\xff\x00\x00\x9e\xff\xbe\xfd\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\xfe\xd0\xfe\x00\x00\x00\x00\x1c\xfe\x1e\xfe\xbe\xfd\xbe\xfd\x00\x00\xb0\xfe\x00\x00\x00\x00\x59\xff\xf7\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\xff\x6f\xff\x98\xff\x00\x00\x00\x00\x00\x00\x61\xff\x97\xff\x00\x00\x00\x00\x00\x00\x5e\xff\x96\xff\xc9\xfe\xca\xfe\xcb\xfe\xcc\xfe\xcf\xfe\x00\x00\xe6\xff\xbb\xfd\xba\xfd\x00\x00\x4c\xfe\xeb\xff\xdd\xff\xdd\xff\x00\x00\xe0\xff\x00\x00\x49\xfe\x00\x00\xdb\xff\x00\x00\x00\x00\xfa\xfd\x5c\xff\x07\xfe\x00\xfe\x62\xff\x00\x00\xb7\xfe\xb8\xfe\x70\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xff\x00\x00\x80\xff\x7e\xff\x81\xff\x84\xff\xa7\xff\x54\xff\xa6\xff\x00\x00\xbf\xfe\x21\xfe\x18\xfe\x1b\xfe\x1f\xfe\x20\xfe\x1e\xfe\x22\xfe\x00\x00\xc1\xfe\x7b\xff\x87\xff\x7c\xff\x88\xff\xdd\xff\x8c\xff\xd6\xfe\xdd\xff\x10\xfe\xa7\xfe\xdf\xff\xdd\xff\xdd\xff\x00\x00\x9c\xff\xa2\xff\x00\x00\x00\x00\x2a\xff\x28\xff\x9f\xff\xbe\xfd\xbd\xfe\xdd\xff\xdd\xff\x99\xff\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x00\x76\xff\x75\xff\x74\xff\x4a\xfe\x00\x00\x4d\xfe\x00\x00\xe9\xfd\xda\xfd\xe5\xfd\xe1\xfd\xe0\xfd\xdf\xfd\xe4\xfd\xe3\xfd\xe8\xfd\xe6\xfd\xe7\xfd\x7a\xfe\xde\xff\xaa\xff\x00\x00\x31\xfe\x00\x00\x33\xfe\x00\x00\xbe\xfd\x86\xfe\xda\xfe\xbe\xfd\xc2\xfe\x42\xfe\x3e\xfe\x3c\xfe\x3b\xfe\x3a\xfe\x00\x00\x44\xfe\x8c\xfe\x40\xfe\x41\xfe\xf8\xfd\x8a\xfe\x83\xfe\x84\xfe\xa0\xfe\xa1\xfe\x00\x00\x87\xfe\xa9\xfe\x00\x00\xaa\xfe\x00\x00\x00\x00\xd5\xfe\xd3\xfe\xdb\xfe\x00\x00\x00\x00\x1f\xff\x1d\xff\x00\x00\x31\xff\xf6\xfe\xfd\xfe\xfc\xfe\x00\x00\xf9\xfe\xfa\xfe\x03\xff\xbe\xfd\xa4\xff\x00\x00\x03\xff\x24\xff\x00\x00\x00\x00\x00\x00\x3a\xff\x00\x00\x33\xff\x00\x00\x35\xff\xb6\xfd\xf4\xfd\x36\xff\xf3\xff\xef\xff\xee\xff\xf0\xff\x00\x00\x00\x00\xf1\xff\xed\xff\x46\xff\x00\x00\xac\xff\xf6\xfd\xfc\xfd\x03\xff\xa1\xff\x02\xff\xfe\xfe\x00\x00\xdd\xff\xdd\xff\xa3\xff\x00\x00\x00\x00\x00\x00\x0c\xff\x14\xff\x00\x00\x1b\xff\x18\xff\x13\xff\x00\x00\x00\x00\x3e\xff\x00\x00\x00\x00\x00\x00\x19\xff\x85\xff\x7a\xff\x00\x00\x00\x00\x00\x00\x17\xfe\x15\xfe\x89\xfe\x88\xfe\x45\xfe\x39\xfe\x00\x00\x00\x00\x00\x00\xd9\xfe\x30\xfe\x00\x00\x9b\xfe\x94\xfe\xa9\xff\x7e\xfe\x81\xfe\x00\x00\x9a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xdd\xff\x2d\xff\x2d\xff\x2c\xff\x00\x00\xe5\xfe\x00\x00\x00\x00\x00\x00\xde\xff\x12\xfe\x00\x00\xde\xff\x8f\xff\x1a\xfe\x1d\xfe\xa5\xff\x00\x00\x83\xff\x69\xff\x00\x00\x00\x00\x66\xff\x64\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\xd7\xff\xf8\xff\x00\x00\xe4\xff\xdd\xff\xcd\xff\xe2\xff\xca\xff\xe5\xff\xc8\xff\x00\x00\xde\xff\xe1\xff\x7e\xfe\xf5\xff\x00\x00\xd7\xff\xd5\xff\xd4\xff\xb8\xfd\xd3\xff\xd8\xff\x00\x00\xea\xff\xe8\xff\xe7\xff\x00\x00\x00\x00\x00\x00\x65\xff\x67\xff\x82\xff\x7f\xff\x8d\xff\x11\xfe\x00\x00\x0f\xfe\xe8\xfe\xe9\xfe\x00\x00\xdd\xff\xe3\xfe\xe0\xfe\xe1\xfe\xe2\xfe\xd6\xfe\x94\xff\x00\x00\x6b\xff\xc0\xfe\x27\xff\x29\xff\xf1\xfe\x00\x00\x00\x00\x2e\xfe\x2f\xfe\xdd\xff\x2b\xfe\x00\x00\x71\xff\x00\x00\x05\xfe\x4b\xfe\x00\x00\x32\xfe\x3f\xfe\x3d\xfe\x00\x00\x00\x00\x00\x00\x43\xfe\xd1\xfe\x34\xfe\x1e\xff\x00\x00\x0b\xff\x4d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xff\x10\xff\x00\x00\x00\x00\x14\xff\x1c\xff\x00\x00\x00\x00\x00\x00\x1a\xff\xfb\xfe\xf8\xfe\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\xff\xa0\xff\x00\x00\x2f\xff\x00\xff\x25\xff\x26\xff\xdd\xff\x21\xff\x00\x00\x00\x00\x00\x00\x12\xff\x00\x00\x00\x00\x0e\xff\x50\xff\x17\xff\x00\x00\x00\x00\x08\xff\x16\xff\x3d\xff\x00\x00\x38\xfe\x36\xfe\x37\xfe\x7b\xfe\x7f\xfe\x7d\xfe\x00\x00\x00\x00\x72\xff\xd8\xfe\x28\xfe\x26\xfe\x00\x00\x00\x00\xde\xff\x2d\xfe\xf4\xfe\xf5\xfe\xee\xfe\xdd\xff\xef\xfe\xed\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xe6\xfe\xf7\xfe\x00\x00\x6c\xff\x00\x00\xcf\xff\x00\x00\x00\x00\xd8\xff\xd9\xff\x00\x00\xce\xff\xe3\xff\xcb\xff\xc6\xff\xc9\xff\x00\x00\xc7\xff\x00\x00\xd6\xff\xda\xff\x00\x00\xb5\xff\xb4\xff\xb3\xff\xd1\xff\x00\x00\x00\x00\x00\x00\x03\xff\x24\xff\xe4\xfe\xd7\xfe\x00\x00\x00\x00\x00\x00\x51\xff\xf7\xfe\xf7\xfe\xde\xff\xf2\xfe\x2c\xfe\x29\xfe\x00\x00\x27\xfe\x2a\xfe\x85\xfe\x00\x00\x00\x00\x00\x00\x0a\xff\x15\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\x23\xff\x22\xff\x20\xff\x11\xff\x0d\xff\x06\xff\x07\xff\x00\x00\x00\x00\x09\xff\x35\xfe\x82\xfe\x7c\xfe\x00\x00\xf0\xfe\xea\xfe\xec\xfe\x00\x00\xdf\xfe\xde\xfe\x03\xff\xdd\xfe\x63\xff\x00\x00\xd2\xff\xd0\xff\x00\x00\x00\x00\xc4\xff\xc2\xff\x00\x00\xf6\xff\xb6\xff\x00\x00\xdc\xfe\xeb\xfe\x25\xfe\x00\x00\x05\xff\x00\x00\xb6\xfe\xc5\xff\xcc\xff\xc3\xff\x00\x00\xbf\xff\xd7\xff\x04\xff\x00\x00\xd7\xff\xbc\xff\xbb\xff\xb9\xfd\xba\xff\x00\x00\x00\x00\xd8\xff\xc0\xff\xbd\xff\xc1\xff\x00\x00\xb8\xff\x00\x00\xb9\xff\xb7\xff"# - -happyCheck :: HappyAddr -happyCheck = HappyA# "\xff\xff\x00\x00\x09\x00\x02\x00\x02\x00\x02\x00\x0f\x00\x10\x00\x11\x00\x2b\x00\x05\x00\x05\x00\x0f\x00\x2f\x00\x22\x00\x0b\x00\x0c\x00\x67\x00\x2b\x00\x33\x00\x0b\x00\x0c\x00\x2f\x00\x33\x00\x1b\x00\x1c\x00\x2b\x00\x4f\x00\x1d\x00\x1e\x00\x2f\x00\xa1\x00\x2b\x00\x0b\x00\x0c\x00\x11\x00\x2f\x00\x0b\x00\x0c\x00\x0b\x00\x0c\x00\x1c\x00\x0b\x00\x0c\x00\x28\x00\x8b\x00\x22\x00\x0c\x00\xa9\x00\x0b\x00\x0c\x00\x16\x00\xa9\x00\x1c\x00\x08\x00\x1c\x00\x0a\x00\x00\x00\xb9\x00\xa9\x00\x1c\x00\xbc\x00\x1c\x00\xbe\x00\x16\x00\x1c\x00\x0b\x00\x0c\x00\x46\x00\x0f\x00\x48\x00\x28\x00\x56\x00\x1c\x00\xc9\x00\x0b\x00\x0c\x00\xcc\x00\xd0\x00\x32\x00\x33\x00\x09\x00\x2f\x00\x25\x00\x1a\x00\x3e\x00\x3f\x00\xd0\x00\x1f\x00\x4d\x00\x43\x00\xd0\x00\x45\x00\x46\x00\x47\x00\x31\x00\x32\x00\x33\x00\xd0\x00\xc1\x00\x72\x00\x22\x00\x1c\x00\xb3\x00\x2e\x00\x6b\x00\xc8\x00\xc9\x00\x24\x00\x1d\x00\x1e\x00\x22\x00\xc6\x00\xc7\x00\x12\x00\x13\x00\x3a\x00\x28\x00\x1e\x00\xc3\x00\xc4\x00\x38\x00\x39\x00\x22\x00\x39\x00\x38\x00\x39\x00\x1f\x00\x09\x00\x21\x00\x0b\x00\x23\x00\x24\x00\x25\x00\x26\x00\xd2\x00\x72\x00\x13\x00\x2a\x00\x61\x00\x2c\x00\x56\x00\x72\x00\xc3\x00\xc4\x00\x84\x00\x39\x00\x6d\x00\xb4\x00\x1f\x00\x56\x00\x21\x00\xb4\x00\x23\x00\x24\x00\x25\x00\x26\x00\x84\x00\x27\x00\x84\x00\x2a\x00\xd5\x00\x2c\x00\xc3\x00\x84\x00\xb9\x00\x84\x00\xc3\x00\xbc\x00\x84\x00\xbe\x00\xa2\x00\xb5\x00\x30\x00\xd0\x00\xb8\x00\xb3\x00\x84\x00\xb3\x00\xaf\x00\xb7\x00\xc9\x00\xb7\x00\xd0\x00\xcc\x00\xc2\x00\xc3\x00\xc4\x00\xa2\x00\xc6\x00\xc7\x00\xd0\x00\xc3\x00\xc4\x00\xc3\x00\xc4\x00\xc7\x00\xd0\x00\xc7\x00\xb5\x00\x4f\x00\xd0\x00\xb8\x00\xd4\x00\xc7\x00\xc7\x00\xaf\x00\x17\x00\xd3\x00\xd0\x00\xd0\x00\xd0\x00\xc2\x00\xc3\x00\xc4\x00\x77\x00\xc6\x00\xc7\x00\xc3\x00\xc4\x00\x63\x00\xc6\x00\xc7\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xd4\x00\x30\x00\x88\x00\x89\x00\x8a\x00\x3f\x00\xd5\x00\x77\x00\x58\x00\x43\x00\x90\x00\x45\x00\x46\x00\x47\x00\x65\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x6b\x00\xb3\x00\x88\x00\x89\x00\x8a\x00\xb7\x00\x30\x00\xb3\x00\xc3\x00\xc4\x00\x90\x00\xb7\x00\xc3\x00\xc4\x00\x22\x00\xb3\x00\x59\x00\xc3\x00\xc4\x00\xb7\x00\x28\x00\xc7\x00\xb2\x00\xc3\x00\xc4\x00\xb5\x00\xb6\x00\xc7\x00\xb8\x00\x62\x00\x63\x00\xc3\x00\xc4\x00\xd3\x00\x6b\x00\xc7\x00\xbc\x00\x59\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\x17\x00\x6b\x00\xb5\x00\xb6\x00\xc9\x00\xb8\x00\xcf\x00\x0b\x00\x0c\x00\xb5\x00\x6b\x00\x22\x00\x63\x00\x55\x00\x08\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb1\x00\xc2\x00\xc3\x00\xc4\x00\x1f\x00\xb6\x00\x21\x00\xcf\x00\x23\x00\x24\x00\x25\x00\x26\x00\x17\x00\x08\x00\x09\x00\x2a\x00\xb8\x00\x2c\x00\x57\x00\x58\x00\xc5\x00\xc9\x00\x25\x00\xb4\x00\xcc\x00\x59\x00\x1f\x00\x65\x00\x21\x00\x28\x00\xc6\x00\xc7\x00\x25\x00\x26\x00\x31\x00\x32\x00\x33\x00\x2a\x00\xc3\x00\x2c\x00\x27\x00\x24\x00\x25\x00\x6b\x00\xc3\x00\xc4\x00\xb5\x00\xc6\x00\xc7\x00\xc3\x00\xc4\x00\xd2\x00\xc6\x00\xc7\x00\x31\x00\x32\x00\x33\x00\x05\x00\x06\x00\xc2\x00\xc3\x00\xc4\x00\xd5\x00\x16\x00\x3f\x00\x40\x00\x41\x00\xd5\x00\x43\x00\xa7\x00\x45\x00\x46\x00\x47\x00\xb5\x00\x16\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x43\x00\x1c\x00\x45\x00\x46\x00\x47\x00\x6d\x00\x78\x00\xc2\x00\xc3\x00\xc4\x00\xc3\x00\xc4\x00\x36\x00\x77\x00\x44\x00\x45\x00\x46\x00\x47\x00\x22\x00\xc3\x00\xc4\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xd5\x00\x2d\x00\x88\x00\x89\x00\x8a\x00\xc1\x00\xd1\x00\x77\x00\xb8\x00\xd5\x00\x90\x00\xd1\x00\xc8\x00\xc9\x00\x60\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xc6\x00\xc7\x00\x88\x00\x89\x00\x8a\x00\x1f\x00\xb5\x00\x21\x00\x19\x00\xb8\x00\x90\x00\x25\x00\x26\x00\x05\x00\x06\x00\xc7\x00\x2a\x00\x22\x00\x2c\x00\xc2\x00\xc3\x00\xc4\x00\xb2\x00\xc6\x00\xc7\x00\xb5\x00\xb6\x00\x3f\x00\xb8\x00\x41\x00\x16\x00\x43\x00\xd2\x00\x45\x00\x46\x00\x47\x00\x05\x00\x06\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\x17\x00\x17\x00\xb5\x00\xb6\x00\x19\x00\xb8\x00\xcf\x00\x22\x00\x16\x00\xb6\x00\x17\x00\x22\x00\x22\x00\x22\x00\x29\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x22\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x17\x00\xcf\x00\x91\x00\x90\x00\x17\x00\x92\x00\xc3\x00\xc4\x00\x22\x00\xc6\x00\xc7\x00\x22\x00\x26\x00\xd5\x00\x1f\x00\x22\x00\x21\x00\x2b\x00\x0f\x00\xc3\x00\xc4\x00\x77\x00\xc6\x00\xc7\x00\xd5\x00\x2a\x00\x8b\x00\x2c\x00\x8d\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x19\x00\xd5\x00\x88\x00\x89\x00\x8a\x00\x1f\x00\xae\x00\x21\x00\xb5\x00\x22\x00\x90\x00\x2d\x00\x2e\x00\xb5\x00\x01\x00\x29\x00\x2a\x00\x26\x00\x2c\x00\x06\x00\x07\x00\xc2\x00\xc3\x00\xc4\x00\x2d\x00\x19\x00\xc2\x00\xc3\x00\xc4\x00\x3f\x00\x19\x00\x41\x00\x14\x00\x43\x00\x22\x00\x45\x00\x46\x00\x47\x00\xb6\x00\x22\x00\x4a\x00\x4b\x00\x50\x00\x51\x00\xb2\x00\x53\x00\x54\x00\xb5\x00\xb6\x00\x15\x00\xb8\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xd1\x00\x6e\x00\x6f\x00\x70\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x77\x00\x0b\x00\x0c\x00\xd5\x00\xc2\x00\xc3\x00\xc4\x00\xcf\x00\xc6\x00\xc7\x00\x81\x00\x2b\x00\x83\x00\x2d\x00\x85\x00\x46\x00\x47\x00\x88\x00\x89\x00\x8a\x00\x1f\x00\xc1\x00\x21\x00\xd1\x00\x8b\x00\x90\x00\x8d\x00\x77\x00\xc8\x00\xc9\x00\xca\x00\x2a\x00\xcc\x00\x2c\x00\xce\x00\x91\x00\x09\x00\x81\x00\x0b\x00\x83\x00\xcc\x00\x85\x00\x3c\x00\x3d\x00\x88\x00\x89\x00\x8a\x00\x1f\x00\xd0\x00\x21\x00\x17\x00\x79\x00\x90\x00\x4e\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x2a\x00\xb2\x00\x2c\x00\x22\x00\xb5\x00\xb6\x00\x65\x00\xb8\x00\x27\x00\x65\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x2d\x00\x0b\x00\x0c\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x65\x00\xb6\x00\x1e\x00\xb0\x00\xb1\x00\xb2\x00\x22\x00\xcf\x00\xb5\x00\xb6\x00\x8b\x00\xb8\x00\x8d\x00\x55\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x6f\x00\x70\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x77\x00\xcc\x00\x50\x00\x51\x00\xd0\x00\xd5\x00\x54\x00\xcf\x00\xba\x00\x01\x00\x81\x00\xbd\x00\x83\x00\xbf\x00\x85\x00\xc1\x00\x1e\x00\x88\x00\x89\x00\x8a\x00\x22\x00\xd1\x00\xc8\x00\xc9\x00\xca\x00\x90\x00\xcc\x00\x77\x00\xce\x00\x0b\x00\x0c\x00\x26\x00\xc3\x00\xc4\x00\xb5\x00\xc6\x00\xc7\x00\x81\x00\xca\x00\x83\x00\xcc\x00\x85\x00\xce\x00\x96\x00\x88\x00\x89\x00\x8a\x00\xc2\x00\xc3\x00\xc4\x00\xd5\x00\x08\x00\x90\x00\xb3\x00\x27\x00\x26\x00\x29\x00\xb7\x00\x35\x00\xb2\x00\xc3\x00\xc4\x00\xb5\x00\xb6\x00\xc7\x00\xb8\x00\x27\x00\xb3\x00\x29\x00\xc3\x00\xc4\x00\xb7\x00\x27\x00\xc7\x00\x29\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb3\x00\x6b\x00\xc3\x00\xc4\x00\xb7\x00\xb2\x00\xc7\x00\xcf\x00\xb5\x00\xb6\x00\x37\x00\xb8\x00\x45\x00\x46\x00\x47\x00\x48\x00\xc3\x00\xc4\x00\xd1\x00\x4c\x00\xc7\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\xc3\x00\xc4\x00\xcf\x00\x45\x00\x46\x00\x47\x00\x48\x00\x0b\x00\x0c\x00\x81\x00\x4c\x00\x83\x00\x27\x00\x85\x00\x29\x00\xab\x00\x88\x00\x89\x00\x8a\x00\xd1\x00\x74\x00\x75\x00\x76\x00\x77\x00\x90\x00\x2d\x00\x2e\x00\xd1\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x27\x00\x81\x00\x29\x00\x83\x00\x27\x00\x85\x00\x29\x00\xd0\x00\x88\x00\x89\x00\x8a\x00\x3f\x00\x27\x00\x41\x00\x29\x00\x43\x00\x90\x00\x45\x00\x46\x00\x47\x00\x08\x00\x09\x00\x4a\x00\x4b\x00\x24\x00\x25\x00\xb2\x00\x27\x00\x28\x00\xb5\x00\xb6\x00\x6b\x00\xb8\x00\x80\x00\x81\x00\x82\x00\x83\x00\x31\x00\x32\x00\x33\x00\x0b\x00\x0c\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x6c\x00\x25\x00\xb2\x00\x50\x00\x51\x00\xb5\x00\xb6\x00\xcf\x00\xb8\x00\x78\x00\x2d\x00\x2e\x00\x32\x00\x31\x00\x32\x00\x33\x00\x69\x00\x6a\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x45\x00\x46\x00\x47\x00\x27\x00\x3f\x00\x29\x00\x41\x00\xcf\x00\x43\x00\x55\x00\x45\x00\x46\x00\x47\x00\x3f\x00\xd1\x00\x4a\x00\x4b\x00\x43\x00\x7c\x00\x45\x00\x46\x00\x47\x00\x3e\x00\x3f\x00\x78\x00\x41\x00\x27\x00\x43\x00\x29\x00\x45\x00\x46\x00\x47\x00\x3e\x00\x3f\x00\x18\x00\x19\x00\x1a\x00\x43\x00\x65\x00\x45\x00\x46\x00\x47\x00\x3e\x00\x3f\x00\x93\x00\x94\x00\x95\x00\x43\x00\xd1\x00\x45\x00\x46\x00\x47\x00\x3e\x00\x3f\x00\xb5\x00\xad\x00\xae\x00\x43\x00\xb6\x00\x45\x00\x46\x00\x47\x00\x29\x00\xb5\x00\x2b\x00\x8b\x00\xb5\x00\xc2\x00\xc3\x00\xc4\x00\x96\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc2\x00\xc3\x00\xc4\x00\xc2\x00\xc3\x00\xc4\x00\x93\x00\x94\x00\x95\x00\x27\x00\x3f\x00\x29\x00\x41\x00\xd5\x00\x43\x00\x31\x00\x45\x00\x46\x00\x47\x00\x5b\x00\x5c\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x31\x00\x42\x00\x43\x00\x52\x00\x45\x00\x46\x00\x47\x00\x3f\x00\x27\x00\x41\x00\x29\x00\x43\x00\x71\x00\x45\x00\x46\x00\x47\x00\x69\x00\x6a\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\xb6\x00\x0b\x00\x0c\x00\xc3\x00\xc4\x00\x36\x00\xc6\x00\xc7\x00\xd2\x00\x29\x00\x61\x00\x2b\x00\x36\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x2b\x00\xb6\x00\x2d\x00\xd5\x00\xc3\x00\xc4\x00\x36\x00\xc6\x00\xc7\x00\xa5\x00\xa6\x00\xa7\x00\xd0\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x0b\x00\x0c\x00\x8b\x00\xd5\x00\x8b\x00\xc3\x00\xc4\x00\x20\x00\xc6\x00\xc7\x00\x68\x00\x69\x00\x6a\x00\xd5\x00\x4e\x00\xc3\x00\xc4\x00\x01\x00\xc6\x00\xc7\x00\x0a\x00\x0b\x00\x0c\x00\xd5\x00\x8b\x00\xc3\x00\xc4\x00\x17\x00\xc6\x00\xc7\x00\x3f\x00\x94\x00\x95\x00\xd5\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x29\x00\x3f\x00\x2b\x00\x41\x00\xd5\x00\x43\x00\xb6\x00\x45\x00\x46\x00\x47\x00\x16\x00\x49\x00\x4a\x00\x4b\x00\x0a\x00\x0b\x00\x0c\x00\xc1\x00\x22\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\x0d\x00\x0e\x00\xb6\x00\x5a\x00\x5b\x00\x5c\x00\xc3\x00\xc4\x00\x17\x00\xc6\x00\xc7\x00\xd5\x00\x64\x00\xc1\x00\x16\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\x32\x00\x3f\x00\xd5\x00\x41\x00\x55\x00\x43\x00\x49\x00\x45\x00\x46\x00\x47\x00\x84\x00\xd5\x00\x4a\x00\x4b\x00\x84\x00\x4d\x00\x68\x00\x69\x00\x6a\x00\x5b\x00\x3f\x00\x1c\x00\x41\x00\x28\x00\x43\x00\x49\x00\x45\x00\x46\x00\x47\x00\x0b\x00\x0c\x00\x4a\x00\x4b\x00\x1c\x00\x4d\x00\x68\x00\x69\x00\x6a\x00\x29\x00\x3f\x00\x66\x00\x41\x00\x29\x00\x43\x00\x5b\x00\x45\x00\x46\x00\x47\x00\x84\x00\x49\x00\x4a\x00\x4b\x00\xc2\x00\xc3\x00\xc4\x00\x17\x00\xc6\x00\xc7\x00\x3f\x00\x73\x00\x41\x00\x0c\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x0f\x00\x49\x00\x4a\x00\x4b\x00\x17\x00\xb6\x00\x03\x00\x04\x00\xc3\x00\xc4\x00\x27\x00\xc6\x00\xc7\x00\x7a\x00\x7b\x00\x7c\x00\x0b\x00\x0c\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x7a\x00\x7b\x00\x7c\x00\xd5\x00\x0b\x00\x0c\x00\x8b\x00\x1c\x00\x3f\x00\x29\x00\x41\x00\x1c\x00\x43\x00\xd5\x00\x45\x00\x46\x00\x47\x00\x2b\x00\x49\x00\x4a\x00\x4b\x00\x93\x00\x94\x00\x95\x00\x93\x00\x94\x00\x95\x00\x3f\x00\x73\x00\x41\x00\xb6\x00\x43\x00\x72\x00\x45\x00\x46\x00\x47\x00\x1d\x00\x49\x00\x4a\x00\x4b\x00\x50\x00\x51\x00\x52\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x32\x00\x43\x00\x32\x00\x45\x00\x46\x00\x47\x00\x28\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x17\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x1e\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x22\x00\x43\x00\x05\x00\x45\x00\x46\x00\x47\x00\x84\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\x17\x00\x41\x00\x84\x00\x43\x00\x32\x00\x45\x00\x46\x00\x47\x00\x22\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\x0b\x00\x0c\x00\x0b\x00\x0c\x00\x1e\x00\x3f\x00\x29\x00\x41\x00\xb6\x00\x43\x00\x20\x00\x45\x00\x46\x00\x47\x00\x0c\x00\x49\x00\x4a\x00\x4b\x00\x06\x00\x07\x00\x28\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x22\x00\x43\x00\x16\x00\x45\x00\x46\x00\x47\x00\x84\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\x17\x00\x41\x00\xb6\x00\x43\x00\x74\x00\x45\x00\x46\x00\x47\x00\x1c\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\x34\x00\x35\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x78\x00\x43\x00\x73\x00\x45\x00\x46\x00\x47\x00\x84\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x31\x00\x43\x00\x84\x00\x45\x00\x46\x00\x47\x00\x29\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x25\x00\x43\x00\x84\x00\x45\x00\x46\x00\x47\x00\x1c\x00\x49\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x1e\x00\x43\x00\x1e\x00\x45\x00\x46\x00\x47\x00\x03\x00\x04\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\x28\x00\x41\x00\xb6\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x05\x00\x06\x00\x4a\x00\x4b\x00\xd5\x00\x28\x00\x29\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x64\x00\x43\x00\x56\x00\x45\x00\x46\x00\x47\x00\x05\x00\x06\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\x5f\x00\x41\x00\xb6\x00\x43\x00\x84\x00\x45\x00\x46\x00\x47\x00\x49\x00\x4a\x00\x4a\x00\x4b\x00\xd5\x00\x03\x00\x04\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x1d\x00\x43\x00\x1d\x00\x45\x00\x46\x00\x47\x00\x49\x00\x4a\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x17\x00\x43\x00\x5b\x00\x45\x00\x46\x00\x47\x00\x7d\x00\x7e\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x05\x00\x43\x00\x22\x00\x45\x00\x46\x00\x47\x00\x28\x00\x29\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x17\x00\x43\x00\x28\x00\x45\x00\x46\x00\x47\x00\x53\x00\x54\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\x24\x00\x41\x00\xb6\x00\x43\x00\x24\x00\x45\x00\x46\x00\x47\x00\x05\x00\x06\x00\x4a\x00\x4b\x00\xd5\x00\x1d\x00\x5b\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x73\x00\x43\x00\x5b\x00\x45\x00\x46\x00\x47\x00\x2b\x00\x2d\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\x22\x00\x41\x00\xb6\x00\x43\x00\x2b\x00\x45\x00\x46\x00\x47\x00\x2b\x00\x1d\x00\x4a\x00\x4b\x00\xd5\x00\x2c\x00\x41\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x3f\x00\xb6\x00\x41\x00\x1c\x00\x43\x00\x29\x00\x45\x00\x46\x00\x47\x00\x28\x00\x1d\x00\x4a\x00\x4b\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x22\x00\xb6\x00\x3f\x00\x40\x00\x41\x00\x2d\x00\x43\x00\x5d\x00\x45\x00\x46\x00\x47\x00\x29\x00\x64\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x22\x00\xb6\x00\x3f\x00\x84\x00\x41\x00\x21\x00\x43\x00\x0f\x00\x45\x00\x46\x00\x47\x00\x0c\x00\x0f\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x46\x00\xb6\x00\x3f\x00\x16\x00\x1e\x00\x24\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x4b\x00\x17\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x0f\x00\x5f\x00\x27\x00\xb6\x00\x28\x00\x45\x00\x46\x00\x47\x00\x48\x00\x0c\x00\x21\x00\x84\x00\x84\x00\xd5\x00\x28\x00\x1d\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x29\x00\xb6\x00\x42\x00\x43\x00\x1d\x00\x45\x00\x46\x00\x47\x00\x1c\x00\x1e\x00\x2c\x00\x4b\x00\x2c\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x1e\x00\x1e\x00\x1d\x00\xb6\x00\x42\x00\x43\x00\x22\x00\x45\x00\x46\x00\x47\x00\x5d\x00\x5e\x00\x5f\x00\xd5\x00\x61\x00\x17\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x28\x00\x73\x00\x1d\x00\xb6\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x29\x00\x5d\x00\x5e\x00\x5f\x00\xd5\x00\x61\x00\x24\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x73\x00\xb6\x00\x43\x00\x1b\x00\x45\x00\x46\x00\x47\x00\x2b\x00\x44\x00\x45\x00\x46\x00\x47\x00\x73\x00\xd5\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x44\x00\x45\x00\x46\x00\x47\x00\x73\x00\x44\x00\x45\x00\x46\x00\x47\x00\x5f\x00\x5b\x00\x22\x00\x24\x00\xd5\x00\xc3\x00\xc4\x00\x24\x00\xc6\x00\xc7\x00\x3b\x00\x3c\x00\x3d\x00\x01\x00\x02\x00\xbd\x00\x22\x00\x05\x00\x06\x00\xc1\x00\x05\x00\xc3\x00\xc4\x00\xd5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\x1c\x00\x22\x00\x17\x00\xb8\x00\x44\x00\x45\x00\x46\x00\x47\x00\x17\x00\x17\x00\x21\x00\xd5\x00\xd6\x00\xd7\x00\xc3\x00\xc4\x00\x17\x00\xc6\x00\xc7\x00\x17\x00\x44\x00\x45\x00\x46\x00\x47\x00\xb8\x00\x44\x00\x45\x00\x46\x00\x47\x00\x17\x00\x17\x00\x17\x00\xd5\x00\x17\x00\x17\x00\xc3\x00\xc4\x00\x17\x00\xc6\x00\xc7\x00\x2d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x21\x00\x44\x00\x45\x00\x46\x00\x47\x00\x22\x00\x17\x00\x2b\x00\xd5\x00\x41\x00\xc3\x00\xc4\x00\x41\x00\xc6\x00\xc7\x00\x21\x00\x27\x00\x41\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x6d\x00\x70\x00\x2b\x00\xd5\x00\xc3\x00\xc4\x00\x4b\x00\xc6\x00\xc7\x00\xc3\x00\xc4\x00\x61\x00\xc6\x00\xc7\x00\x73\x00\x2d\x00\x29\x00\x28\x00\x64\x00\x20\x00\xc3\x00\xc4\x00\xd5\x00\xc6\x00\xc7\x00\xc3\x00\xc4\x00\xd5\x00\xc6\x00\xc7\x00\x74\x00\x0c\x00\xb3\x00\x84\x00\x22\x00\x0f\x00\xb7\x00\x84\x00\xd5\x00\x6b\x00\x1d\x00\x0f\x00\x0f\x00\xd5\x00\x85\x00\x0f\x00\x01\x00\x02\x00\xc3\x00\xc4\x00\x05\x00\x06\x00\xc7\x00\x0f\x00\x20\x00\x68\x00\x16\x00\x1d\x00\x1d\x00\x5e\x00\x1d\x00\xc3\x00\xc4\x00\x85\x00\xc6\x00\xc7\x00\x01\x00\x16\x00\x03\x00\x04\x00\x05\x00\x06\x00\x1d\x00\x0c\x00\x00\x00\x28\x00\x85\x00\xc3\x00\xc4\x00\xd5\x00\xc6\x00\xc7\x00\xc3\x00\xc4\x00\x46\x00\xc6\x00\xc7\x00\x16\x00\x01\x00\x18\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xd5\x00\x09\x00\x20\x00\xc3\x00\xc4\x00\xd5\x00\xc6\x00\xc7\x00\xc3\x00\xc4\x00\xff\xff\xc6\x00\xc7\x00\xff\xff\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x32\x00\xd5\x00\xff\xff\xff\xff\x20\x00\xff\xff\xd5\x00\xff\xff\x24\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x5f\x00\x74\x00\x61\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x01\x00\x18\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\x74\x00\x09\x00\x20\x00\x61\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x16\x00\xff\xff\x18\x00\xff\xff\x01\x00\xff\xff\x32\x00\xff\xff\x74\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x7f\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\x01\x00\xff\xff\xff\xff\x61\x00\x05\x00\x06\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x79\x00\x16\x00\x74\x00\x18\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x4f\x00\x7f\x00\xff\xff\xff\xff\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xba\x00\xff\xff\xff\xff\xbd\x00\x61\x00\xbf\x00\xff\xff\xc1\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\xff\xff\xce\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\xff\xff\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\xff\xff\x6c\x00\xff\xff\x6e\x00\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\xff\xff\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xba\x00\x18\x00\xff\xff\xbd\x00\xff\xff\xbf\x00\xff\xff\xc1\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\x2a\x00\xce\x00\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\xff\xff\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\xff\xff\x6c\x00\xff\xff\x6e\x00\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\xff\xff\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xba\x00\x18\x00\xff\xff\xbd\x00\xff\xff\xbf\x00\xff\xff\xc1\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\x2a\x00\xce\x00\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\xff\xff\x6c\x00\xff\xff\x6e\x00\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\xff\xff\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\x16\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\x4f\x00\xff\xff\x2a\x00\xff\xff\x53\x00\x54\x00\x55\x00\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\x61\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\x60\x00\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\x57\x00\x03\x00\x04\x00\x05\x00\x06\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\x16\x00\xff\xff\x18\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\x61\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x01\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x16\x00\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\x25\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\x74\x00\xff\xff\xff\xff\x01\x00\x02\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x16\x00\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\x26\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\x01\x00\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\x16\x00\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\x25\x00\x6a\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x61\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\x16\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\x6a\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x26\x00\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\x16\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\x6a\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\x74\x00\x01\x00\xff\xff\xff\xff\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x42\x00\x43\x00\x44\x00\x05\x00\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x2d\x00\xff\xff\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x90\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xb2\x00\x48\x00\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x90\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xb2\x00\x48\x00\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x90\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xb2\x00\x48\x00\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\x61\x00\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x74\x00\x20\x00\x05\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x22\x00\xff\xff\x24\x00\x25\x00\x2d\x00\x27\x00\x28\x00\xff\xff\xff\xff\x16\x00\x17\x00\xff\xff\xff\xff\xff\xff\x01\x00\x31\x00\x32\x00\x33\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\xff\xff\x0b\x00\x26\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x20\x00\x61\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\x74\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x61\x00\x08\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\x74\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x20\x00\x61\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x16\x00\x2f\x00\x18\x00\x19\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x17\x00\x18\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x30\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x74\x00\x05\x00\x06\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x20\x00\x61\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\x30\x00\xff\xff\xff\xff\x16\x00\x74\x00\x18\x00\x01\x00\x02\x00\xff\xff\x61\x00\x05\x00\x06\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x16\x00\x74\x00\xff\xff\x05\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\x16\x00\xff\xff\x61\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x74\x00\x18\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x74\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\xff\xff\xff\xff\x74\x00\x05\x00\xff\xff\xff\xff\x20\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x6b\x00\xff\xff\xff\xff\x16\x00\x17\x00\x01\x00\x02\x00\xff\xff\xff\xff\x74\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\x74\x00\x61\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x01\x00\x16\x00\xff\xff\x61\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x16\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x74\x00\xff\xff\xff\xff\x05\x00\x61\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x16\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x01\x00\x16\x00\xff\xff\xff\xff\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\x16\x00\xff\xff\x74\x00\x61\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x61\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\x74\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\x74\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x24\x00\x25\x00\xff\xff\x27\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x31\x00\x32\x00\x33\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\x74\x00\x61\x00\xff\xff\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x61\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\x74\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x90\x00\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\xff\xff\x27\x00\x28\x00\xff\xff\xff\xff\x9b\x00\x9c\x00\x9d\x00\x9e\x00\xff\xff\xa0\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\x22\x00\xff\xff\x24\x00\x25\x00\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x9c\x00\x9d\x00\x9e\x00\xff\xff\xa0\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x9e\x00\xff\xff\xa0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xaa\x00\xff\xff\xac\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xaa\x00\xff\xff\xac\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xaa\x00\xff\xff\xac\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xaa\x00\xff\xff\xac\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\xff\xff\xff\xff\x8f\x00\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\x8c\x00\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\x99\x00\x9a\x00\xbb\x00\xff\xff\xbd\x00\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xbb\x00\xff\xff\xbd\x00\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xff\xff\xcb\x00\xff\xff\xcd\x00\xce\x00\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\x8c\x00\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\x8c\x00\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xbb\x00\xff\xff\xbd\x00\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xff\xff\xcb\x00\xff\xff\xcd\x00\xce\x00\xcf\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xbb\x00\xff\xff\xbd\x00\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xff\xff\xcb\x00\xff\xff\xcd\x00\xce\x00\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\x8c\x00\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\x8c\x00\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xbb\x00\xff\xff\xbd\x00\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xff\xff\xcb\x00\xff\xff\xcd\x00\xce\x00\xcf\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xbb\x00\xff\xff\xbd\x00\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xff\xff\xcb\x00\xff\xff\xcd\x00\xce\x00\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xa3\x00\xa4\x00\xff\xff\x90\x00\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xa4\x00\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x8e\x00\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x8e\x00\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xcf\x00\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\xcf\x00\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x00\x83\x00\x84\x00\x85\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\x85\x00\xff\xff\xcf\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\x90\x00\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\xff\xff\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\xff\xff\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xb2\x00\xff\xff\xcf\x00\xb5\x00\xb6\x00\x90\x00\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xcf\x00\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xcf\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xb2\x00\xff\xff\xcf\x00\xb5\x00\xb6\x00\x90\x00\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xcf\x00\xff\xff\xff\xff\x90\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xcf\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xb2\x00\xff\xff\xff\xff\xb5\x00\xb6\x00\xff\xff\xb8\x00\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x00\xff\xff\xcf\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# - -happyTable :: HappyAddr -happyTable = HappyA# "\x00\x00\x86\x00\x0c\x02\x87\x00\x07\x00\x09\x00\x1f\x03\x20\x03\x21\x03\xc7\x00\xb4\x02\x65\x01\x11\x04\xe0\x02\x86\x01\x67\x01\xd8\x01\xbc\x02\xc7\x00\xe9\x02\x67\x01\xed\x02\xe1\x02\x51\x02\x12\x04\x13\x04\xc7\x00\x82\x01\x1d\x04\xbd\x03\x31\x02\x4e\x02\xc7\x00\x67\x01\xf6\x02\xba\x03\xc8\x00\x67\x01\xed\x02\x67\x01\xf6\x02\x43\x02\x67\x01\xd8\x01\xd9\x01\x4f\x01\xbb\x01\xf2\x01\x30\x02\x67\x01\x44\x03\x9a\x02\xc4\x00\x43\x02\x99\x00\x43\x02\x9b\x00\x6e\x01\x87\x01\xcd\x00\x43\x02\x88\x01\xf6\x01\xb7\x02\xbe\xff\xfb\x01\x67\x01\x6e\x03\x8c\x00\x18\x04\x8d\x00\xdb\x01\x55\x03\xfb\x01\x8a\x01\x67\x01\x6e\x03\x8b\x01\x4f\x02\x9b\x02\x9c\x02\x9a\x00\xf3\x01\x9e\x00\x39\x01\x93\x03\xea\x01\xc5\x00\x6f\x01\xee\x03\xbe\x00\xc5\x00\x0d\x00\x0e\x00\x0f\x00\xa1\x00\xa2\x00\xa3\x00\xc5\x00\x50\x01\x56\x03\xd6\x02\x1b\x04\xd3\x02\x3a\x01\x8e\x00\x93\x00\x94\x00\x62\x03\xbc\x03\xbd\x03\x91\x02\xbd\x02\x18\x00\x14\x03\x15\x03\x3b\x01\xdd\x03\x01\x04\x14\x00\xad\x00\x2d\x03\x07\x03\xbb\x01\xe4\x02\x06\x03\x07\x03\x2c\x00\x9a\x00\x2d\x00\x9c\x00\x16\x03\xc2\x01\xc3\x01\x2f\x00\x0a\x04\xf7\x02\xb2\x03\x30\x00\x0f\x04\x31\x00\x6f\x03\xf8\x02\x14\x00\x15\x00\xb4\x02\xbc\x01\x45\x03\x52\x02\x2c\x00\x70\x03\x2d\x00\x52\x02\xb3\x03\xc2\x01\xc3\x01\x2f\x00\xaf\x02\x9f\x00\xb0\x02\x30\x00\x83\x01\x31\x00\x53\x02\xb1\x02\x87\x01\xf7\x01\x53\x02\x88\x01\xfc\x01\x89\x01\xee\x02\x22\x03\x93\x01\xc9\x00\x23\x03\x14\x04\x01\x02\xbe\x03\xda\x01\x15\x04\x8a\x01\xbf\x03\xc9\x00\x8b\x01\x42\x00\x14\x00\x43\x00\xef\x02\x44\x00\x18\x00\xc9\x00\x14\x00\xad\x00\x14\x00\xad\x00\xae\x00\xc9\x00\xae\x00\x22\x03\xd4\x00\x0d\x02\x23\x03\x24\x03\x66\x01\x66\x01\xdc\x01\xfe\x03\x16\x04\x08\x00\x08\x00\x08\x00\x42\x00\x14\x00\x43\x00\x32\x00\x44\x00\x18\x00\x14\x00\x15\x00\xd5\x00\x17\x00\x18\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x24\x03\x85\x03\x3a\x00\x3b\x00\x3c\x00\x73\x01\x19\x00\x32\x00\xe2\x03\xbe\x00\x3d\x00\x0d\x00\x0e\x00\x0f\x00\x03\x04\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xf0\x03\x14\x04\x3a\x00\x3b\x00\x3c\x00\x15\x04\x85\x03\xbe\x03\x14\x00\x08\x03\x3d\x00\xbf\x03\x14\x00\x08\x03\x91\x02\xbe\x03\xc4\x03\x14\x00\xad\x00\xbf\x03\x92\x02\xae\x00\x3e\x00\x14\x00\xad\x00\x3f\x00\x40\x00\xae\x00\x41\x00\x86\x03\x87\x03\x14\x00\xad\x00\x16\x04\xc5\x03\xae\x00\x60\x03\xa0\x02\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x22\x04\xf1\x03\x3f\x00\x40\x00\x8a\x01\x41\x00\x45\x00\x67\x01\x44\x03\x94\x01\xa1\x02\xfc\x03\xea\x03\xf5\x03\x99\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x32\x03\x42\x00\x14\x00\x43\x00\x2c\x00\x33\x03\x2d\x00\x45\x00\xc1\x01\xc2\x01\xc3\x01\x2f\x00\x7d\x01\x99\x00\x9a\x00\x30\x00\x7c\x03\x31\x00\x7a\x03\x7b\x03\x16\x00\xfc\x01\x9e\x00\xeb\x02\xfd\x01\x8e\x01\x2c\x00\xf6\x03\x2d\x00\x7e\x01\x44\x00\x18\x00\xe5\x02\x2f\x00\xa1\x00\xa2\x00\xa3\x00\x30\x00\x53\x02\x31\x00\xd0\x01\x8d\x01\x9e\x00\x8f\x01\x14\x00\x15\x00\x94\x01\x71\x01\x18\x00\x14\x00\x15\x00\xfd\x03\x17\x00\x18\x00\xa1\x00\xa2\x00\xa3\x00\x1e\x00\x1f\x00\x42\x00\x14\x00\x43\x00\x72\x01\xb7\x03\x0a\x00\xd1\x01\xd2\x01\x19\x00\x0c\x00\xd3\x03\x0d\x00\x0e\x00\x0f\x00\x94\x01\x7e\x03\x48\x01\x12\x00\xd3\x01\x4e\x01\x80\x03\x43\x02\x0d\x00\x0e\x00\x0f\x00\x46\x03\xd4\x03\x42\x00\x14\x00\x43\x00\x14\x00\x15\x00\xa3\x03\x32\x00\x62\x03\x5d\x03\x0e\x00\x0f\x00\xd6\x02\x14\x00\x15\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xf4\x02\xef\x03\x3a\x00\x3b\x00\x3c\x00\xc4\x01\x78\x03\x32\x00\x7c\x03\xa6\x02\x3d\x00\x9b\x03\x93\x00\x94\x00\x63\x03\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x44\x00\x18\x00\x3a\x00\x3b\x00\x3c\x00\x2c\x00\x08\x01\x2d\x00\x7f\x01\x09\x01\x3d\x00\x2e\x00\x2f\x00\x1e\x00\x1f\x00\xa3\x02\x30\x00\x7a\x01\x31\x00\x42\x00\x14\x00\x43\x00\x3e\x00\x44\x00\x18\x00\x3f\x00\x40\x00\x0a\x00\x41\x00\xeb\x01\x7e\x03\xbe\x00\xac\x03\x0d\x00\x0e\x00\x0f\x00\x1e\x00\x1f\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\xfb\x03\xdb\x02\x3f\x00\x40\x00\x80\x01\x41\x00\x45\x00\xd6\x02\xbf\x02\x13\x00\x86\x02\xfc\x03\x2b\x01\x81\x01\xd7\x02\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x2b\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x79\x01\x45\x00\xb1\x03\x8e\x03\xab\x01\x8f\x03\x14\x00\x15\x00\xb5\x01\x17\x00\x18\x00\x7a\x01\xb6\x01\x19\x00\x2c\x00\x2b\x01\x2d\x00\xb7\x01\xae\x03\x14\x00\x15\x00\x32\x00\x17\x00\x18\x00\x19\x00\x9d\x03\xa8\x01\x31\x00\xd9\x02\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xb0\x01\x19\x00\x3a\x00\x3b\x00\x3c\x00\x2c\x00\xd7\x02\x2d\x00\xc9\x03\x7a\x01\x3d\x00\x30\x03\x26\x02\x9e\x01\x88\x00\x3c\x02\x3d\x02\xdc\x02\x31\x00\x89\x00\x8a\x00\x42\x00\x14\x00\x43\x00\xaf\x01\x4c\x01\x42\x00\x14\x00\x43\x00\x0a\x00\x2a\x01\x0b\x00\x19\x03\x0c\x00\x2b\x01\x0d\x00\x0e\x00\x0f\x00\x13\x00\x2b\x01\x27\x02\x12\x00\x48\x02\x49\x02\x3e\x00\x4a\x02\x4b\x02\x3f\x00\x40\x00\xb5\x03\x41\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x35\x03\x9e\x03\x9f\x03\xa0\x03\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x32\x00\xce\x03\xcf\x03\x19\x00\xb0\x01\x14\x00\x43\x00\x45\x00\x71\x01\x18\x00\x3e\x02\x98\x03\x37\x00\x99\x03\x39\x00\x03\x01\x0f\x00\x3a\x00\x3b\x00\x3c\x00\x2c\x00\xc4\x01\x2d\x00\x47\x03\xa8\x01\x3d\x00\x84\x02\x32\x00\x93\x00\x94\x00\x30\x01\x9d\x03\x96\x00\x31\x00\x97\x00\x50\x03\x9a\x00\x3e\x02\x9c\x00\x37\x00\xfd\x01\x39\x00\x18\x02\xaa\x00\x3a\x00\x3b\x00\x3c\x00\x2c\x00\xbf\x02\x2d\x00\x52\x01\x3d\x01\x3d\x00\xc4\x02\xa7\x00\xa8\x00\xa9\x00\xaa\x00\x31\x03\x3e\x00\x31\x00\x2b\x01\x3f\x00\x40\x00\x74\x03\x41\x00\x9f\x00\xbb\x02\xb0\x00\xa8\x00\xa9\x00\xaa\x00\x53\x01\xe0\x03\xe1\x03\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\xc1\x02\x13\x00\xdb\x03\x3f\x02\x40\x02\x3e\x00\xdc\x03\x45\x00\x3f\x00\x41\x02\xa8\x01\x41\x00\xa9\x01\xba\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xef\x03\xa0\x03\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x32\x00\xea\x02\x48\x02\x49\x02\xf0\x02\x19\x00\x43\x03\x45\x00\x8f\x00\x11\x03\x3e\x02\x90\x00\x37\x00\xfc\x02\x39\x00\x92\x00\x8b\x02\x3a\x00\x3b\x00\x3c\x00\x8c\x02\x13\x03\x93\x00\x94\x00\x95\x00\x3d\x00\x96\x00\x32\x00\x97\x00\x99\x03\x9a\x03\x37\x03\x14\x00\x15\x00\xee\x01\x17\x00\x18\x00\x3e\x02\x30\x01\x37\x00\x96\x00\x39\x00\x97\x00\x12\x02\x3a\x00\x3b\x00\x3c\x00\x42\x00\x14\x00\x43\x00\x04\x01\x14\x02\x3d\x00\xab\x00\x4e\xfe\x37\x03\x4e\xfe\xac\x00\x1f\x02\x3e\x00\x14\x00\xa2\x02\x3f\x00\x40\x00\xa3\x02\x41\x00\x60\xfe\xab\x00\x60\xfe\x14\x00\xad\x00\xac\x00\x6a\xfe\xae\x00\x6a\xfe\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\xab\x00\x2c\x02\x14\x00\xad\x00\xac\x00\x3e\x00\xae\x00\x45\x00\x3f\x00\x40\x00\x20\x02\x41\x00\x91\x03\x64\x00\xba\x03\x65\x00\x14\x00\xad\x00\x2f\x02\x93\x03\xae\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x38\x03\x39\x03\x3a\x03\x3b\x03\x3c\x03\x14\x00\x2c\x03\x45\x00\x91\x03\x64\x00\x92\x03\x65\x00\xa6\x03\xa7\x03\x3d\x03\x93\x03\x37\x00\x6b\xfe\x39\x00\x6b\xfe\x33\x02\x3a\x00\x3b\x00\x3c\x00\x38\x02\xc6\x03\x3a\x03\x3b\x03\x3c\x03\x3d\x00\x05\x03\x26\x02\x39\x02\x99\x00\x9a\x00\x9b\x00\x9c\x00\x6c\xfe\x3d\x03\x6c\xfe\x37\x00\x6d\xfe\x39\x00\x6d\xfe\x43\x02\x3a\x00\x3b\x00\x3c\x00\x0a\x00\x6e\xfe\x0b\x00\x6e\xfe\x0c\x00\x3d\x00\x0d\x00\x0e\x00\x0f\x00\x99\x00\x9a\x00\x27\x02\x12\x00\x9d\x00\x9e\x00\x3e\x00\x9f\x00\xa6\x03\x3f\x00\x40\x00\x47\x02\x41\x00\x62\x01\x63\x01\x64\x01\x65\x01\xa1\x00\xa2\x00\xa3\x00\x1b\x03\x1c\x03\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x4c\x02\x9e\x00\x3e\x00\x48\x02\x42\x03\x3f\x00\x40\x00\x45\x00\x41\x00\x73\x02\x25\x02\x26\x02\x56\x02\xa1\x00\xa2\x00\xa3\x00\x6c\x03\x98\x02\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x55\x01\x0e\x00\x0f\x00\x6f\xfe\x0a\x00\x6f\xfe\x0b\x00\x45\x00\x0c\x00\x9c\x02\x0d\x00\x0e\x00\x0f\x00\x74\x01\x6c\x02\x27\x02\x12\x00\xbe\x00\x8e\x02\x0d\x00\x0e\x00\x0f\x00\xca\x03\xcb\x03\x8f\x02\xcc\x03\x70\xfe\xbe\x00\x70\xfe\x0d\x00\x0e\x00\x0f\x00\xa4\x03\xea\x01\x0b\x04\x0c\x04\x0d\x04\xbe\x00\x9e\x02\x0d\x00\x0e\x00\x0f\x00\x4c\x03\xea\x01\xfc\x03\xd7\x00\xd8\x00\xbe\x00\x6c\x01\x0d\x00\x0e\x00\x0f\x00\xe9\x01\xea\x01\xf3\x01\x9c\x01\x9d\x01\xbe\x00\x13\x00\x0d\x00\x0e\x00\x0f\x00\xd7\xfe\x9e\x01\xd7\xfe\x4a\x01\xb9\x00\x42\x00\x14\x00\x43\x00\xc6\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x42\x00\x14\x00\x43\x00\x42\x00\x14\x00\x43\x00\xd7\x03\xd7\x00\xd8\x00\x77\xfe\x0a\x00\x77\xfe\x0b\x00\x19\x00\x0c\x00\xc8\x01\x0d\x00\x0e\x00\x0f\x00\x5a\x03\x94\x02\x4c\x01\x12\x00\x4d\x01\x4e\x01\xcb\x01\xc5\x02\x83\x03\xcd\x01\x0d\x00\x0e\x00\x0f\x00\x0a\x00\x78\xfe\x0b\x00\x78\xfe\x0c\x00\xd6\x01\x0d\x00\x0e\x00\x0f\x00\xc2\x02\x98\x02\x4c\x01\x12\x00\x4d\x01\x4e\x01\x13\x00\xfa\x02\xfb\x02\x14\x00\x15\x00\xf4\x01\x17\x00\x18\x00\x07\x02\x9b\x01\x84\x03\x9c\x01\xb7\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xae\x01\x13\x00\xaf\x01\x19\x00\x14\x00\x15\x00\xbc\x00\x17\x00\x18\x00\x94\x03\x95\x03\x96\x03\x0b\x01\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xfd\x02\xfe\x02\x4f\x01\x19\x00\x28\x01\x14\x00\x15\x00\x43\x01\x17\x00\x18\x00\x75\x03\x97\x02\x98\x02\x19\x00\x45\x01\x14\x00\x15\x00\x88\x00\x17\x00\x18\x00\x0f\x02\x67\x01\x10\x02\x19\x00\x4f\x01\x14\x00\x15\x00\x21\x04\x17\x00\x18\x00\x75\x01\x69\x02\xd8\x00\x19\x00\xbe\x00\x1d\x04\x0d\x00\x0e\x00\x0f\x00\x9b\x01\x0a\x00\x9c\x01\x0b\x00\x19\x00\x0c\x00\x13\x00\x0d\x00\x0e\x00\x0f\x00\x18\x04\xe6\x03\x11\x00\x12\x00\x11\x02\x67\x01\x10\x02\x5e\x03\x1a\x04\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x93\x00\x94\x00\x0e\x03\x0f\x03\x13\x00\x92\x02\x93\x02\x94\x02\x14\x00\x15\x00\x1b\x04\x17\x00\x18\x00\x19\x00\xe7\x03\x50\x01\x10\x04\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x93\x00\x94\x00\x09\x04\x0a\x00\x19\x00\x0b\x00\x00\x04\x0c\x00\x01\x04\x0d\x00\x0e\x00\x0f\x00\x03\x04\x19\x00\x48\x01\x12\x00\x07\x04\x71\x03\x96\x02\x97\x02\x98\x02\xa0\x02\x0a\x00\x43\x02\x0b\x00\x91\x01\x0c\x00\xed\x03\x0d\x00\x0e\x00\x0f\x00\x6a\x02\x6b\x02\x48\x01\x12\x00\x43\x02\x49\x01\xa8\x02\x97\x02\x98\x02\x59\xff\x0a\x00\x72\x03\x0b\x00\xf3\x03\x0c\x00\xa0\x02\x0d\x00\x0e\x00\x0f\x00\xf4\x03\x04\x04\x11\x00\x12\x00\x06\x02\x14\x00\x43\x00\xf8\x03\x71\x01\x18\x00\x0a\x00\x9e\x02\x0b\x00\xf9\x03\x0c\x00\xfa\x03\x0d\x00\x0e\x00\x0f\x00\xb9\x03\xe3\x03\x11\x00\x12\x00\xbc\x03\x13\x00\xad\x02\x60\x01\x14\x00\x15\x00\xc3\x03\x17\x00\x18\x00\x97\x01\x98\x01\x99\x01\x67\x01\xb2\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xb9\x01\x98\x01\x99\x01\x19\x00\x67\x01\x68\x01\x4a\x01\x43\x02\x0a\x00\xc9\x03\x0b\x00\x43\x02\x0c\x00\x19\x00\x0d\x00\x0e\x00\x0f\x00\x98\x03\xf4\x03\x11\x00\x12\x00\x0b\x02\xd7\x00\xd8\x00\xd6\x00\xd7\x00\xd8\x00\x0a\x00\x75\x02\x0b\x00\x13\x00\x0c\x00\xd9\x03\x0d\x00\x0e\x00\x0f\x00\xfe\xfd\xc3\x03\x11\x00\x12\x00\x58\x02\x59\x02\x5a\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xde\x03\x0c\x00\xdf\x03\x0d\x00\x0e\x00\x0f\x00\xe0\x03\xc7\x03\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x77\x03\x0c\x00\x78\x03\x0d\x00\x0e\x00\x0f\x00\x7a\x03\xa8\x03\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x81\x01\x0c\x00\x1e\x00\x0d\x00\x0e\x00\x0f\x00\x7f\x03\xd2\x02\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x8a\x03\x0b\x00\x82\x03\x0c\x00\x8b\x03\x0d\x00\x0e\x00\x0f\x00\xdf\x02\x01\x03\x11\x00\x12\x00\x19\x00\x67\x01\x69\x01\x67\x01\x6a\x01\x9d\x03\x0a\x00\xfa\x02\x0b\x00\x13\x00\x0c\x00\xb9\x00\x0d\x00\x0e\x00\x0f\x00\xac\x03\x2a\x02\x11\x00\x12\x00\x0a\x02\x8a\x00\xaa\x03\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xb0\x03\x0c\x00\xae\x03\x0d\x00\x0e\x00\x0f\x00\xb5\x03\x8d\x01\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xb1\x03\x0b\x00\x13\x00\x0c\x00\xb7\x03\x0d\x00\x0e\x00\x0f\x00\x43\x02\x92\x01\x11\x00\x12\x00\x19\x00\xb4\x00\xb5\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x1b\x03\x0c\x00\x28\x03\x0d\x00\x0e\x00\x0f\x00\x29\x03\x05\x02\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x2b\x03\x0c\x00\x2a\x03\x0d\x00\x0e\x00\x0f\x00\x2c\x03\x0c\x01\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x2f\x03\x0c\x00\x30\x03\x0d\x00\x0e\x00\x0f\x00\x43\x02\x10\x00\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x37\x03\x0c\x00\x49\x03\x0d\x00\x0e\x00\x0f\x00\x5f\x01\x60\x01\xcd\x03\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x4e\x03\x0b\x00\x13\x00\x0c\x00\x4f\x03\x0d\x00\x0e\x00\x0f\x00\x09\x02\x0a\x02\xa5\x02\x12\x00\x19\x00\x91\x01\x92\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xde\x01\x0c\x00\x57\x03\x0d\x00\x0e\x00\x0f\x00\x09\x02\x0a\x02\xa7\x02\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x96\x02\x0b\x00\x13\x00\x0c\x00\x5c\x03\x0d\x00\x0e\x00\x0f\x00\x1e\x03\x1f\x03\xa9\x02\x12\x00\x19\x00\x1c\x00\x1d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xff\xfd\x0c\x00\x60\x03\x0d\x00\x0e\x00\x0f\x00\xe7\x02\xe8\x02\x70\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x6e\x03\x0c\x00\xa0\x02\x0d\x00\x0e\x00\x0f\x00\x16\x02\x17\x02\xcf\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x1e\x00\x0c\x00\x33\xff\x0d\x00\x0e\x00\x0f\x00\x91\x01\x92\x01\xd4\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xb6\x02\x0c\x00\xb7\x02\x0d\x00\x0e\x00\x0f\x00\xca\x01\xcb\x01\xef\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xb9\x02\x0b\x00\x13\x00\x0c\x00\xba\x02\x0d\x00\x0e\x00\x0f\x00\x09\x02\x0a\x02\xcb\x00\x12\x00\x19\x00\xc1\x02\xa0\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x9e\x02\x0c\x00\xa0\x02\x0d\x00\x0e\x00\x0f\x00\xd2\x02\xc4\x02\xd1\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xdf\x02\x0b\x00\x13\x00\x0c\x00\xae\x01\x0d\x00\x0e\x00\x0f\x00\xe0\x02\xcb\x00\x41\x01\x12\x00\x19\x00\xe3\x02\xe5\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x43\x02\x0c\x00\xe9\x02\x0d\x00\x0e\x00\x0f\x00\xed\x02\xf2\x02\x54\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xf3\x02\x13\x00\x0a\x00\xa3\x01\xa4\x01\xf4\x02\xbe\x00\xf6\x02\x0d\x00\x0e\x00\x0f\x00\xfa\x02\xde\x01\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x03\x03\x13\x00\x0a\x00\x04\x03\x46\x01\x05\x03\xbe\x00\x0d\x03\x0d\x00\x0e\x00\x0f\x00\x0c\x03\x0e\x03\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x8c\x00\x13\x00\xbd\x00\x11\x03\x19\x03\x18\x02\xbe\x00\x1a\x02\x0d\x00\x0e\x00\x0f\x00\x14\x02\x1b\x02\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xb7\x00\x22\x02\x1d\x02\x13\x00\x23\x02\x55\x01\x0e\x00\x0f\x00\x56\x01\x24\x02\x25\x02\x29\x02\x2a\x02\x19\x00\x91\x01\xc7\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x2e\x02\x13\x00\xc5\x02\xc6\x02\xcb\x00\x0d\x00\x0e\x00\x0f\x00\x35\x02\x36\x02\x37\x02\xc7\x02\x24\xfe\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x3b\x02\x3c\x02\x45\x02\x13\x00\xc5\x02\x66\x03\x38\xff\x0d\x00\x0e\x00\x0f\x00\xc8\x02\xc9\x02\xca\x02\x19\x00\xcb\x02\x47\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x91\x01\x4e\x02\x51\x02\x13\x00\x2b\x02\xa7\x01\x0d\x00\x0e\x00\x0f\x00\x8a\x02\x67\x03\xc9\x02\xca\x02\x19\x00\xcb\x02\x81\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x75\x02\x13\x00\x6f\x01\x89\x02\x0d\x00\x0e\x00\x0f\x00\x9c\x01\x10\x04\x5d\x03\x0e\x00\x0f\x00\x75\x02\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x07\x04\x5d\x03\x0e\x00\x0f\x00\x9e\x02\xe4\x03\x5d\x03\x0e\x00\x0f\x00\x96\x02\xa0\x02\xa5\x02\xab\x02\x19\x00\x14\x00\x15\x00\xac\x02\x17\x00\x18\x00\x1b\x02\xa9\x00\xaa\x00\x1b\x00\x47\x00\x57\x01\xb2\x02\x1e\x00\x1f\x00\x92\x00\x1e\x00\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x93\x00\x94\x00\x6c\x01\x7b\x01\x77\x01\xcc\x02\xe5\x03\x5d\x03\x0e\x00\x0f\x00\x78\x01\x7c\x01\x82\x01\x19\x00\x58\x01\x59\x01\x14\x00\x15\x00\xce\xfd\xcd\x02\x18\x00\xd0\xfd\xd9\x03\x5d\x03\x0e\x00\x0f\x00\xcc\x02\x7f\x03\x5d\x03\x0e\x00\x0f\x00\xcf\xfd\xd2\xfd\xd5\xfd\x19\x00\xa6\x01\xa7\x01\x14\x00\x15\x00\xa8\x01\xcd\x02\x18\x00\xaf\x01\x82\x03\x5d\x03\x0e\x00\x0f\x00\xb4\x01\x5c\x03\x5d\x03\x0e\x00\x0f\x00\xb3\x01\xbe\x01\xbd\x01\x19\x00\xbf\x01\x14\x00\x15\x00\xc0\x01\x17\x00\x18\x00\x48\x01\xc6\x01\xc1\x01\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xcd\x01\xd6\x01\xcf\x01\x19\x00\x14\x00\x15\x00\xc8\x01\x17\x00\x18\x00\x14\x00\x15\x00\x2b\x00\x17\x00\x18\x00\xd8\x01\xe9\x01\xee\x01\xf1\x01\xde\x01\xb9\x00\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x2c\x00\xfa\x01\xab\x00\xf8\x01\xff\x01\x00\x02\xac\x00\xf9\x01\x19\x00\x8e\x00\x0f\x02\xb2\x00\xb3\x00\x19\x00\xff\xff\xb4\x00\x1b\x00\x47\x00\x14\x00\xad\x00\x1e\x00\x1f\x00\xae\x00\xb7\x00\xb9\x00\xcf\x00\xd0\x00\xc7\x00\xcb\x00\xd1\x00\xc7\x00\x14\x00\x15\x00\xff\xff\x17\x00\x18\x00\x1b\x00\x0b\x01\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x3c\x01\x45\x01\xff\xff\x54\x01\xff\xff\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x14\x00\x15\x00\x8c\x00\x17\x00\x18\x00\x20\x00\x1b\x00\x21\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x19\x00\x50\xff\x22\x00\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x14\x00\x15\x00\x00\x00\x17\x00\x18\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\xe9\x03\x19\x00\x00\x00\x00\x00\x22\x00\x00\x00\x19\x00\x00\x00\x50\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x69\x03\x5f\x01\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x2a\x00\x2c\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x1b\x00\x21\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x2c\x00\x50\xff\x22\x00\x2b\x00\x00\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x00\x00\x00\x00\xea\x03\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x1b\x00\x00\x00\xd0\x02\x00\x00\x2c\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x50\xff\x00\x00\x00\x00\x00\x00\x55\x02\x6b\x03\x9e\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x56\x02\x00\x00\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\xa1\x00\xa2\x00\xa3\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x2b\x00\x1e\x00\x1f\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3d\x01\xcf\x02\x2c\x00\x21\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x23\x00\xd1\x02\x00\x00\x00\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x65\x03\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x02\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x8f\x00\x00\x00\x00\x00\x90\x00\x2b\x00\x3e\x01\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x93\x00\x94\x00\x95\x00\x00\x00\x96\x00\x00\x00\x97\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x66\x03\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xd1\x02\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x43\x02\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x18\x03\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x00\x00\x74\x00\x00\x00\x75\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x2c\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x8f\x00\x53\x00\x00\x00\x90\x00\x00\x00\x3e\x01\x00\x00\x92\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x93\x00\x94\x00\x95\x00\x00\x00\x96\x00\x56\x00\x97\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x18\x03\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x00\x00\x74\x00\x00\x00\x75\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x2c\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x8f\x00\x53\x00\x00\x00\x90\x00\x00\x00\x91\x00\x00\x00\x92\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x93\x00\x94\x00\x95\x00\x00\x00\x96\x00\x56\x00\x97\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x00\x00\x74\x00\x00\x00\x75\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x2c\x00\x77\x00\x78\x00\x79\x00\x00\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x23\x01\x9a\x00\x9b\x00\x9c\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x88\x02\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x7a\x01\x55\x00\x25\x01\x26\x01\x00\x00\x9f\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x27\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x56\x02\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x23\x01\x9a\x00\x9b\x00\x9c\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\xad\x01\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x7a\x01\x55\x00\x25\x01\x26\x01\x00\x00\x9f\x00\x23\x00\x00\x00\x56\x00\x00\x00\x27\x00\x28\x00\x29\x00\x57\x00\x00\x00\x58\x00\x27\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x2b\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x33\x01\x9a\x00\x9b\x00\x9c\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x34\x01\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x2b\x01\x55\x00\x25\x01\x35\x01\x00\x00\x9f\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x36\x01\x37\x01\x38\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x23\x01\x9a\x00\x9b\x00\x9c\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x24\x01\x00\x00\x55\x00\x25\x01\x26\x01\x00\x00\x9f\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x27\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x23\x01\x9a\x00\x9b\x00\x9c\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x25\x01\x26\x01\x00\x00\x9f\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x27\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\xe4\x01\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x01\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x43\x02\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x02\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x7c\x02\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x02\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\xde\x02\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x02\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x67\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x73\x00\x20\x00\x00\x00\x21\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x22\x00\x48\x01\x00\x00\x00\x00\x00\x00\x7b\x00\x7c\x00\x7d\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x43\x02\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x2b\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x1b\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\xa2\x03\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x85\x01\x00\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x03\x6c\x03\x00\x00\x2c\x00\x77\x00\x78\x00\x79\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x1b\x00\x47\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\xa2\x03\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\xbb\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x03\xa1\x01\x00\x00\x2c\x00\x77\x00\x78\x00\x79\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x43\x02\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x1b\x00\x64\x00\x00\x00\x65\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x85\x01\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x86\x01\x73\x00\x00\x00\x00\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x2c\x00\x77\x00\x78\x00\x79\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x2b\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x2c\x00\x77\x00\x78\x00\x79\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x43\x02\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x1b\x00\x47\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x3f\x03\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\xa1\x01\x40\x03\x00\x00\x00\x00\x2c\x00\x41\x03\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x59\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x2c\x00\x00\x00\x1b\x00\x47\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x67\x00\x00\x00\x3f\x03\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x03\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x03\x00\x00\x00\x00\x2c\x00\x41\x03\x5f\x02\x47\x00\x1c\x00\x1d\x00\x60\x02\x1f\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x2c\x00\x1b\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x61\x02\x62\x02\x63\x02\x64\x02\x65\x02\x66\x02\x67\x02\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\x68\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x69\x02\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x1b\x00\x61\x00\x62\x00\x63\x00\x1e\x00\x64\x00\x00\x00\x65\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xb0\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x26\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\xb9\x01\x00\x00\x57\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x57\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x14\x01\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x3d\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x3e\x00\x65\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x16\x01\x17\x01\xc2\x00\x3b\x00\x3c\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x3d\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x3e\x00\x65\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\xb7\x01\xc2\x00\x3b\x00\x3c\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x3d\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x3e\x00\x65\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\xff\x00\x00\x00\x00\x2c\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x1b\x00\x47\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\xff\x00\x00\x5a\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x00\x00\x61\x00\x62\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x2e\xff\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x9c\x00\x2b\x00\x00\x00\x00\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x20\x00\x52\x01\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x2c\x00\x22\x00\x1e\x00\x2b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x40\x01\x00\x00\x9d\x00\x9e\x00\x53\x01\x9f\x00\x41\x01\x00\x00\x00\x00\xb0\x00\x1f\x04\x00\x00\x00\x00\x00\x00\x1b\x00\xa1\x00\xa2\x00\xa3\x00\x1e\x00\x1f\x00\x00\x00\x5b\x01\x9a\x00\x00\x00\x9c\x00\x20\x04\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x5c\x01\x00\x00\x00\x00\x9f\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x5d\x01\x00\x00\x5e\x01\x5f\x01\x00\x00\x00\x00\x00\x00\x2c\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2b\x00\x5b\x01\x9a\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x1b\x00\x2c\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x5c\x01\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x01\x20\x00\xed\x01\x21\x00\x4c\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x2b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x74\x03\x21\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x1b\x00\x47\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x0b\x01\x00\x00\xad\x02\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x2b\x00\x26\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x2c\x00\x1e\x00\x1f\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x22\x00\x2b\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\xad\x02\x00\x00\x00\x00\x20\x00\x2c\x00\x21\x00\x1b\x00\x47\x00\x00\x00\x2b\x00\x1e\x00\x1f\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x0b\x01\x2c\x00\x00\x00\x1e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\xb0\x00\x00\x00\x2b\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x2c\x00\x21\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2c\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x06\x01\x00\x00\x07\x01\x1b\x00\x00\x00\x00\x00\x2c\x00\x1e\x00\x00\x00\x00\x00\x08\x01\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x27\x03\x00\x00\x00\x00\xb0\x00\xc1\x03\x1b\x00\x47\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xc2\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x1b\x00\x47\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x1b\x00\xbb\x00\x00\x00\x2b\x00\x1e\x00\x00\x00\x00\x00\x1b\x00\x47\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x2c\x00\x00\x00\x00\x00\x1e\x00\x2b\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x1b\x00\x0a\x03\x00\x00\x00\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\xd5\x02\x00\x00\x2c\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x2b\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x03\x00\x00\x2c\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x00\x00\x00\x00\x2c\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x9d\x00\x9e\x00\x00\x00\x9f\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xa1\x00\xa2\x00\xa3\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x2b\x00\x6d\x02\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x2c\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x9e\x00\x00\x00\x9f\x00\xa0\x00\x00\x00\x00\x00\x76\x02\x77\x02\x78\x02\x79\x02\x00\x00\x7a\x02\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x70\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x45\x00\x6d\x02\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x40\x01\x00\x00\x9d\x00\x9e\x00\x00\x00\x9f\x00\x41\x01\xd6\xfe\x00\x00\xd6\xfe\x52\x03\x78\x02\x79\x02\x00\x00\x7a\x02\xa1\x00\xa2\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x6d\x02\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x03\x79\x02\x00\x00\x7a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x6d\x02\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x03\x6f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xde\x01\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x03\x00\x00\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xde\x01\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x32\x02\x00\x00\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x6d\x02\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x02\x6f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x6d\x02\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x02\x6f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xde\x01\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\xe1\x01\x00\x00\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xde\x01\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\xe6\x01\x00\x00\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x6d\x02\xdf\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x05\x04\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\xeb\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xd1\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x8b\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x8c\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x8d\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xaa\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x34\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x51\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x58\x03\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xdc\x02\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\xff\x02\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x8d\x02\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x0f\x01\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x10\x01\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x84\x00\x85\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x2b\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x2c\x01\x2d\x01\x00\x00\x00\x00\x2e\x01\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x19\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x1a\x01\x1b\x01\x1c\x01\x00\x00\x1d\x01\x00\x00\x00\x00\x1e\x01\x2f\x01\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x93\x00\x94\x00\x30\x01\x1f\x01\x96\x00\x20\x01\x31\x01\x45\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x1d\x01\x00\x00\x00\x00\x1e\x01\x92\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x93\x00\x94\x00\x00\x00\x1f\x01\x00\x00\x20\x01\x21\x01\x45\x00\x7d\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x7e\x02\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x7f\x02\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x1d\x01\x00\x00\x00\x00\x1e\x01\x92\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x93\x00\x94\x00\x00\x00\x1f\x01\x00\x00\x20\x01\x21\x01\x45\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x1d\x01\x00\x00\x00\x00\x1e\x01\x92\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x93\x00\x94\x00\x00\x00\x1f\x01\x00\x00\x20\x01\x21\x01\x45\x00\x18\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x86\x02\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x1d\x01\x00\x00\x00\x00\x1e\x01\x92\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x93\x00\x94\x00\x00\x00\x1f\x01\x00\x00\x20\x01\x21\x01\x45\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x1d\x01\x00\x00\x00\x00\x1e\x01\x92\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x93\x00\x94\x00\x00\x00\x1f\x01\x00\x00\x20\x01\x21\x01\x45\x00\x7f\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x49\x03\x4a\x03\x00\x00\x3d\x00\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\xd0\x03\x00\x00\x00\x00\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xd5\x03\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\xd6\x03\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x82\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x02\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x11\x01\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x12\x01\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x09\x04\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x41\x03\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x57\x03\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\xd8\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x1d\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x1e\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x2e\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x37\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x45\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x72\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x75\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x81\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x01\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x02\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x03\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x04\x02\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xd2\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x80\x00\x34\x00\x81\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x0a\x03\x34\x00\x0e\x01\x36\x00\x37\x00\x38\x00\x39\x00\x45\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\x34\x00\x0e\x01\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x0d\x01\x34\x00\x0e\x01\x36\x00\x37\x00\x38\x00\x39\x00\x45\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x01\x96\x01\x38\x00\x39\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x96\x01\x00\x00\x39\x00\x00\x00\x45\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\xc2\x00\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x5a\x02\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x3d\x00\x00\x00\x00\x00\x5b\x02\xd7\x00\xd8\x00\x00\x00\x5c\x02\x12\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x02\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x5b\x02\xd7\x00\xd8\x00\x00\x00\x5c\x02\x5d\x02\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x4f\x03\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\xa1\x01\x3b\x00\x3c\x00\x3e\x00\x00\x00\x45\x00\x3f\x00\x40\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\xa2\x01\x3b\x00\x3c\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x3c\x01\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x45\x00\x3f\x00\x40\x00\x00\x00\x41\x00\xe7\x01\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x8e\x00\x3b\x00\x3c\x00\x3e\x00\x00\x00\x45\x00\x3f\x00\x40\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x13\x01\x3b\x00\x3c\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x15\x01\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x45\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x3c\x01\x3b\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x45\x00\x3f\x00\x40\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x14\x00\x43\x00\x16\x00\x44\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -happyReduceArr = Happy_Data_Array.array (6, 587) [ - (6 , happyReduce_6), - (7 , happyReduce_7), - (8 , happyReduce_8), - (9 , happyReduce_9), - (10 , happyReduce_10), - (11 , happyReduce_11), - (12 , happyReduce_12), - (13 , happyReduce_13), - (14 , happyReduce_14), - (15 , happyReduce_15), - (16 , happyReduce_16), - (17 , happyReduce_17), - (18 , happyReduce_18), - (19 , happyReduce_19), - (20 , happyReduce_20), - (21 , happyReduce_21), - (22 , happyReduce_22), - (23 , happyReduce_23), - (24 , happyReduce_24), - (25 , happyReduce_25), - (26 , happyReduce_26), - (27 , happyReduce_27), - (28 , happyReduce_28), - (29 , happyReduce_29), - (30 , happyReduce_30), - (31 , happyReduce_31), - (32 , happyReduce_32), - (33 , happyReduce_33), - (34 , happyReduce_34), - (35 , happyReduce_35), - (36 , happyReduce_36), - (37 , happyReduce_37), - (38 , happyReduce_38), - (39 , happyReduce_39), - (40 , happyReduce_40), - (41 , happyReduce_41), - (42 , happyReduce_42), - (43 , happyReduce_43), - (44 , happyReduce_44), - (45 , happyReduce_45), - (46 , happyReduce_46), - (47 , happyReduce_47), - (48 , happyReduce_48), - (49 , happyReduce_49), - (50 , happyReduce_50), - (51 , happyReduce_51), - (52 , happyReduce_52), - (53 , happyReduce_53), - (54 , happyReduce_54), - (55 , happyReduce_55), - (56 , happyReduce_56), - (57 , happyReduce_57), - (58 , happyReduce_58), - (59 , happyReduce_59), - (60 , happyReduce_60), - (61 , happyReduce_61), - (62 , happyReduce_62), - (63 , happyReduce_63), - (64 , happyReduce_64), - (65 , happyReduce_65), - (66 , happyReduce_66), - (67 , happyReduce_67), - (68 , happyReduce_68), - (69 , happyReduce_69), - (70 , happyReduce_70), - (71 , happyReduce_71), - (72 , happyReduce_72), - (73 , happyReduce_73), - (74 , happyReduce_74), - (75 , happyReduce_75), - (76 , happyReduce_76), - (77 , happyReduce_77), - (78 , happyReduce_78), - (79 , happyReduce_79), - (80 , happyReduce_80), - (81 , happyReduce_81), - (82 , happyReduce_82), - (83 , happyReduce_83), - (84 , happyReduce_84), - (85 , happyReduce_85), - (86 , happyReduce_86), - (87 , happyReduce_87), - (88 , happyReduce_88), - (89 , happyReduce_89), - (90 , happyReduce_90), - (91 , happyReduce_91), - (92 , happyReduce_92), - (93 , happyReduce_93), - (94 , happyReduce_94), - (95 , happyReduce_95), - (96 , happyReduce_96), - (97 , happyReduce_97), - (98 , happyReduce_98), - (99 , happyReduce_99), - (100 , happyReduce_100), - (101 , happyReduce_101), - (102 , happyReduce_102), - (103 , happyReduce_103), - (104 , happyReduce_104), - (105 , happyReduce_105), - (106 , happyReduce_106), - (107 , happyReduce_107), - (108 , happyReduce_108), - (109 , happyReduce_109), - (110 , happyReduce_110), - (111 , happyReduce_111), - (112 , happyReduce_112), - (113 , happyReduce_113), - (114 , happyReduce_114), - (115 , happyReduce_115), - (116 , happyReduce_116), - (117 , happyReduce_117), - (118 , happyReduce_118), - (119 , happyReduce_119), - (120 , happyReduce_120), - (121 , happyReduce_121), - (122 , happyReduce_122), - (123 , happyReduce_123), - (124 , happyReduce_124), - (125 , happyReduce_125), - (126 , happyReduce_126), - (127 , happyReduce_127), - (128 , happyReduce_128), - (129 , happyReduce_129), - (130 , happyReduce_130), - (131 , happyReduce_131), - (132 , happyReduce_132), - (133 , happyReduce_133), - (134 , happyReduce_134), - (135 , happyReduce_135), - (136 , happyReduce_136), - (137 , happyReduce_137), - (138 , happyReduce_138), - (139 , happyReduce_139), - (140 , happyReduce_140), - (141 , happyReduce_141), - (142 , happyReduce_142), - (143 , happyReduce_143), - (144 , happyReduce_144), - (145 , happyReduce_145), - (146 , happyReduce_146), - (147 , happyReduce_147), - (148 , happyReduce_148), - (149 , happyReduce_149), - (150 , happyReduce_150), - (151 , happyReduce_151), - (152 , happyReduce_152), - (153 , happyReduce_153), - (154 , happyReduce_154), - (155 , happyReduce_155), - (156 , happyReduce_156), - (157 , happyReduce_157), - (158 , happyReduce_158), - (159 , happyReduce_159), - (160 , happyReduce_160), - (161 , happyReduce_161), - (162 , happyReduce_162), - (163 , happyReduce_163), - (164 , happyReduce_164), - (165 , happyReduce_165), - (166 , happyReduce_166), - (167 , happyReduce_167), - (168 , happyReduce_168), - (169 , happyReduce_169), - (170 , happyReduce_170), - (171 , happyReduce_171), - (172 , happyReduce_172), - (173 , happyReduce_173), - (174 , happyReduce_174), - (175 , happyReduce_175), - (176 , happyReduce_176), - (177 , happyReduce_177), - (178 , happyReduce_178), - (179 , happyReduce_179), - (180 , happyReduce_180), - (181 , happyReduce_181), - (182 , happyReduce_182), - (183 , happyReduce_183), - (184 , happyReduce_184), - (185 , happyReduce_185), - (186 , happyReduce_186), - (187 , happyReduce_187), - (188 , happyReduce_188), - (189 , happyReduce_189), - (190 , happyReduce_190), - (191 , happyReduce_191), - (192 , happyReduce_192), - (193 , happyReduce_193), - (194 , happyReduce_194), - (195 , happyReduce_195), - (196 , happyReduce_196), - (197 , happyReduce_197), - (198 , happyReduce_198), - (199 , happyReduce_199), - (200 , happyReduce_200), - (201 , happyReduce_201), - (202 , happyReduce_202), - (203 , happyReduce_203), - (204 , happyReduce_204), - (205 , happyReduce_205), - (206 , happyReduce_206), - (207 , happyReduce_207), - (208 , happyReduce_208), - (209 , happyReduce_209), - (210 , happyReduce_210), - (211 , happyReduce_211), - (212 , happyReduce_212), - (213 , happyReduce_213), - (214 , happyReduce_214), - (215 , happyReduce_215), - (216 , happyReduce_216), - (217 , happyReduce_217), - (218 , happyReduce_218), - (219 , happyReduce_219), - (220 , happyReduce_220), - (221 , happyReduce_221), - (222 , happyReduce_222), - (223 , happyReduce_223), - (224 , happyReduce_224), - (225 , happyReduce_225), - (226 , happyReduce_226), - (227 , happyReduce_227), - (228 , happyReduce_228), - (229 , happyReduce_229), - (230 , happyReduce_230), - (231 , happyReduce_231), - (232 , happyReduce_232), - (233 , happyReduce_233), - (234 , happyReduce_234), - (235 , happyReduce_235), - (236 , happyReduce_236), - (237 , happyReduce_237), - (238 , happyReduce_238), - (239 , happyReduce_239), - (240 , happyReduce_240), - (241 , happyReduce_241), - (242 , happyReduce_242), - (243 , happyReduce_243), - (244 , happyReduce_244), - (245 , happyReduce_245), - (246 , happyReduce_246), - (247 , happyReduce_247), - (248 , happyReduce_248), - (249 , happyReduce_249), - (250 , happyReduce_250), - (251 , happyReduce_251), - (252 , happyReduce_252), - (253 , happyReduce_253), - (254 , happyReduce_254), - (255 , happyReduce_255), - (256 , happyReduce_256), - (257 , happyReduce_257), - (258 , happyReduce_258), - (259 , happyReduce_259), - (260 , happyReduce_260), - (261 , happyReduce_261), - (262 , happyReduce_262), - (263 , happyReduce_263), - (264 , happyReduce_264), - (265 , happyReduce_265), - (266 , happyReduce_266), - (267 , happyReduce_267), - (268 , happyReduce_268), - (269 , happyReduce_269), - (270 , happyReduce_270), - (271 , happyReduce_271), - (272 , happyReduce_272), - (273 , happyReduce_273), - (274 , happyReduce_274), - (275 , happyReduce_275), - (276 , happyReduce_276), - (277 , happyReduce_277), - (278 , happyReduce_278), - (279 , happyReduce_279), - (280 , happyReduce_280), - (281 , happyReduce_281), - (282 , happyReduce_282), - (283 , happyReduce_283), - (284 , happyReduce_284), - (285 , happyReduce_285), - (286 , happyReduce_286), - (287 , happyReduce_287), - (288 , happyReduce_288), - (289 , happyReduce_289), - (290 , happyReduce_290), - (291 , happyReduce_291), - (292 , happyReduce_292), - (293 , happyReduce_293), - (294 , happyReduce_294), - (295 , happyReduce_295), - (296 , happyReduce_296), - (297 , happyReduce_297), - (298 , happyReduce_298), - (299 , happyReduce_299), - (300 , happyReduce_300), - (301 , happyReduce_301), - (302 , happyReduce_302), - (303 , happyReduce_303), - (304 , happyReduce_304), - (305 , happyReduce_305), - (306 , happyReduce_306), - (307 , happyReduce_307), - (308 , happyReduce_308), - (309 , happyReduce_309), - (310 , happyReduce_310), - (311 , happyReduce_311), - (312 , happyReduce_312), - (313 , happyReduce_313), - (314 , happyReduce_314), - (315 , happyReduce_315), - (316 , happyReduce_316), - (317 , happyReduce_317), - (318 , happyReduce_318), - (319 , happyReduce_319), - (320 , happyReduce_320), - (321 , happyReduce_321), - (322 , happyReduce_322), - (323 , happyReduce_323), - (324 , happyReduce_324), - (325 , happyReduce_325), - (326 , happyReduce_326), - (327 , happyReduce_327), - (328 , happyReduce_328), - (329 , happyReduce_329), - (330 , happyReduce_330), - (331 , happyReduce_331), - (332 , happyReduce_332), - (333 , happyReduce_333), - (334 , happyReduce_334), - (335 , happyReduce_335), - (336 , happyReduce_336), - (337 , happyReduce_337), - (338 , happyReduce_338), - (339 , happyReduce_339), - (340 , happyReduce_340), - (341 , happyReduce_341), - (342 , happyReduce_342), - (343 , happyReduce_343), - (344 , happyReduce_344), - (345 , happyReduce_345), - (346 , happyReduce_346), - (347 , happyReduce_347), - (348 , happyReduce_348), - (349 , happyReduce_349), - (350 , happyReduce_350), - (351 , happyReduce_351), - (352 , happyReduce_352), - (353 , happyReduce_353), - (354 , happyReduce_354), - (355 , happyReduce_355), - (356 , happyReduce_356), - (357 , happyReduce_357), - (358 , happyReduce_358), - (359 , happyReduce_359), - (360 , happyReduce_360), - (361 , happyReduce_361), - (362 , happyReduce_362), - (363 , happyReduce_363), - (364 , happyReduce_364), - (365 , happyReduce_365), - (366 , happyReduce_366), - (367 , happyReduce_367), - (368 , happyReduce_368), - (369 , happyReduce_369), - (370 , happyReduce_370), - (371 , happyReduce_371), - (372 , happyReduce_372), - (373 , happyReduce_373), - (374 , happyReduce_374), - (375 , happyReduce_375), - (376 , happyReduce_376), - (377 , happyReduce_377), - (378 , happyReduce_378), - (379 , happyReduce_379), - (380 , happyReduce_380), - (381 , happyReduce_381), - (382 , happyReduce_382), - (383 , happyReduce_383), - (384 , happyReduce_384), - (385 , happyReduce_385), - (386 , happyReduce_386), - (387 , happyReduce_387), - (388 , happyReduce_388), - (389 , happyReduce_389), - (390 , happyReduce_390), - (391 , happyReduce_391), - (392 , happyReduce_392), - (393 , happyReduce_393), - (394 , happyReduce_394), - (395 , happyReduce_395), - (396 , happyReduce_396), - (397 , happyReduce_397), - (398 , happyReduce_398), - (399 , happyReduce_399), - (400 , happyReduce_400), - (401 , happyReduce_401), - (402 , happyReduce_402), - (403 , happyReduce_403), - (404 , happyReduce_404), - (405 , happyReduce_405), - (406 , happyReduce_406), - (407 , happyReduce_407), - (408 , happyReduce_408), - (409 , happyReduce_409), - (410 , happyReduce_410), - (411 , happyReduce_411), - (412 , happyReduce_412), - (413 , happyReduce_413), - (414 , happyReduce_414), - (415 , happyReduce_415), - (416 , happyReduce_416), - (417 , happyReduce_417), - (418 , happyReduce_418), - (419 , happyReduce_419), - (420 , happyReduce_420), - (421 , happyReduce_421), - (422 , happyReduce_422), - (423 , happyReduce_423), - (424 , happyReduce_424), - (425 , happyReduce_425), - (426 , happyReduce_426), - (427 , happyReduce_427), - (428 , happyReduce_428), - (429 , happyReduce_429), - (430 , happyReduce_430), - (431 , happyReduce_431), - (432 , happyReduce_432), - (433 , happyReduce_433), - (434 , happyReduce_434), - (435 , happyReduce_435), - (436 , happyReduce_436), - (437 , happyReduce_437), - (438 , happyReduce_438), - (439 , happyReduce_439), - (440 , happyReduce_440), - (441 , happyReduce_441), - (442 , happyReduce_442), - (443 , happyReduce_443), - (444 , happyReduce_444), - (445 , happyReduce_445), - (446 , happyReduce_446), - (447 , happyReduce_447), - (448 , happyReduce_448), - (449 , happyReduce_449), - (450 , happyReduce_450), - (451 , happyReduce_451), - (452 , happyReduce_452), - (453 , happyReduce_453), - (454 , happyReduce_454), - (455 , happyReduce_455), - (456 , happyReduce_456), - (457 , happyReduce_457), - (458 , happyReduce_458), - (459 , happyReduce_459), - (460 , happyReduce_460), - (461 , happyReduce_461), - (462 , happyReduce_462), - (463 , happyReduce_463), - (464 , happyReduce_464), - (465 , happyReduce_465), - (466 , happyReduce_466), - (467 , happyReduce_467), - (468 , happyReduce_468), - (469 , happyReduce_469), - (470 , happyReduce_470), - (471 , happyReduce_471), - (472 , happyReduce_472), - (473 , happyReduce_473), - (474 , happyReduce_474), - (475 , happyReduce_475), - (476 , happyReduce_476), - (477 , happyReduce_477), - (478 , happyReduce_478), - (479 , happyReduce_479), - (480 , happyReduce_480), - (481 , happyReduce_481), - (482 , happyReduce_482), - (483 , happyReduce_483), - (484 , happyReduce_484), - (485 , happyReduce_485), - (486 , happyReduce_486), - (487 , happyReduce_487), - (488 , happyReduce_488), - (489 , happyReduce_489), - (490 , happyReduce_490), - (491 , happyReduce_491), - (492 , happyReduce_492), - (493 , happyReduce_493), - (494 , happyReduce_494), - (495 , happyReduce_495), - (496 , happyReduce_496), - (497 , happyReduce_497), - (498 , happyReduce_498), - (499 , happyReduce_499), - (500 , happyReduce_500), - (501 , happyReduce_501), - (502 , happyReduce_502), - (503 , happyReduce_503), - (504 , happyReduce_504), - (505 , happyReduce_505), - (506 , happyReduce_506), - (507 , happyReduce_507), - (508 , happyReduce_508), - (509 , happyReduce_509), - (510 , happyReduce_510), - (511 , happyReduce_511), - (512 , happyReduce_512), - (513 , happyReduce_513), - (514 , happyReduce_514), - (515 , happyReduce_515), - (516 , happyReduce_516), - (517 , happyReduce_517), - (518 , happyReduce_518), - (519 , happyReduce_519), - (520 , happyReduce_520), - (521 , happyReduce_521), - (522 , happyReduce_522), - (523 , happyReduce_523), - (524 , happyReduce_524), - (525 , happyReduce_525), - (526 , happyReduce_526), - (527 , happyReduce_527), - (528 , happyReduce_528), - (529 , happyReduce_529), - (530 , happyReduce_530), - (531 , happyReduce_531), - (532 , happyReduce_532), - (533 , happyReduce_533), - (534 , happyReduce_534), - (535 , happyReduce_535), - (536 , happyReduce_536), - (537 , happyReduce_537), - (538 , happyReduce_538), - (539 , happyReduce_539), - (540 , happyReduce_540), - (541 , happyReduce_541), - (542 , happyReduce_542), - (543 , happyReduce_543), - (544 , happyReduce_544), - (545 , happyReduce_545), - (546 , happyReduce_546), - (547 , happyReduce_547), - (548 , happyReduce_548), - (549 , happyReduce_549), - (550 , happyReduce_550), - (551 , happyReduce_551), - (552 , happyReduce_552), - (553 , happyReduce_553), - (554 , happyReduce_554), - (555 , happyReduce_555), - (556 , happyReduce_556), - (557 , happyReduce_557), - (558 , happyReduce_558), - (559 , happyReduce_559), - (560 , happyReduce_560), - (561 , happyReduce_561), - (562 , happyReduce_562), - (563 , happyReduce_563), - (564 , happyReduce_564), - (565 , happyReduce_565), - (566 , happyReduce_566), - (567 , happyReduce_567), - (568 , happyReduce_568), - (569 , happyReduce_569), - (570 , happyReduce_570), - (571 , happyReduce_571), - (572 , happyReduce_572), - (573 , happyReduce_573), - (574 , happyReduce_574), - (575 , happyReduce_575), - (576 , happyReduce_576), - (577 , happyReduce_577), - (578 , happyReduce_578), - (579 , happyReduce_579), - (580 , happyReduce_580), - (581 , happyReduce_581), - (582 , happyReduce_582), - (583 , happyReduce_583), - (584 , happyReduce_584), - (585 , happyReduce_585), - (586 , happyReduce_586), - (587 , happyReduce_587) - ] - -happy_n_terms = 134 :: Int -happy_n_nonterms = 216 :: Int - -happyReduce_6 = happyMonadReduce 2# 0# happyReduction_6 -happyReduction_6 (happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut10 happy_x_2 of { happy_var_2 -> - ( checkPageModule happy_var_2 happy_var_1)}} - ) (\r -> happyReturn (happyIn9 r)) - -happyReduce_7 = happyMonadReduce 5# 0# happyReduction_7 -happyReduction_7 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 XCodeTagOpen) -> - case happyOut15 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 XCodeTagClose) -> - case happyOut10 happy_x_5 of { happy_var_5 -> - ( let (os,ss,l) = happy_var_1 in checkHybridModule happy_var_5 (happy_var_3 os ss l) happy_var_2 happy_var_4)}}}}} - ) (\r -> happyReturn (happyIn9 r)) - -happyReduce_8 = happySpecReduce_2 0# happyReduction_8 -happyReduction_8 happy_x_2 - happy_x_1 - = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut15 happy_x_2 of { happy_var_2 -> - happyIn9 - (let (os,ss,l) = happy_var_1 in happy_var_2 os ss l - )}} - -happyReduce_9 = happyMonadReduce 9# 1# happyReduction_9 -happyReduction_9 (happy_x_9 `HappyStk` - happy_x_8 `HappyStk` - happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> - case happyOut156 happy_x_2 of { happy_var_2 -> - case happyOut159 happy_x_3 of { happy_var_3 -> - case happyOut161 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 XStdTagClose) -> - case happyOut154 happy_x_6 of { happy_var_6 -> - case happyOutTok happy_x_7 of { (Loc happy_var_7 XCloseTagOpen) -> - case happyOut156 happy_x_8 of { happy_var_8 -> - case happyOutTok happy_x_9 of { (Loc happy_var_9 XStdTagClose) -> - ( do { n <- checkEqNames happy_var_2 happy_var_8; - let { cn = reverse happy_var_6; - as = reverse happy_var_3; }; - return $ XTag (happy_var_1 <^^> happy_var_9 <** [happy_var_1,happy_var_5,happy_var_7,happy_var_9]) n as happy_var_4 cn })}}}}}}}}} - ) (\r -> happyReturn (happyIn10 r)) - -happyReduce_10 = happyReduce 5# 1# happyReduction_10 -happyReduction_10 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> - case happyOut156 happy_x_2 of { happy_var_2 -> - case happyOut159 happy_x_3 of { happy_var_3 -> - case happyOut161 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 XEmptyTagClose) -> - happyIn10 - (XETag (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_5]) happy_var_2 (reverse happy_var_3) happy_var_4 - ) `HappyStk` happyRest}}}}} - -happyReduce_11 = happySpecReduce_3 2# happyReduction_11 -happyReduction_11 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut217 happy_x_1 of { happy_var_1 -> - case happyOut12 happy_x_2 of { happy_var_2 -> - case happyOut218 happy_x_3 of { happy_var_3 -> - happyIn11 - (let (os,ss,ml) = happy_var_2 in (os,happy_var_1:ss++[happy_var_3],happy_var_1 <^^> happy_var_3) - )}}} - -happyReduce_12 = happySpecReduce_3 3# happyReduction_12 -happyReduction_12 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut13 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> - case happyOut12 happy_x_3 of { happy_var_3 -> - happyIn12 - (let (os,ss,ml) = happy_var_3 in (happy_var_1 : os, happy_var_2 : ss, Just $ ann happy_var_1 <++> nIS happy_var_2 <+?> ml) - )}}} - -happyReduce_13 = happySpecReduce_0 3# happyReduction_13 -happyReduction_13 = happyIn12 - (([],[],Nothing) - ) - -happyReduce_14 = happyReduce 4# 4# happyReduction_14 -happyReduction_14 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LANGUAGE) -> - case happyOut14 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> - happyIn13 - (LanguagePragma (happy_var_1 <^^> happy_var_4 <** (happy_var_1:snd happy_var_2 ++ reverse happy_var_3 ++ [happy_var_4])) (fst happy_var_2) - ) `HappyStk` happyRest}}}} - -happyReduce_15 = happySpecReduce_3 4# happyReduction_15 -happyReduction_15 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut21 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn13 - (let Loc l (INCLUDE s) = happy_var_1 in IncludePragma (l <^^> happy_var_3 <** (l:reverse happy_var_2 ++ [happy_var_3])) s - )}}} - -happyReduce_16 = happySpecReduce_3 4# happyReduction_16 -happyReduction_16 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut21 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn13 - (let Loc l (OPTIONS (mc, s)) = happy_var_1 - in OptionsPragma (l <^^> happy_var_3 <** (l:reverse happy_var_2 ++ [happy_var_3])) (readTool mc) s - )}}} - -happyReduce_17 = happySpecReduce_3 4# happyReduction_17 -happyReduction_17 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut21 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn13 - (let Loc l (CFILES s) = happy_var_1 - in CFilesPragma (l <^^> happy_var_3 <** (l:reverse happy_var_2 ++ [happy_var_3])) s - )}}} - -happyReduce_18 = happySpecReduce_3 5# happyReduction_18 -happyReduction_18 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut208 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut14 happy_x_3 of { happy_var_3 -> - happyIn14 - ((happy_var_1 : fst happy_var_3, happy_var_2 : snd happy_var_3) - )}}} - -happyReduce_19 = happySpecReduce_1 5# happyReduction_19 -happyReduction_19 happy_x_1 - = case happyOut208 happy_x_1 of { happy_var_1 -> - happyIn14 - (([happy_var_1],[]) - )} - -happyReduce_20 = happySpecReduce_2 6# happyReduction_20 -happyReduction_20 happy_x_2 - happy_x_1 - = case happyOut16 happy_x_1 of { happy_var_1 -> - case happyOut18 happy_x_2 of { happy_var_2 -> - happyIn15 - (let (is,ds,ss1,inf) = happy_var_2 - in \os ss l -> Module (l <++> inf <** (ss ++ ss1)) happy_var_1 os is ds - )}} - -happyReduce_21 = happyReduce 5# 7# happyReduction_21 -happyReduction_21 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Module) -> - case happyOut219 happy_x_2 of { happy_var_2 -> - case happyOut17 happy_x_3 of { happy_var_3 -> - case happyOut22 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 KW_Where) -> - happyIn16 - (Just $ ModuleHead (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_5]) happy_var_2 happy_var_3 happy_var_4 - ) `HappyStk` happyRest}}}}} - -happyReduce_22 = happySpecReduce_0 7# happyReduction_22 -happyReduction_22 = happyIn16 - (Nothing - ) - -happyReduce_23 = happySpecReduce_3 8# happyReduction_23 -happyReduction_23 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 DEPRECATED) -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn17 - (let Loc l (StringTok (s,_)) = happy_var_2 in Just $ DeprText (happy_var_1 <^^> happy_var_3 <** [happy_var_1,l,happy_var_3]) s - )}}} - -happyReduce_24 = happySpecReduce_3 8# happyReduction_24 -happyReduction_24 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 WARNING) -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn17 - (let Loc l (StringTok (s,_)) = happy_var_2 in Just $ WarnText (happy_var_1 <^^> happy_var_3 <** [happy_var_1,l,happy_var_3]) s - )}}} - -happyReduce_25 = happySpecReduce_0 8# happyReduction_25 -happyReduction_25 = happyIn17 - (Nothing - ) - -happyReduce_26 = happySpecReduce_3 9# happyReduction_26 -happyReduction_26 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> - case happyOut19 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> - happyIn18 - (let (is,ds,ss) = happy_var_2 in (is,ds,happy_var_1:ss ++ [happy_var_3], happy_var_1 <^^> happy_var_3) - )}}} - -happyReduce_27 = happySpecReduce_3 9# happyReduction_27 -happyReduction_27 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut217 happy_x_1 of { happy_var_1 -> - case happyOut19 happy_x_2 of { happy_var_2 -> - case happyOut218 happy_x_3 of { happy_var_3 -> - happyIn18 - (let (is,ds,ss) = happy_var_2 in (is,ds,happy_var_1:ss ++ [happy_var_3], happy_var_1 <^^> happy_var_3) - )}}} - -happyReduce_28 = happyReduce 4# 10# happyReduction_28 -happyReduction_28 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut27 happy_x_2 of { happy_var_2 -> - case happyOut20 happy_x_3 of { happy_var_3 -> - case happyOut44 happy_x_4 of { happy_var_4 -> - happyIn19 - ((reverse (fst happy_var_2), fst happy_var_4, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3 ++ snd happy_var_4) - ) `HappyStk` happyRest}}}} - -happyReduce_29 = happySpecReduce_2 10# happyReduction_29 -happyReduction_29 happy_x_2 - happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut44 happy_x_2 of { happy_var_2 -> - happyIn19 - (([], fst happy_var_2, reverse happy_var_1 ++ snd happy_var_2) - )}} - -happyReduce_30 = happySpecReduce_3 10# happyReduction_30 -happyReduction_30 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut27 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - happyIn19 - ((reverse (fst happy_var_2), [], reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3) - )}}} - -happyReduce_31 = happySpecReduce_1 10# happyReduction_31 -happyReduction_31 happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn19 - (([], [], reverse happy_var_1) - )} - -happyReduce_32 = happySpecReduce_2 11# happyReduction_32 -happyReduction_32 happy_x_2 - happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> - happyIn20 - (happy_var_2 : happy_var_1 - )}} - -happyReduce_33 = happySpecReduce_1 12# happyReduction_33 -happyReduction_33 happy_x_1 - = case happyOut20 happy_x_1 of { happy_var_1 -> - happyIn21 - (happy_var_1 - )} - -happyReduce_34 = happySpecReduce_0 12# happyReduction_34 -happyReduction_34 = happyIn21 - ([] - ) - -happyReduce_35 = happySpecReduce_1 13# happyReduction_35 -happyReduction_35 happy_x_1 - = case happyOut23 happy_x_1 of { happy_var_1 -> - happyIn22 - (Just happy_var_1 - )} - -happyReduce_36 = happySpecReduce_0 13# happyReduction_36 -happyReduction_36 = happyIn22 - (Nothing - ) - -happyReduce_37 = happyReduce 4# 14# happyReduction_37 -happyReduction_37 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut25 happy_x_2 of { happy_var_2 -> - case happyOut24 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn23 - (ExportSpecList (happy_var_1 <^^> happy_var_4 <** (happy_var_1:reverse (snd happy_var_2) ++ happy_var_3 ++ [happy_var_4])) (reverse (fst happy_var_2)) - ) `HappyStk` happyRest}}}} - -happyReduce_38 = happySpecReduce_3 14# happyReduction_38 -happyReduction_38 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut24 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn23 - (ExportSpecList (happy_var_1 <^^> happy_var_3 <** (happy_var_1:happy_var_2++[happy_var_3])) [] - )}}} - -happyReduce_39 = happySpecReduce_1 15# happyReduction_39 -happyReduction_39 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Comma) -> - happyIn24 - ([happy_var_1] - )} - -happyReduce_40 = happySpecReduce_0 15# happyReduction_40 -happyReduction_40 = happyIn24 - ([ ] - ) - -happyReduce_41 = happySpecReduce_3 16# happyReduction_41 -happyReduction_41 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut25 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut26 happy_x_3 of { happy_var_3 -> - happyIn25 - ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) - )}}} - -happyReduce_42 = happySpecReduce_1 16# happyReduction_42 -happyReduction_42 happy_x_1 - = case happyOut26 happy_x_1 of { happy_var_1 -> - happyIn25 - (([happy_var_1],[]) - )} - -happyReduce_43 = happySpecReduce_1 17# happyReduction_43 -happyReduction_43 happy_x_1 - = case happyOut190 happy_x_1 of { happy_var_1 -> - happyIn26 - (EVar (ann happy_var_1) happy_var_1 - )} - -happyReduce_44 = happySpecReduce_1 17# happyReduction_44 -happyReduction_44 happy_x_1 - = case happyOut221 happy_x_1 of { happy_var_1 -> - happyIn26 - (EAbs (ann happy_var_1) happy_var_1 - )} - -happyReduce_45 = happyReduce 4# 17# happyReduction_45 -happyReduction_45 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut221 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 DotDot) -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn26 - (EThingAll (ann happy_var_1 <++> nIS happy_var_4 <** [happy_var_2,happy_var_3,happy_var_4]) happy_var_1 - ) `HappyStk` happyRest}}}} - -happyReduce_46 = happySpecReduce_3 17# happyReduction_46 -happyReduction_46 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut221 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn26 - (EThingWith (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]) happy_var_1 [] - )}}} - -happyReduce_47 = happyReduce 4# 17# happyReduction_47 -happyReduction_47 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut221 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOut38 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn26 - (EThingWith (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])) happy_var_1 (reverse (fst happy_var_3)) - ) `HappyStk` happyRest}}}} - -happyReduce_48 = happySpecReduce_2 17# happyReduction_48 -happyReduction_48 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Module) -> - case happyOut219 happy_x_2 of { happy_var_2 -> - happyIn26 - (EModuleContents (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_49 = happySpecReduce_3 18# happyReduction_49 -happyReduction_49 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut27 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut28 happy_x_3 of { happy_var_3 -> - happyIn27 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) - )}}} - -happyReduce_50 = happySpecReduce_1 18# happyReduction_50 -happyReduction_50 happy_x_1 - = case happyOut28 happy_x_1 of { happy_var_1 -> - happyIn27 - (([happy_var_1],[]) - )} - -happyReduce_51 = happyReduce 7# 19# happyReduction_51 -happyReduction_51 (happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Import) -> - case happyOut29 happy_x_2 of { happy_var_2 -> - case happyOut30 happy_x_3 of { happy_var_3 -> - case happyOut31 happy_x_4 of { happy_var_4 -> - case happyOut219 happy_x_5 of { happy_var_5 -> - case happyOut32 happy_x_6 of { happy_var_6 -> - case happyOut33 happy_x_7 of { happy_var_7 -> - happyIn28 - (let { (mmn,ss,ml) = happy_var_6 ; - l = nIS happy_var_1 <++> ann happy_var_5 <+?> ml <+?> (fmap ann) happy_var_7 <** (happy_var_1:snd happy_var_2 ++ snd happy_var_3 ++ snd happy_var_4 ++ ss)} - in ImportDecl l happy_var_5 (fst happy_var_3) (fst happy_var_2) (fst happy_var_4) mmn happy_var_7 - ) `HappyStk` happyRest}}}}}}} - -happyReduce_52 = happySpecReduce_2 20# happyReduction_52 -happyReduction_52 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 SOURCE) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> - happyIn29 - ((True,[happy_var_1,happy_var_2]) - )}} - -happyReduce_53 = happySpecReduce_0 20# happyReduction_53 -happyReduction_53 = happyIn29 - ((False,[]) - ) - -happyReduce_54 = happySpecReduce_1 21# happyReduction_54 -happyReduction_54 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Qualified) -> - happyIn30 - ((True,[happy_var_1]) - )} - -happyReduce_55 = happySpecReduce_0 21# happyReduction_55 -happyReduction_55 = happyIn30 - ((False, []) - ) - -happyReduce_56 = happyMonadReduce 1# 22# happyReduction_56 -happyReduction_56 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> - ( do { checkEnabled PackageImports ; - let { Loc l (StringTok (s,_)) = happy_var_1 } ; - return $ (Just s,[l]) })} - ) (\r -> happyReturn (happyIn31 r)) - -happyReduce_57 = happySpecReduce_0 22# happyReduction_57 -happyReduction_57 = happyIn31 - ((Nothing,[]) - ) - -happyReduce_58 = happySpecReduce_2 23# happyReduction_58 -happyReduction_58 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_As) -> - case happyOut219 happy_x_2 of { happy_var_2 -> - happyIn32 - ((Just happy_var_2,[happy_var_1],Just (nIS happy_var_1 <++> ann happy_var_2)) - )}} - -happyReduce_59 = happySpecReduce_0 23# happyReduction_59 -happyReduction_59 = happyIn32 - ((Nothing,[],Nothing) - ) - -happyReduce_60 = happySpecReduce_1 24# happyReduction_60 -happyReduction_60 happy_x_1 - = case happyOut34 happy_x_1 of { happy_var_1 -> - happyIn33 - (Just happy_var_1 - )} - -happyReduce_61 = happySpecReduce_0 24# happyReduction_61 -happyReduction_61 = happyIn33 - (Nothing - ) - -happyReduce_62 = happyReduce 5# 25# happyReduction_62 -happyReduction_62 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut35 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOut36 happy_x_3 of { happy_var_3 -> - case happyOut24 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> - happyIn34 - (let {(b,ml,s) = happy_var_1 ; - l = (ml <?+> (happy_var_2 <^^> happy_var_5)) <** (s ++ happy_var_2:reverse (snd happy_var_3) ++ happy_var_4 ++ [happy_var_5])} - in ImportSpecList l b (reverse (fst happy_var_3)) - ) `HappyStk` happyRest}}}}} - -happyReduce_63 = happyReduce 4# 25# happyReduction_63 -happyReduction_63 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut35 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOut24 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn34 - (let {(b,ml,s) = happy_var_1 ; l = (ml <?+> (happy_var_2 <^^> happy_var_4)) <** (s ++ happy_var_2:happy_var_3 ++ [happy_var_4])} - in ImportSpecList l b [] - ) `HappyStk` happyRest}}}} - -happyReduce_64 = happySpecReduce_1 26# happyReduction_64 -happyReduction_64 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Hiding) -> - happyIn35 - ((True,Just (nIS happy_var_1),[happy_var_1]) - )} - -happyReduce_65 = happySpecReduce_0 26# happyReduction_65 -happyReduction_65 = happyIn35 - ((False,Nothing,[]) - ) - -happyReduce_66 = happySpecReduce_3 27# happyReduction_66 -happyReduction_66 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut36 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut37 happy_x_3 of { happy_var_3 -> - happyIn36 - ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) - )}}} - -happyReduce_67 = happySpecReduce_1 27# happyReduction_67 -happyReduction_67 happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - happyIn36 - (([happy_var_1],[]) - )} - -happyReduce_68 = happySpecReduce_1 28# happyReduction_68 -happyReduction_68 happy_x_1 - = case happyOut188 happy_x_1 of { happy_var_1 -> - happyIn37 - (IVar (ann happy_var_1) happy_var_1 - )} - -happyReduce_69 = happySpecReduce_1 28# happyReduction_69 -happyReduction_69 happy_x_1 - = case happyOut220 happy_x_1 of { happy_var_1 -> - happyIn37 - (IAbs (ann happy_var_1) happy_var_1 - )} - -happyReduce_70 = happyReduce 4# 28# happyReduction_70 -happyReduction_70 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut220 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 DotDot) -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn37 - (IThingAll (ann happy_var_1 <++> nIS happy_var_4 <** [happy_var_2,happy_var_3,happy_var_4]) happy_var_1 - ) `HappyStk` happyRest}}}} - -happyReduce_71 = happySpecReduce_3 28# happyReduction_71 -happyReduction_71 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut220 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn37 - (IThingWith (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]) happy_var_1 [] - )}}} - -happyReduce_72 = happyReduce 4# 28# happyReduction_72 -happyReduction_72 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut220 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOut38 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn37 - (IThingWith (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])) happy_var_1 (reverse (fst happy_var_3)) - ) `HappyStk` happyRest}}}} - -happyReduce_73 = happySpecReduce_3 29# happyReduction_73 -happyReduction_73 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) - )}}} - -happyReduce_74 = happySpecReduce_1 29# happyReduction_74 -happyReduction_74 happy_x_1 - = case happyOut39 happy_x_1 of { happy_var_1 -> - happyIn38 - (([happy_var_1],[]) - )} - -happyReduce_75 = happySpecReduce_1 30# happyReduction_75 -happyReduction_75 happy_x_1 - = case happyOut188 happy_x_1 of { happy_var_1 -> - happyIn39 - (VarName (ann happy_var_1) happy_var_1 - )} - -happyReduce_76 = happySpecReduce_1 30# happyReduction_76 -happyReduction_76 happy_x_1 - = case happyOut192 happy_x_1 of { happy_var_1 -> - happyIn39 - (ConName (ann happy_var_1) happy_var_1 - )} - -happyReduce_77 = happySpecReduce_3 31# happyReduction_77 -happyReduction_77 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut42 happy_x_1 of { happy_var_1 -> - case happyOut41 happy_x_2 of { happy_var_2 -> - case happyOut43 happy_x_3 of { happy_var_3 -> - happyIn40 - (let (ops,ss,l) = happy_var_3 - in InfixDecl (ann happy_var_1 <++> l <** (snd happy_var_2 ++ reverse ss)) happy_var_1 (fst happy_var_2) (reverse ops) - )}}} - -happyReduce_78 = happySpecReduce_0 32# happyReduction_78 -happyReduction_78 = happyIn41 - ((Nothing, []) - ) - -happyReduce_79 = happyMonadReduce 1# 32# happyReduction_79 -happyReduction_79 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> - ( let Loc l (IntTok (i,_)) = happy_var_1 in checkPrec i >>= \i -> return (Just i, [l]))} - ) (\r -> happyReturn (happyIn41 r)) - -happyReduce_80 = happySpecReduce_1 33# happyReduction_80 -happyReduction_80 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Infix) -> - happyIn42 - (AssocNone $ nIS happy_var_1 - )} - -happyReduce_81 = happySpecReduce_1 33# happyReduction_81 -happyReduction_81 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixL) -> - happyIn42 - (AssocLeft $ nIS happy_var_1 - )} - -happyReduce_82 = happySpecReduce_1 33# happyReduction_82 -happyReduction_82 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixR) -> - happyIn42 - (AssocRight $ nIS happy_var_1 - )} - -happyReduce_83 = happySpecReduce_3 34# happyReduction_83 -happyReduction_83 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut43 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut199 happy_x_3 of { happy_var_3 -> - happyIn43 - (let (ops,ss,l) = happy_var_1 in (happy_var_3 : ops, happy_var_2 : ss, l <++> ann happy_var_3) - )}}} - -happyReduce_84 = happySpecReduce_1 34# happyReduction_84 -happyReduction_84 happy_x_1 - = case happyOut199 happy_x_1 of { happy_var_1 -> - happyIn43 - (([happy_var_1],[],ann happy_var_1) - )} - -happyReduce_85 = happyMonadReduce 2# 35# happyReduction_85 -happyReduction_85 (happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut45 happy_x_1 of { happy_var_1 -> - case happyOut21 happy_x_2 of { happy_var_2 -> - ( checkRevDecls (fst happy_var_1) >>= \ds -> return (ds, snd happy_var_1 ++ reverse happy_var_2))}} - ) (\r -> happyReturn (happyIn44 r)) - -happyReduce_86 = happySpecReduce_3 36# happyReduction_86 -happyReduction_86 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut45 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut46 happy_x_3 of { happy_var_3 -> - happyIn45 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) - )}}} - -happyReduce_87 = happySpecReduce_1 36# happyReduction_87 -happyReduction_87 happy_x_1 - = case happyOut46 happy_x_1 of { happy_var_1 -> - happyIn45 - (([happy_var_1],[]) - )} - -happyReduce_88 = happyMonadReduce 4# 37# happyReduction_88 -happyReduction_88 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> - case happyOut72 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> - case happyOut82 happy_x_4 of { happy_var_4 -> - ( do { dh <- checkSimpleType happy_var_2; - let {l = nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]}; - return (TypeDecl l dh happy_var_4) })}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_89 = happyMonadReduce 4# 37# happyReduction_89 -happyReduction_89 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Family) -> - case happyOut74 happy_x_3 of { happy_var_3 -> - case happyOut116 happy_x_4 of { happy_var_4 -> - ( do { dh <- checkSimpleType happy_var_3; - let {l = nIS happy_var_1 <++> ann happy_var_3 <+?> (fmap ann) (fst happy_var_4) <** (happy_var_1:happy_var_2:snd happy_var_4)}; - return (TypeFamDecl l dh (fst happy_var_4)) })}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_90 = happyMonadReduce 5# 37# happyReduction_90 -happyReduction_90 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> - case happyOut71 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 Equals) -> - case happyOut82 happy_x_5 of { happy_var_5 -> - ( do { -- no checkSimpleType happy_var_4 since dtype may contain type patterns - checkEnabled TypeFamilies ; - let {l = nIS happy_var_1 <++> ann happy_var_5 <** [happy_var_1,happy_var_2,happy_var_4]}; - return (TypeInsDecl l happy_var_3 happy_var_5) })}}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_91 = happyMonadReduce 4# 37# happyReduction_91 -happyReduction_91 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut83 happy_x_2 of { happy_var_2 -> - case happyOut98 happy_x_3 of { happy_var_3 -> - case happyOut110 happy_x_4 of { happy_var_4 -> - ( do { (cs,dh) <- checkDataHeader happy_var_2; - let { (qds,ss,minf) = happy_var_3; - l = happy_var_1 <> happy_var_2 <+?> minf <+?> fmap ann happy_var_4 <** ss}; - checkDataOrNew happy_var_1 qds; - return (DataDecl l happy_var_1 cs dh (reverse qds) happy_var_4) })}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_92 = happyMonadReduce 5# 37# happyReduction_92 -happyReduction_92 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut83 happy_x_2 of { happy_var_2 -> - case happyOut116 happy_x_3 of { happy_var_3 -> - case happyOut94 happy_x_4 of { happy_var_4 -> - case happyOut110 happy_x_5 of { happy_var_5 -> - ( do { (cs,dh) <- checkDataHeader happy_var_2; - let { (gs,ss,minf) = happy_var_4; - l = ann happy_var_1 <+?> minf <+?> fmap ann happy_var_5 <** (snd happy_var_3 ++ ss)}; - checkDataOrNew happy_var_1 gs; - return (GDataDecl l happy_var_1 cs dh (fst happy_var_3) (reverse gs) happy_var_5) })}}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_93 = happyMonadReduce 4# 37# happyReduction_93 -happyReduction_93 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Family) -> - case happyOut83 happy_x_3 of { happy_var_3 -> - case happyOut116 happy_x_4 of { happy_var_4 -> - ( do { (cs,dh) <- checkDataHeader happy_var_3; - let {l = nIS happy_var_1 <++> ann happy_var_3 <+?> (fmap ann) (fst happy_var_4) <** (happy_var_1:happy_var_2:snd happy_var_4)}; - return (DataFamDecl l cs dh (fst happy_var_4)) })}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_94 = happyMonadReduce 5# 37# happyReduction_94 -happyReduction_94 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> - case happyOut82 happy_x_3 of { happy_var_3 -> - case happyOut98 happy_x_4 of { happy_var_4 -> - case happyOut110 happy_x_5 of { happy_var_5 -> - ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; - checkEnabled TypeFamilies ; - let { (qds,ss,minf) = happy_var_4 ; - l = happy_var_1 <> happy_var_3 <+?> minf <+?> fmap ann happy_var_5 <** happy_var_2:ss }; - checkDataOrNew happy_var_1 qds; - return (DataInsDecl l happy_var_1 happy_var_3 (reverse qds) happy_var_5) })}}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_95 = happyMonadReduce 6# 37# happyReduction_95 -happyReduction_95 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> - case happyOut82 happy_x_3 of { happy_var_3 -> - case happyOut116 happy_x_4 of { happy_var_4 -> - case happyOut94 happy_x_5 of { happy_var_5 -> - case happyOut110 happy_x_6 of { happy_var_6 -> - ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; - checkEnabled TypeFamilies ; - let {(gs,ss,minf) = happy_var_5; - l = ann happy_var_1 <+?> minf <+?> fmap ann happy_var_6 <** (happy_var_2:snd happy_var_4 ++ ss)}; - checkDataOrNew happy_var_1 gs; - return (GDataInsDecl l happy_var_1 happy_var_3 (fst happy_var_4) (reverse gs) happy_var_6) })}}}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_96 = happyMonadReduce 4# 37# happyReduction_96 -happyReduction_96 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Class) -> - case happyOut83 happy_x_2 of { happy_var_2 -> - case happyOut91 happy_x_3 of { happy_var_3 -> - case happyOut117 happy_x_4 of { happy_var_4 -> - ( do { (cs,dh) <- checkClassHeader happy_var_2; - let {(fds,ss1,minf1) = happy_var_3;(mcs,ss2,minf2) = happy_var_4} ; - let { l = nIS happy_var_1 <++> ann happy_var_2 <+?> minf1 <+?> minf2 <** (happy_var_1:ss1 ++ ss2)} ; - return (ClassDecl l cs dh fds mcs) })}}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_97 = happyMonadReduce 3# 37# happyReduction_97 -happyReduction_97 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Instance) -> - case happyOut83 happy_x_2 of { happy_var_2 -> - case happyOut122 happy_x_3 of { happy_var_3 -> - ( do { (cs,ih) <- checkInstHeader happy_var_2; - let {(mis,ss,minf) = happy_var_3}; - return (InstDecl (nIS happy_var_1 <++> ann happy_var_2 <+?> minf <** (happy_var_1:ss)) cs ih mis) })}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_98 = happyMonadReduce 3# 37# happyReduction_98 -happyReduction_98 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> - case happyOut83 happy_x_3 of { happy_var_3 -> - ( do { checkEnabled StandaloneDeriving ; - (cs, ih) <- checkInstHeader happy_var_3; - let {l = nIS happy_var_1 <++> ann happy_var_3 <** [happy_var_1,happy_var_2]}; - return (DerivDecl l cs ih) })}}} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_99 = happyReduce 4# 37# happyReduction_99 -happyReduction_99 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Default) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOut48 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn46 - (DefaultDecl (happy_var_1 <^^> happy_var_4 <** (happy_var_1:happy_var_2 : snd happy_var_3 ++ [happy_var_4])) (fst happy_var_3) - ) `HappyStk` happyRest}}}} - -happyReduce_100 = happyMonadReduce 1# 37# happyReduction_100 -happyReduction_100 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut136 happy_x_1 of { happy_var_1 -> - ( checkEnabled TemplateHaskell >> checkExpr happy_var_1 >>= \e -> return (SpliceDecl (ann e) e))} - ) (\r -> happyReturn (happyIn46 r)) - -happyReduce_101 = happyReduce 5# 37# happyReduction_101 -happyReduction_101 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Foreign) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Import) -> - case happyOut58 happy_x_3 of { happy_var_3 -> - case happyOut59 happy_x_4 of { happy_var_4 -> - case happyOut60 happy_x_5 of { happy_var_5 -> - happyIn46 - (let (s,n,t,ss) = happy_var_5 in ForImp (nIS happy_var_1 <++> ann t <** (happy_var_1:happy_var_2:ss)) happy_var_3 happy_var_4 s n t - ) `HappyStk` happyRest}}}}} - -happyReduce_102 = happyReduce 4# 37# happyReduction_102 -happyReduction_102 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Foreign) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Export) -> - case happyOut58 happy_x_3 of { happy_var_3 -> - case happyOut60 happy_x_4 of { happy_var_4 -> - happyIn46 - (let (s,n,t,ss) = happy_var_4 in ForExp (nIS happy_var_1 <++> ann t <** (happy_var_1:happy_var_2:ss)) happy_var_3 s n t - ) `HappyStk` happyRest}}}} - -happyReduce_103 = happySpecReduce_3 37# happyReduction_103 -happyReduction_103 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 RULES) -> - case happyOut61 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn46 - (RulePragmaDecl (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ reverse happy_var_2 - )}}} - -happyReduce_104 = happySpecReduce_3 37# happyReduction_104 -happyReduction_104 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 DEPRECATED) -> - case happyOut67 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn46 - (DeprPragmaDecl (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3])) $ reverse (fst happy_var_2) - )}}} - -happyReduce_105 = happySpecReduce_3 37# happyReduction_105 -happyReduction_105 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 WARNING) -> - case happyOut67 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - happyIn46 - (WarnPragmaDecl (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3])) $ reverse (fst happy_var_2) - )}}} - -happyReduce_106 = happySpecReduce_1 37# happyReduction_106 -happyReduction_106 happy_x_1 - = case happyOut51 happy_x_1 of { happy_var_1 -> - happyIn46 - (happy_var_1 - )} - -happyReduce_107 = happySpecReduce_1 38# happyReduction_107 -happyReduction_107 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> - happyIn47 - (DataType $ nIS happy_var_1 - )} - -happyReduce_108 = happySpecReduce_1 38# happyReduction_108 -happyReduction_108 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_NewType) -> - happyIn47 - (NewType $ nIS happy_var_1 - )} - -happyReduce_109 = happyMonadReduce 1# 39# happyReduction_109 -happyReduction_109 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut85 happy_x_1 of { happy_var_1 -> - ( do { ts <- mapM checkType (fst happy_var_1); - return $ (reverse ts, reverse (snd happy_var_1)) })} - ) (\r -> happyReturn (happyIn48 r)) - -happyReduce_110 = happySpecReduce_1 39# happyReduction_110 -happyReduction_110 happy_x_1 - = case happyOut73 happy_x_1 of { happy_var_1 -> - happyIn48 - (([happy_var_1],[]) - )} - -happyReduce_111 = happySpecReduce_0 39# happyReduction_111 -happyReduction_111 = happyIn48 - (([],[]) - ) - -happyReduce_112 = happyMonadReduce 3# 40# happyReduction_112 -happyReduction_112 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - ( checkRevDecls (fst happy_var_2) >>= \ds -> return (ds, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3))}}} - ) (\r -> happyReturn (happyIn49 r)) - -happyReduce_113 = happySpecReduce_1 40# happyReduction_113 -happyReduction_113 happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn49 - (([],reverse happy_var_1) - )} - -happyReduce_114 = happySpecReduce_3 41# happyReduction_114 -happyReduction_114 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut50 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - happyIn50 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) - )}}} - -happyReduce_115 = happySpecReduce_1 41# happyReduction_115 -happyReduction_115 happy_x_1 - = case happyOut51 happy_x_1 of { happy_var_1 -> - happyIn50 - (([happy_var_1],[]) - )} - -happyReduce_116 = happySpecReduce_1 42# happyReduction_116 -happyReduction_116 happy_x_1 - = case happyOut53 happy_x_1 of { happy_var_1 -> - happyIn51 - (happy_var_1 - )} - -happyReduce_117 = happySpecReduce_1 42# happyReduction_117 -happyReduction_117 happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - happyIn51 - (happy_var_1 - )} - -happyReduce_118 = happySpecReduce_1 42# happyReduction_118 -happyReduction_118 happy_x_1 - = case happyOut128 happy_x_1 of { happy_var_1 -> - happyIn51 - (happy_var_1 - )} - -happyReduce_119 = happySpecReduce_3 43# happyReduction_119 -happyReduction_119 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> - case happyOut49 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> - happyIn52 - (BDecls (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3])) (fst happy_var_2) - )}}} - -happyReduce_120 = happySpecReduce_3 43# happyReduction_120 -happyReduction_120 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut217 happy_x_1 of { happy_var_1 -> - case happyOut49 happy_x_2 of { happy_var_2 -> - case happyOut218 happy_x_3 of { happy_var_3 -> - happyIn52 - (BDecls (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3])) (fst happy_var_2) - )}}} - -happyReduce_121 = happyMonadReduce 3# 44# happyReduction_121 -happyReduction_121 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> - case happyOut82 happy_x_3 of { happy_var_3 -> - ( do { v <- checkSigVar happy_var_1; - return $ TypeSig (happy_var_1 <> happy_var_3 <** [happy_var_2]) [v] happy_var_3 })}}} - ) (\r -> happyReturn (happyIn53 r)) - -happyReduce_122 = happyMonadReduce 5# 44# happyReduction_122 -happyReduction_122 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut57 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 DoubleColon) -> - case happyOut82 happy_x_5 of { happy_var_5 -> - ( do { v <- checkSigVar happy_var_1; - let {(vs,ss,_) = happy_var_3 ; l = happy_var_1 <> happy_var_5 <** (happy_var_2 : reverse ss ++ [happy_var_4]) } ; - return $ TypeSig l (v : reverse vs) happy_var_5 })}}}}} - ) (\r -> happyReturn (happyIn53 r)) - -happyReduce_123 = happyReduce 4# 44# happyReduction_123 -happyReduction_123 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_2 of { happy_var_2 -> - case happyOut190 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> - happyIn53 - (let Loc l (INLINE s) = happy_var_1 in InlineSig (l <^^> happy_var_4 <** [l,happy_var_4]) s happy_var_2 happy_var_3 - ) `HappyStk` happyRest}}}} - -happyReduce_124 = happyReduce 5# 44# happyReduction_124 -happyReduction_124 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 SPECIALISE) -> - case happyOut190 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> - case happyOut54 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 PragmaEnd) -> - happyIn53 - (SpecSig (happy_var_1 <^^> happy_var_5 <** (happy_var_1:happy_var_3 : snd happy_var_4 ++ [happy_var_5])) happy_var_2 (fst happy_var_4) - ) `HappyStk` happyRest}}}}} - -happyReduce_125 = happyReduce 6# 44# happyReduction_125 -happyReduction_125 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_2 of { happy_var_2 -> - case happyOut190 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 DoubleColon) -> - case happyOut54 happy_x_5 of { happy_var_5 -> - case happyOutTok happy_x_6 of { (Loc happy_var_6 PragmaEnd) -> - happyIn53 - (let Loc l (SPECIALISE_INLINE s) = happy_var_1 - in SpecInlineSig (l <^^> happy_var_6 <** (l:happy_var_4:snd happy_var_5++[happy_var_6])) s happy_var_2 happy_var_3 (fst happy_var_5) - ) `HappyStk` happyRest}}}}}} - -happyReduce_126 = happyMonadReduce 4# 44# happyReduction_126 -happyReduction_126 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 SPECIALISE) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> - case happyOut83 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> - ( do { (cs,ih) <- checkInstHeader happy_var_3; - let {l = happy_var_1 <^^> happy_var_4 <** [happy_var_1,happy_var_2,happy_var_4]}; - return $ InstSig l cs ih })}}}} - ) (\r -> happyReturn (happyIn53 r)) - -happyReduce_127 = happySpecReduce_1 45# happyReduction_127 -happyReduction_127 happy_x_1 - = case happyOut55 happy_x_1 of { happy_var_1 -> - happyIn54 - (([happy_var_1],[]) - )} - -happyReduce_128 = happySpecReduce_3 45# happyReduction_128 -happyReduction_128 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut55 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut54 happy_x_3 of { happy_var_3 -> - happyIn54 - ((happy_var_1 : fst happy_var_3, happy_var_2 : snd happy_var_3) - )}}} - -happyReduce_129 = happyMonadReduce 1# 46# happyReduction_129 -happyReduction_129 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut83 happy_x_1 of { happy_var_1 -> - ( checkType $ mkTyForall (ann happy_var_1) Nothing Nothing happy_var_1)} - ) (\r -> happyReturn (happyIn55 r)) - -happyReduce_130 = happySpecReduce_1 47# happyReduction_130 -happyReduction_130 happy_x_1 - = case happyOut52 happy_x_1 of { happy_var_1 -> - happyIn56 - (happy_var_1 - )} - -happyReduce_131 = happySpecReduce_3 47# happyReduction_131 -happyReduction_131 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> - case happyOut184 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> - happyIn56 - (IPBinds (happy_var_1 <^^> happy_var_3 <** snd happy_var_2) (fst happy_var_2) - )}}} - -happyReduce_132 = happySpecReduce_3 47# happyReduction_132 -happyReduction_132 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut217 happy_x_1 of { happy_var_1 -> - case happyOut184 happy_x_2 of { happy_var_2 -> - case happyOut218 happy_x_3 of { happy_var_3 -> - happyIn56 - (IPBinds (happy_var_1 <^^> happy_var_3 <** snd happy_var_2) (fst happy_var_2) - )}}} - -happyReduce_133 = happySpecReduce_3 48# happyReduction_133 -happyReduction_133 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut57 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut188 happy_x_3 of { happy_var_3 -> - happyIn57 - (let (ns,ss,l) = happy_var_1 in (happy_var_3 : ns, happy_var_2 : ss, l <++> ann happy_var_3) - )}}} - -happyReduce_134 = happyMonadReduce 1# 48# happyReduction_134 -happyReduction_134 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut190 happy_x_1 of { happy_var_1 -> - ( do { n <- checkUnQual happy_var_1; - return ([n],[],ann n) })} - ) (\r -> happyReturn (happyIn57 r)) - -happyReduce_135 = happySpecReduce_1 49# happyReduction_135 -happyReduction_135 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_StdCall) -> - happyIn58 - (StdCall (nIS happy_var_1) - )} - -happyReduce_136 = happySpecReduce_1 49# happyReduction_136 -happyReduction_136 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_CCall) -> - happyIn58 - (CCall (nIS happy_var_1) - )} - -happyReduce_137 = happySpecReduce_1 50# happyReduction_137 -happyReduction_137 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Safe) -> - happyIn59 - (Just $ PlaySafe (nIS happy_var_1) False - )} - -happyReduce_138 = happySpecReduce_1 50# happyReduction_138 -happyReduction_138 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Unsafe) -> - happyIn59 - (Just $ PlayRisky (nIS happy_var_1) - )} - -happyReduce_139 = happySpecReduce_1 50# happyReduction_139 -happyReduction_139 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Threadsafe) -> - happyIn59 - (Just $ PlaySafe (nIS happy_var_1) True - )} - -happyReduce_140 = happySpecReduce_0 50# happyReduction_140 -happyReduction_140 = happyIn59 - (Nothing - ) - -happyReduce_141 = happyReduce 4# 51# happyReduction_141 -happyReduction_141 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut189 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> - case happyOut71 happy_x_4 of { happy_var_4 -> - happyIn60 - (let Loc l (StringTok (s,_)) = happy_var_1 in (Just s, happy_var_2, happy_var_4, [l,happy_var_3]) - ) `HappyStk` happyRest}}}} - -happyReduce_142 = happySpecReduce_3 51# happyReduction_142 -happyReduction_142 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut189 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> - case happyOut71 happy_x_3 of { happy_var_3 -> - happyIn60 - ((Nothing, happy_var_1, happy_var_3, [happy_var_2]) - )}}} - -happyReduce_143 = happySpecReduce_3 52# happyReduction_143 -happyReduction_143 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut61 happy_x_1 of { happy_var_1 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - happyIn61 - (happy_var_3 : happy_var_1 - )}} - -happyReduce_144 = happySpecReduce_2 52# happyReduction_144 -happyReduction_144 happy_x_2 - happy_x_1 - = case happyOut61 happy_x_1 of { happy_var_1 -> - happyIn61 - (happy_var_1 - )} - -happyReduce_145 = happySpecReduce_1 52# happyReduction_145 -happyReduction_145 happy_x_1 - = case happyOut62 happy_x_1 of { happy_var_1 -> - happyIn61 - ([happy_var_1] - )} - -happyReduce_146 = happySpecReduce_0 52# happyReduction_146 -happyReduction_146 = happyIn61 - ([] - ) - -happyReduce_147 = happyMonadReduce 6# 53# happyReduction_147 -happyReduction_147 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_2 of { happy_var_2 -> - case happyOut64 happy_x_3 of { happy_var_3 -> - case happyOut136 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 Equals) -> - case happyOut134 happy_x_6 of { happy_var_6 -> - ( do { let {Loc l (StringTok (s,_)) = happy_var_1}; - e <- checkRuleExpr happy_var_4; - return $ Rule (nIS l <++> ann happy_var_6 <** l:snd happy_var_3 ++ [happy_var_5]) s happy_var_2 (fst happy_var_3) e happy_var_6 })}}}}}} - ) (\r -> happyReturn (happyIn62 r)) - -happyReduce_148 = happySpecReduce_0 54# happyReduction_148 -happyReduction_148 = happyIn63 - (Nothing - ) - -happyReduce_149 = happySpecReduce_3 54# happyReduction_149 -happyReduction_149 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightSquare) -> - happyIn63 - (let Loc l (IntTok (i,_)) = happy_var_2 in Just $ ActiveFrom (happy_var_1 <^^> happy_var_3 <** [happy_var_1,l,happy_var_3]) (fromInteger i) - )}}} - -happyReduce_150 = happyReduce 4# 54# happyReduction_150 -happyReduction_150 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Tilde) -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightSquare) -> - happyIn63 - (let Loc l (IntTok (i,_)) = happy_var_3 in Just $ ActiveUntil (happy_var_1 <^^> happy_var_4 <** [happy_var_1,happy_var_2,l,happy_var_4]) (fromInteger i) - ) `HappyStk` happyRest}}}} - -happyReduce_151 = happySpecReduce_0 55# happyReduction_151 -happyReduction_151 = happyIn64 - ((Nothing,[]) - ) - -happyReduce_152 = happySpecReduce_3 55# happyReduction_152 -happyReduction_152 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> - case happyOut65 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Dot) -> - happyIn64 - ((Just happy_var_2,[happy_var_1,happy_var_3]) - )}}} - -happyReduce_153 = happySpecReduce_1 56# happyReduction_153 -happyReduction_153 happy_x_1 - = case happyOut66 happy_x_1 of { happy_var_1 -> - happyIn65 - ([happy_var_1] - )} - -happyReduce_154 = happySpecReduce_2 56# happyReduction_154 -happyReduction_154 happy_x_2 - happy_x_1 - = case happyOut66 happy_x_1 of { happy_var_1 -> - case happyOut65 happy_x_2 of { happy_var_2 -> - happyIn65 - (happy_var_1 : happy_var_2 - )}} - -happyReduce_155 = happySpecReduce_1 57# happyReduction_155 -happyReduction_155 happy_x_1 - = case happyOut205 happy_x_1 of { happy_var_1 -> - happyIn66 - (RuleVar (ann happy_var_1) happy_var_1 - )} - -happyReduce_156 = happyReduce 5# 57# happyReduction_156 -happyReduction_156 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut205 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> - case happyOut82 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> - happyIn66 - (TypedRuleVar (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}}} - -happyReduce_157 = happySpecReduce_3 58# happyReduction_157 -happyReduction_157 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut67 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> - case happyOut68 happy_x_3 of { happy_var_3 -> - happyIn67 - ((fst happy_var_3 : fst happy_var_1, snd happy_var_1 ++ (happy_var_2:snd happy_var_3)) - )}}} - -happyReduce_158 = happySpecReduce_2 58# happyReduction_158 -happyReduction_158 happy_x_2 - happy_x_1 - = case happyOut67 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> - happyIn67 - ((fst happy_var_1, snd happy_var_1 ++ [happy_var_2]) - )}} - -happyReduce_159 = happySpecReduce_1 58# happyReduction_159 -happyReduction_159 happy_x_1 - = case happyOut68 happy_x_1 of { happy_var_1 -> - happyIn67 - (([fst happy_var_1],snd happy_var_1) - )} - -happyReduce_160 = happySpecReduce_0 58# happyReduction_160 -happyReduction_160 = happyIn67 - (([],[]) - ) - -happyReduce_161 = happySpecReduce_2 59# happyReduction_161 -happyReduction_161 happy_x_2 - happy_x_1 - = case happyOut69 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - happyIn68 - (let Loc l (StringTok (s,_)) = happy_var_2 in ((fst happy_var_1,s),snd happy_var_1 ++ [l]) - )}} - -happyReduce_162 = happySpecReduce_1 60# happyReduction_162 -happyReduction_162 happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - happyIn69 - (([happy_var_1],[]) - )} - -happyReduce_163 = happySpecReduce_3 60# happyReduction_163 -happyReduction_163 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut69 happy_x_3 of { happy_var_3 -> - happyIn69 - ((happy_var_1 : fst happy_var_3, happy_var_2 : snd happy_var_3) - )}}} - -happyReduce_164 = happySpecReduce_1 61# happyReduction_164 -happyReduction_164 happy_x_1 - = case happyOut192 happy_x_1 of { happy_var_1 -> - happyIn70 - (happy_var_1 - )} - -happyReduce_165 = happySpecReduce_1 61# happyReduction_165 -happyReduction_165 happy_x_1 - = case happyOut188 happy_x_1 of { happy_var_1 -> - happyIn70 - (happy_var_1 - )} - -happyReduce_166 = happyMonadReduce 1# 62# happyReduction_166 -happyReduction_166 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut72 happy_x_1 of { happy_var_1 -> - ( checkType happy_var_1)} - ) (\r -> happyReturn (happyIn71 r)) - -happyReduce_167 = happySpecReduce_1 63# happyReduction_167 -happyReduction_167 happy_x_1 - = case happyOut76 happy_x_1 of { happy_var_1 -> - happyIn72 - (happy_var_1 - )} - -happyReduce_168 = happySpecReduce_3 63# happyReduction_168 -happyReduction_168 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOut81 happy_x_2 of { happy_var_2 -> - case happyOut72 happy_x_3 of { happy_var_3 -> - happyIn72 - (TyInfix (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 - )}}} - -happyReduce_169 = happySpecReduce_3 63# happyReduction_169 -happyReduction_169 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOut223 happy_x_2 of { happy_var_2 -> - case happyOut72 happy_x_3 of { happy_var_3 -> - happyIn72 - (TyInfix (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 - )}}} - -happyReduce_170 = happySpecReduce_3 63# happyReduction_170 -happyReduction_170 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> - case happyOut83 happy_x_3 of { happy_var_3 -> - happyIn72 - (TyFun (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_171 = happyMonadReduce 3# 63# happyReduction_171 -happyReduction_171 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Tilde) -> - case happyOut76 happy_x_3 of { happy_var_3 -> - ( do { checkEnabled TypeFamilies ; - let {l = happy_var_1 <> happy_var_3 <** [happy_var_2]}; - return $ TyPred l $ EqualP l happy_var_1 happy_var_3 })}}} - ) (\r -> happyReturn (happyIn72 r)) - -happyReduce_172 = happyMonadReduce 1# 64# happyReduction_172 -happyReduction_172 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut74 happy_x_1 of { happy_var_1 -> - ( checkType happy_var_1)} - ) (\r -> happyReturn (happyIn73 r)) - -happyReduce_173 = happySpecReduce_3 65# happyReduction_173 -happyReduction_173 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut191 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> - case happyOut72 happy_x_3 of { happy_var_3 -> - happyIn74 - (let l = (happy_var_1 <> happy_var_3 <** [happy_var_2]) in TyPred l $ IParam l happy_var_1 happy_var_3 - )}}} - -happyReduce_174 = happySpecReduce_1 65# happyReduction_174 -happyReduction_174 happy_x_1 - = case happyOut72 happy_x_1 of { happy_var_1 -> - happyIn74 - (happy_var_1 - )} - -happyReduce_175 = happyMonadReduce 1# 66# happyReduction_175 -happyReduction_175 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> - ( checkType happy_var_1)} - ) (\r -> happyReturn (happyIn75 r)) - -happyReduce_176 = happySpecReduce_2 67# happyReduction_176 -happyReduction_176 happy_x_2 - happy_x_1 - = case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOut78 happy_x_2 of { happy_var_2 -> - happyIn76 - (TyApp (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 - )}} - -happyReduce_177 = happySpecReduce_1 67# happyReduction_177 -happyReduction_177 happy_x_1 - = case happyOut78 happy_x_1 of { happy_var_1 -> - happyIn76 - (happy_var_1 - )} - -happyReduce_178 = happyMonadReduce 1# 68# happyReduction_178 -happyReduction_178 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut78 happy_x_1 of { happy_var_1 -> - ( checkType happy_var_1)} - ) (\r -> happyReturn (happyIn77 r)) - -happyReduce_179 = happySpecReduce_1 69# happyReduction_179 -happyReduction_179 happy_x_1 - = case happyOut79 happy_x_1 of { happy_var_1 -> - happyIn78 - (TyCon (ann happy_var_1) happy_var_1 - )} - -happyReduce_180 = happySpecReduce_1 69# happyReduction_180 -happyReduction_180 happy_x_1 - = case happyOut222 happy_x_1 of { happy_var_1 -> - happyIn78 - (TyVar (ann happy_var_1) happy_var_1 - )} - -happyReduce_181 = happySpecReduce_3 69# happyReduction_181 -happyReduction_181 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut85 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn78 - (TyTuple (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse (happy_var_3:snd happy_var_2))) Boxed (reverse (fst happy_var_2)) - )}}} - -happyReduce_182 = happySpecReduce_3 69# happyReduction_182 -happyReduction_182 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> - case happyOut86 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightHashParen) -> - happyIn78 - (TyTuple (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse (happy_var_3:snd happy_var_2))) Unboxed (reverse (fst happy_var_2)) - )}}} - -happyReduce_183 = happySpecReduce_3 69# happyReduction_183 -happyReduction_183 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> - case happyOut74 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightSquare) -> - happyIn78 - (TyList (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 - )}}} - -happyReduce_184 = happySpecReduce_3 69# happyReduction_184 -happyReduction_184 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut83 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn78 - (TyParen (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 - )}}} - -happyReduce_185 = happyReduce 5# 69# happyReduction_185 -happyReduction_185 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut83 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> - case happyOut113 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> - happyIn78 - (TyKind (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}}} - -happyReduce_186 = happySpecReduce_1 70# happyReduction_186 -happyReduction_186 happy_x_1 - = case happyOut80 happy_x_1 of { happy_var_1 -> - happyIn79 - (happy_var_1 - )} - -happyReduce_187 = happySpecReduce_2 70# happyReduction_187 -happyReduction_187 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightParen) -> - happyIn79 - (unit_tycon_name (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) - )}} - -happyReduce_188 = happySpecReduce_3 70# happyReduction_188 -happyReduction_188 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn79 - (fun_tycon_name (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_2,happy_var_3]) - )}}} - -happyReduce_189 = happySpecReduce_2 70# happyReduction_189 -happyReduction_189 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightSquare) -> - happyIn79 - (list_tycon_name (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) - )}} - -happyReduce_190 = happySpecReduce_3 70# happyReduction_190 -happyReduction_190 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn79 - (tuple_tycon_name (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse happy_var_2 ++ [happy_var_3])) Boxed (length happy_var_2) - )}}} - -happyReduce_191 = happySpecReduce_2 70# happyReduction_191 -happyReduction_191 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightHashParen) -> - happyIn79 - (unboxed_singleton_tycon_name (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) - )}} - -happyReduce_192 = happySpecReduce_3 70# happyReduction_192 -happyReduction_192 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightHashParen) -> - happyIn79 - (tuple_tycon_name (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse happy_var_2 ++ [happy_var_3])) Unboxed (length happy_var_2) - )}}} - -happyReduce_193 = happySpecReduce_1 71# happyReduction_193 -happyReduction_193 happy_x_1 - = case happyOut207 happy_x_1 of { happy_var_1 -> - happyIn80 - (happy_var_1 - )} - -happyReduce_194 = happySpecReduce_3 71# happyReduction_194 -happyReduction_194 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut202 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn80 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_195 = happySpecReduce_1 72# happyReduction_195 -happyReduction_195 happy_x_1 - = case happyOut198 happy_x_1 of { happy_var_1 -> - happyIn81 - (happy_var_1 - )} - -happyReduce_196 = happyMonadReduce 1# 73# happyReduction_196 -happyReduction_196 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut83 happy_x_1 of { happy_var_1 -> - ( checkType happy_var_1)} - ) (\r -> happyReturn (happyIn82 r)) - -happyReduce_197 = happyReduce 4# 74# happyReduction_197 -happyReduction_197 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> - case happyOut87 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Dot) -> - case happyOut83 happy_x_4 of { happy_var_4 -> - happyIn83 - (TyForall (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) (Just (reverse (fst happy_var_2))) Nothing happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_198 = happySpecReduce_2 74# happyReduction_198 -happyReduction_198 happy_x_2 - happy_x_1 - = case happyOut84 happy_x_1 of { happy_var_1 -> - case happyOut83 happy_x_2 of { happy_var_2 -> - happyIn83 - (TyForall (happy_var_1 <> happy_var_2) Nothing (Just happy_var_1) happy_var_2 - )}} - -happyReduce_199 = happySpecReduce_1 74# happyReduction_199 -happyReduction_199 happy_x_1 - = case happyOut74 happy_x_1 of { happy_var_1 -> - happyIn83 - (happy_var_1 - )} - -happyReduce_200 = happyMonadReduce 2# 75# happyReduction_200 -happyReduction_200 (happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleArrow) -> - ( checkPContext $ (amap (\l -> l <++> nIS happy_var_2 <** (srcInfoPoints l ++ [happy_var_2]))) happy_var_1)}} - ) (\r -> happyReturn (happyIn84 r)) - -happyReduce_201 = happyMonadReduce 4# 75# happyReduction_201 -happyReduction_201 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Tilde) -> - case happyOut76 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 DoubleArrow) -> - ( do { checkEnabled TypeFamilies; - let {l = happy_var_1 <> happy_var_3 <** [happy_var_2,happy_var_4]}; - checkPContext (TyPred l $ EqualP l happy_var_1 happy_var_3) })}}}} - ) (\r -> happyReturn (happyIn84 r)) - -happyReduce_202 = happySpecReduce_3 76# happyReduction_202 -happyReduction_202 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut86 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut83 happy_x_3 of { happy_var_3 -> - happyIn85 - ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) - )}}} - -happyReduce_203 = happySpecReduce_1 77# happyReduction_203 -happyReduction_203 happy_x_1 - = case happyOut83 happy_x_1 of { happy_var_1 -> - happyIn86 - (([happy_var_1],[]) - )} - -happyReduce_204 = happySpecReduce_3 77# happyReduction_204 -happyReduction_204 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut86 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut83 happy_x_3 of { happy_var_3 -> - happyIn86 - ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) - )}}} - -happyReduce_205 = happySpecReduce_2 78# happyReduction_205 -happyReduction_205 happy_x_2 - happy_x_1 - = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut88 happy_x_2 of { happy_var_2 -> - happyIn87 - ((happy_var_2 : fst happy_var_1, Just (snd happy_var_1 <?+> ann happy_var_2)) - )}} - -happyReduce_206 = happySpecReduce_0 78# happyReduction_206 -happyReduction_206 = happyIn87 - (([],Nothing) - ) - -happyReduce_207 = happySpecReduce_1 79# happyReduction_207 -happyReduction_207 happy_x_1 - = case happyOut222 happy_x_1 of { happy_var_1 -> - happyIn88 - (UnkindedVar (ann happy_var_1) happy_var_1 - )} - -happyReduce_208 = happyReduce 5# 79# happyReduction_208 -happyReduction_208 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut222 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> - case happyOut113 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> - happyIn88 - (KindedVar (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}}} - -happyReduce_209 = happySpecReduce_2 80# happyReduction_209 -happyReduction_209 happy_x_2 - happy_x_1 - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut222 happy_x_2 of { happy_var_2 -> - happyIn89 - ((happy_var_2 : fst happy_var_1, Just (snd happy_var_1 <?+> ann happy_var_2)) - )}} - -happyReduce_210 = happySpecReduce_0 80# happyReduction_210 -happyReduction_210 = happyIn89 - (([], Nothing) - ) - -happyReduce_211 = happySpecReduce_2 81# happyReduction_211 -happyReduction_211 happy_x_2 - happy_x_1 - = case happyOut89 happy_x_1 of { happy_var_1 -> - case happyOut222 happy_x_2 of { happy_var_2 -> - happyIn90 - ((happy_var_2 : fst happy_var_1, snd happy_var_1 <?+> ann happy_var_2) - )}} - -happyReduce_212 = happySpecReduce_0 82# happyReduction_212 -happyReduction_212 = happyIn91 - (([],[], Nothing) - ) - -happyReduce_213 = happyMonadReduce 2# 82# happyReduction_213 -happyReduction_213 (happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Bar) -> - case happyOut92 happy_x_2 of { happy_var_2 -> - ( do { checkEnabled FunctionalDependencies ; - let {(fds,ss,l) = happy_var_2} ; - return (reverse fds, happy_var_1 : reverse ss, Just (nIS happy_var_1 <++> l)) })}} - ) (\r -> happyReturn (happyIn91 r)) - -happyReduce_214 = happySpecReduce_3 83# happyReduction_214 -happyReduction_214 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut92 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut93 happy_x_3 of { happy_var_3 -> - happyIn92 - (let (fds,ss,l) = happy_var_1 in (happy_var_3 : fds, happy_var_2 : ss, l <++> ann happy_var_3) - )}}} - -happyReduce_215 = happySpecReduce_1 83# happyReduction_215 -happyReduction_215 happy_x_1 - = case happyOut93 happy_x_1 of { happy_var_1 -> - happyIn92 - (([happy_var_1],[],ann happy_var_1) - )} - -happyReduce_216 = happySpecReduce_3 84# happyReduction_216 -happyReduction_216 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut90 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> - case happyOut90 happy_x_3 of { happy_var_3 -> - happyIn93 - (FunDep (snd happy_var_1 <++> snd happy_var_3 <** [happy_var_2]) (reverse (fst happy_var_1)) (reverse (fst happy_var_3)) - )}}} - -happyReduce_217 = happyMonadReduce 4# 85# happyReduction_217 -happyReduction_217 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> - case happyOut95 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> - ( checkEnabled GADTs >> return (fst happy_var_3, happy_var_1 : happy_var_2 : snd happy_var_3 ++ [happy_var_4], Just $ happy_var_1 <^^> happy_var_4))}}}} - ) (\r -> happyReturn (happyIn94 r)) - -happyReduce_218 = happyMonadReduce 4# 85# happyReduction_218 -happyReduction_218 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - case happyOut217 happy_x_2 of { happy_var_2 -> - case happyOut95 happy_x_3 of { happy_var_3 -> - case happyOut218 happy_x_4 of { happy_var_4 -> - ( checkEnabled GADTs >> return (fst happy_var_3, happy_var_1 : happy_var_2 : snd happy_var_3 ++ [happy_var_4], Just $ happy_var_1 <^^> happy_var_4))}}}} - ) (\r -> happyReturn (happyIn94 r)) - -happyReduce_219 = happyMonadReduce 0# 85# happyReduction_219 -happyReduction_219 (happyRest) tk - = happyThen (( checkEnabled EmptyDataDecls >> return ([],[],Nothing)) - ) (\r -> happyReturn (happyIn94 r)) - -happyReduce_220 = happySpecReduce_3 86# happyReduction_220 -happyReduction_220 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - happyIn95 - ((fst happy_var_2, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3) - )}}} - -happyReduce_221 = happySpecReduce_3 87# happyReduction_221 -happyReduction_221 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut96 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut97 happy_x_3 of { happy_var_3 -> - happyIn96 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) - )}}} - -happyReduce_222 = happySpecReduce_1 87# happyReduction_222 -happyReduction_222 happy_x_1 - = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn96 - (([happy_var_1],[]) - )} - -happyReduce_223 = happyMonadReduce 3# 88# happyReduction_223 -happyReduction_223 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut193 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> - case happyOut82 happy_x_3 of { happy_var_3 -> - ( do { c <- checkUnQual happy_var_1; - return $ GadtDecl (happy_var_1 <> happy_var_3 <** [happy_var_2]) c happy_var_3 })}}} - ) (\r -> happyReturn (happyIn97 r)) - -happyReduce_224 = happySpecReduce_2 89# happyReduction_224 -happyReduction_224 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Equals) -> - case happyOut99 happy_x_2 of { happy_var_2 -> - happyIn98 - (let (ds,ss,l) = happy_var_2 in (ds, happy_var_1 : reverse ss, Just $ nIS happy_var_1 <++> l) - )}} - -happyReduce_225 = happySpecReduce_3 90# happyReduction_225 -happyReduction_225 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut99 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> - case happyOut100 happy_x_3 of { happy_var_3 -> - happyIn99 - (let (ds,ss,l) = happy_var_1 in (happy_var_3 : ds, happy_var_2 : ss, l <++> ann happy_var_3) - )}}} - -happyReduce_226 = happySpecReduce_1 90# happyReduction_226 -happyReduction_226 happy_x_1 - = case happyOut100 happy_x_1 of { happy_var_1 -> - happyIn99 - (([happy_var_1],[],ann happy_var_1) - )} - -happyReduce_227 = happyMonadReduce 3# 91# happyReduction_227 -happyReduction_227 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut101 happy_x_1 of { happy_var_1 -> - case happyOut84 happy_x_2 of { happy_var_2 -> - case happyOut102 happy_x_3 of { happy_var_3 -> - ( do { checkEnabled ExistentialQuantification ; - ctxt <- checkContext (Just happy_var_2) ; - let {(mtvs,ss,ml) = happy_var_1} ; - return $ QualConDecl (ml <?+> ann happy_var_3 <** ss) mtvs ctxt happy_var_3 })}}} - ) (\r -> happyReturn (happyIn100 r)) - -happyReduce_228 = happySpecReduce_2 91# happyReduction_228 -happyReduction_228 happy_x_2 - happy_x_1 - = case happyOut101 happy_x_1 of { happy_var_1 -> - case happyOut102 happy_x_2 of { happy_var_2 -> - happyIn100 - (let (mtvs, ss, ml) = happy_var_1 in QualConDecl (ml <?+> ann happy_var_2 <** ss) mtvs Nothing happy_var_2 - )}} - -happyReduce_229 = happyMonadReduce 3# 92# happyReduction_229 -happyReduction_229 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> - case happyOut87 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Dot) -> - ( checkEnabled ExistentialQuantification >> return (Just (fst happy_var_2), [happy_var_1,happy_var_3], Just $ happy_var_1 <^^> happy_var_3))}}} - ) (\r -> happyReturn (happyIn101 r)) - -happyReduce_230 = happySpecReduce_0 92# happyReduction_230 -happyReduction_230 = happyIn101 - ((Nothing, [], Nothing) - ) - -happyReduce_231 = happySpecReduce_1 93# happyReduction_231 -happyReduction_231 happy_x_1 - = case happyOut103 happy_x_1 of { happy_var_1 -> - happyIn102 - (let (n,ts,l) = happy_var_1 in ConDecl l n ts - )} - -happyReduce_232 = happySpecReduce_3 93# happyReduction_232 -happyReduction_232 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut106 happy_x_1 of { happy_var_1 -> - case happyOut197 happy_x_2 of { happy_var_2 -> - case happyOut106 happy_x_3 of { happy_var_3 -> - happyIn102 - (InfixConDecl (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 - )}}} - -happyReduce_233 = happyMonadReduce 3# 93# happyReduction_233 -happyReduction_233 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut193 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> - ( do { c <- checkUnQual happy_var_1; return $ RecDecl (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]) c [] })}}} - ) (\r -> happyReturn (happyIn102 r)) - -happyReduce_234 = happyMonadReduce 4# 93# happyReduction_234 -happyReduction_234 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut193 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> - case happyOut107 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> - ( do { c <- checkUnQual happy_var_1; - return $ RecDecl (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])) c (reverse (fst happy_var_3)) })}}}} - ) (\r -> happyReturn (happyIn102 r)) - -happyReduce_235 = happyMonadReduce 1# 94# happyReduction_235 -happyReduction_235 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> - ( do { (c,ts) <- splitTyConApp happy_var_1; - return (c,map (\t -> UnBangedTy (ann t) t) ts,ann happy_var_1) })} - ) (\r -> happyReturn (happyIn103 r)) - -happyReduce_236 = happySpecReduce_1 94# happyReduction_236 -happyReduction_236 happy_x_1 - = case happyOut104 happy_x_1 of { happy_var_1 -> - happyIn103 - (happy_var_1 - )} - -happyReduce_237 = happyMonadReduce 3# 95# happyReduction_237 -happyReduction_237 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Exclamation) -> - case happyOut77 happy_x_3 of { happy_var_3 -> - ( do { (c,ts) <- splitTyConApp happy_var_1; - return (c,map (\t -> UnBangedTy (ann t) t) ts++ - [BangedTy (nIS happy_var_2 <++> ann happy_var_3 <** [happy_var_2]) happy_var_3], happy_var_1 <> happy_var_3) })}}} - ) (\r -> happyReturn (happyIn104 r)) - -happyReduce_238 = happyMonadReduce 5# 95# happyReduction_238 -happyReduction_238 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 UNPACK) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 Exclamation) -> - case happyOut77 happy_x_5 of { happy_var_5 -> - ( do { (c,ts) <- splitTyConApp happy_var_1; - return (c,map (\t -> UnBangedTy (ann t) t) ts++ - [UnpackedTy (nIS happy_var_2 <++> ann happy_var_5 <** [happy_var_2,happy_var_3,happy_var_4]) happy_var_5], happy_var_1 <> happy_var_5) })}}}}} - ) (\r -> happyReturn (happyIn104 r)) - -happyReduce_239 = happySpecReduce_2 95# happyReduction_239 -happyReduction_239 happy_x_2 - happy_x_1 - = case happyOut104 happy_x_1 of { happy_var_1 -> - case happyOut105 happy_x_2 of { happy_var_2 -> - happyIn104 - (let (n,ts,l) = happy_var_1 in (n, ts ++ [happy_var_2],l <++> ann happy_var_2) - )}} - -happyReduce_240 = happySpecReduce_1 96# happyReduction_240 -happyReduction_240 happy_x_1 - = case happyOut77 happy_x_1 of { happy_var_1 -> - happyIn105 - (UnBangedTy (ann happy_var_1) happy_var_1 - )} - -happyReduce_241 = happySpecReduce_2 96# happyReduction_241 -happyReduction_241 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - case happyOut77 happy_x_2 of { happy_var_2 -> - happyIn105 - (BangedTy (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_242 = happyReduce 4# 96# happyReduction_242 -happyReduction_242 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 UNPACK) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Exclamation) -> - case happyOut77 happy_x_4 of { happy_var_4 -> - happyIn105 - (UnpackedTy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_243 = happySpecReduce_1 97# happyReduction_243 -happyReduction_243 happy_x_1 - = case happyOut75 happy_x_1 of { happy_var_1 -> - happyIn106 - (UnBangedTy (ann happy_var_1) happy_var_1 - )} - -happyReduce_244 = happySpecReduce_2 97# happyReduction_244 -happyReduction_244 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - case happyOut77 happy_x_2 of { happy_var_2 -> - happyIn106 - (BangedTy (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_245 = happyReduce 4# 97# happyReduction_245 -happyReduction_245 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 UNPACK) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Exclamation) -> - case happyOut77 happy_x_4 of { happy_var_4 -> - happyIn106 - (UnpackedTy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_246 = happySpecReduce_3 98# happyReduction_246 -happyReduction_246 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut107 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut108 happy_x_3 of { happy_var_3 -> - happyIn107 - ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) - )}}} - -happyReduce_247 = happySpecReduce_1 98# happyReduction_247 -happyReduction_247 happy_x_1 - = case happyOut108 happy_x_1 of { happy_var_1 -> - happyIn107 - (([happy_var_1],[]) - )} - -happyReduce_248 = happySpecReduce_3 99# happyReduction_248 -happyReduction_248 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut57 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> - case happyOut109 happy_x_3 of { happy_var_3 -> - happyIn108 - (let (ns,ss,l) = happy_var_1 in FieldDecl (l <++> ann happy_var_3 <** (reverse ss ++ [happy_var_2])) (reverse ns) happy_var_3 - )}}} - -happyReduce_249 = happySpecReduce_1 100# happyReduction_249 -happyReduction_249 happy_x_1 - = case happyOut82 happy_x_1 of { happy_var_1 -> - happyIn109 - (UnBangedTy (ann happy_var_1) happy_var_1 - )} - -happyReduce_250 = happySpecReduce_2 100# happyReduction_250 -happyReduction_250 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - case happyOut77 happy_x_2 of { happy_var_2 -> - happyIn109 - (BangedTy (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_251 = happyReduce 4# 100# happyReduction_251 -happyReduction_251 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 UNPACK) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Exclamation) -> - case happyOut77 happy_x_4 of { happy_var_4 -> - happyIn109 - (UnpackedTy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_252 = happySpecReduce_0 101# happyReduction_252 -happyReduction_252 = happyIn110 - (Nothing - ) - -happyReduce_253 = happySpecReduce_2 101# happyReduction_253 -happyReduction_253 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> - case happyOut112 happy_x_2 of { happy_var_2 -> - happyIn110 - (let l = nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1] in Just $ Deriving l [IHead (ann happy_var_2) happy_var_2 []] - )}} - -happyReduce_254 = happySpecReduce_3 101# happyReduction_254 -happyReduction_254 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn110 - (Just $ Deriving (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_2,happy_var_3]) [] - )}}} - -happyReduce_255 = happyReduce 4# 101# happyReduction_255 -happyReduction_255 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> - case happyOut111 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn110 - (Just $ Deriving (happy_var_1 <^^> happy_var_4 <** happy_var_1:happy_var_2: reverse (snd happy_var_3) ++ [happy_var_4]) (reverse (fst happy_var_3)) - ) `HappyStk` happyRest}}}} - -happyReduce_256 = happyMonadReduce 1# 102# happyReduction_256 -happyReduction_256 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut86 happy_x_1 of { happy_var_1 -> - ( checkDeriving (fst happy_var_1) >>= \ds -> return (ds, snd happy_var_1))} - ) (\r -> happyReturn (happyIn111 r)) - -happyReduce_257 = happySpecReduce_1 103# happyReduction_257 -happyReduction_257 happy_x_1 - = case happyOut207 happy_x_1 of { happy_var_1 -> - happyIn112 - (happy_var_1 - )} - -happyReduce_258 = happyMonadReduce 1# 104# happyReduction_258 -happyReduction_258 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut114 happy_x_1 of { happy_var_1 -> - ( checkEnabled KindSignatures >> return happy_var_1)} - ) (\r -> happyReturn (happyIn113 r)) - -happyReduce_259 = happySpecReduce_1 105# happyReduction_259 -happyReduction_259 happy_x_1 - = case happyOut115 happy_x_1 of { happy_var_1 -> - happyIn114 - (happy_var_1 - )} - -happyReduce_260 = happySpecReduce_3 105# happyReduction_260 -happyReduction_260 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut115 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> - case happyOut114 happy_x_3 of { happy_var_3 -> - happyIn114 - (KindFn (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_261 = happySpecReduce_1 106# happyReduction_261 -happyReduction_261 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Star) -> - happyIn115 - (KindStar (nIS happy_var_1) - )} - -happyReduce_262 = happySpecReduce_1 106# happyReduction_262 -happyReduction_262 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - happyIn115 - (KindBang (nIS happy_var_1) - )} - -happyReduce_263 = happySpecReduce_3 106# happyReduction_263 -happyReduction_263 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut114 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn115 - (KindParen (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 - )}}} - -happyReduce_264 = happySpecReduce_0 107# happyReduction_264 -happyReduction_264 = happyIn116 - ((Nothing,[]) - ) - -happyReduce_265 = happySpecReduce_2 107# happyReduction_265 -happyReduction_265 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 DoubleColon) -> - case happyOut113 happy_x_2 of { happy_var_2 -> - happyIn116 - ((Just happy_var_2,[happy_var_1]) - )}} - -happyReduce_266 = happyMonadReduce 4# 108# happyReduction_266 -happyReduction_266 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> - case happyOut118 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> - ( checkClassBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4)))}}}} - ) (\r -> happyReturn (happyIn117 r)) - -happyReduce_267 = happyMonadReduce 4# 108# happyReduction_267 -happyReduction_267 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - case happyOut217 happy_x_2 of { happy_var_2 -> - case happyOut118 happy_x_3 of { happy_var_3 -> - case happyOut218 happy_x_4 of { happy_var_4 -> - ( checkClassBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4)))}}}} - ) (\r -> happyReturn (happyIn117 r)) - -happyReduce_268 = happySpecReduce_0 108# happyReduction_268 -happyReduction_268 = happyIn117 - ((Nothing,[],Nothing) - ) - -happyReduce_269 = happyMonadReduce 3# 109# happyReduction_269 -happyReduction_269 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut119 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - ( checkRevClsDecls (fst happy_var_2) >>= \cs -> return (cs, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3))}}} - ) (\r -> happyReturn (happyIn118 r)) - -happyReduce_270 = happySpecReduce_1 109# happyReduction_270 -happyReduction_270 happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn118 - (([],reverse happy_var_1) - )} - -happyReduce_271 = happySpecReduce_3 110# happyReduction_271 -happyReduction_271 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut119 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut120 happy_x_3 of { happy_var_3 -> - happyIn119 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) - )}}} - -happyReduce_272 = happySpecReduce_1 110# happyReduction_272 -happyReduction_272 happy_x_1 - = case happyOut120 happy_x_1 of { happy_var_1 -> - happyIn119 - (([happy_var_1],[]) - )} - -happyReduce_273 = happySpecReduce_1 111# happyReduction_273 -happyReduction_273 happy_x_1 - = case happyOut51 happy_x_1 of { happy_var_1 -> - happyIn120 - (ClsDecl (ann happy_var_1) happy_var_1 - )} - -happyReduce_274 = happyMonadReduce 1# 111# happyReduction_274 -happyReduction_274 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut121 happy_x_1 of { happy_var_1 -> - ( checkEnabled TypeFamilies >> return happy_var_1)} - ) (\r -> happyReturn (happyIn120 r)) - -happyReduce_275 = happyMonadReduce 3# 112# happyReduction_275 -happyReduction_275 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> - case happyOut74 happy_x_2 of { happy_var_2 -> - case happyOut116 happy_x_3 of { happy_var_3 -> - ( do { dh <- checkSimpleType happy_var_2; - return (ClsTyFam (nIS happy_var_1 <++> ann happy_var_2 <+?> (fmap ann) (fst happy_var_3) <** happy_var_1:snd happy_var_3) dh (fst happy_var_3)) })}}} - ) (\r -> happyReturn (happyIn121 r)) - -happyReduce_276 = happyReduce 4# 112# happyReduction_276 -happyReduction_276 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> - case happyOut71 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> - case happyOut82 happy_x_4 of { happy_var_4 -> - happyIn121 - (ClsTyDef (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_277 = happyMonadReduce 3# 112# happyReduction_277 -happyReduction_277 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> - case happyOut83 happy_x_2 of { happy_var_2 -> - case happyOut116 happy_x_3 of { happy_var_3 -> - ( do { (cs,dh) <- checkDataHeader happy_var_2; - return (ClsDataFam (nIS happy_var_1 <++> ann happy_var_2 <+?> (fmap ann) (fst happy_var_3) <** happy_var_1:snd happy_var_3) cs dh (fst happy_var_3)) })}}} - ) (\r -> happyReturn (happyIn121 r)) - -happyReduce_278 = happyMonadReduce 4# 113# happyReduction_278 -happyReduction_278 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> - case happyOut123 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> - ( checkInstBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4)))}}}} - ) (\r -> happyReturn (happyIn122 r)) - -happyReduce_279 = happyMonadReduce 4# 113# happyReduction_279 -happyReduction_279 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - case happyOut217 happy_x_2 of { happy_var_2 -> - case happyOut123 happy_x_3 of { happy_var_3 -> - case happyOut218 happy_x_4 of { happy_var_4 -> - ( checkInstBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4)))}}}} - ) (\r -> happyReturn (happyIn122 r)) - -happyReduce_280 = happySpecReduce_0 113# happyReduction_280 -happyReduction_280 = happyIn122 - ((Nothing, [], Nothing) - ) - -happyReduce_281 = happyMonadReduce 3# 114# happyReduction_281 -happyReduction_281 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut124 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - ( checkRevInstDecls (fst happy_var_2) >>= \is -> return (is, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3))}}} - ) (\r -> happyReturn (happyIn123 r)) - -happyReduce_282 = happySpecReduce_1 114# happyReduction_282 -happyReduction_282 happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn123 - (([],reverse happy_var_1) - )} - -happyReduce_283 = happySpecReduce_3 115# happyReduction_283 -happyReduction_283 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut124 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut125 happy_x_3 of { happy_var_3 -> - happyIn124 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) - )}}} - -happyReduce_284 = happySpecReduce_1 115# happyReduction_284 -happyReduction_284 happy_x_1 - = case happyOut125 happy_x_1 of { happy_var_1 -> - happyIn124 - (([happy_var_1],[]) - )} - -happyReduce_285 = happySpecReduce_1 116# happyReduction_285 -happyReduction_285 happy_x_1 - = case happyOut128 happy_x_1 of { happy_var_1 -> - happyIn125 - (InsDecl (ann happy_var_1) happy_var_1 - )} - -happyReduce_286 = happyMonadReduce 1# 116# happyReduction_286 -happyReduction_286 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut127 happy_x_1 of { happy_var_1 -> - ( checkEnabled TypeFamilies >> return happy_var_1)} - ) (\r -> happyReturn (happyIn125 r)) - -happyReduce_287 = happySpecReduce_1 116# happyReduction_287 -happyReduction_287 happy_x_1 - = case happyOut126 happy_x_1 of { happy_var_1 -> - happyIn125 - (happy_var_1 - )} - -happyReduce_288 = happyReduce 4# 117# happyReduction_288 -happyReduction_288 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_2 of { happy_var_2 -> - case happyOut190 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> - happyIn126 - (let Loc l (INLINE s) = happy_var_1 in InsInline (l <^^> happy_var_4 <** [l,happy_var_4]) s happy_var_2 happy_var_3 - ) `HappyStk` happyRest}}}} - -happyReduce_289 = happyMonadReduce 4# 118# happyReduction_289 -happyReduction_289 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> - case happyOut71 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> - case happyOut82 happy_x_4 of { happy_var_4 -> - ( do { -- no checkSimpleType happy_var_4 since dtype may contain type patterns - return (InsType (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4) })}}}} - ) (\r -> happyReturn (happyIn127 r)) - -happyReduce_290 = happyMonadReduce 4# 118# happyReduction_290 -happyReduction_290 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut82 happy_x_2 of { happy_var_2 -> - case happyOut98 happy_x_3 of { happy_var_3 -> - case happyOut110 happy_x_4 of { happy_var_4 -> - ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; - let {(ds,ss,minf) = happy_var_3}; - checkDataOrNew happy_var_1 ds; - return (InsData (happy_var_1 <> happy_var_2 <+?> minf <+?> fmap ann happy_var_4 <** ss ) happy_var_1 happy_var_2 (reverse ds) happy_var_4) })}}}} - ) (\r -> happyReturn (happyIn127 r)) - -happyReduce_291 = happyMonadReduce 5# 118# happyReduction_291 -happyReduction_291 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut82 happy_x_2 of { happy_var_2 -> - case happyOut116 happy_x_3 of { happy_var_3 -> - case happyOut94 happy_x_4 of { happy_var_4 -> - case happyOut110 happy_x_5 of { happy_var_5 -> - ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; - let { (gs,ss,minf) = happy_var_4 } ; - checkDataOrNew happy_var_1 gs; - return $ InsGData (ann happy_var_1 <+?> minf <+?> fmap ann happy_var_5 <** (snd happy_var_3 ++ ss)) happy_var_1 happy_var_2 (fst happy_var_3) (reverse gs) happy_var_5 })}}}}} - ) (\r -> happyReturn (happyIn127 r)) - -happyReduce_292 = happyMonadReduce 4# 119# happyReduction_292 -happyReduction_292 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOut130 happy_x_2 of { happy_var_2 -> - case happyOut131 happy_x_3 of { happy_var_3 -> - case happyOut129 happy_x_4 of { happy_var_4 -> - ( checkValDef ((happy_var_1 <> happy_var_3 <+?> (fmap ann) (fst happy_var_4)) <** (snd happy_var_2 ++ snd happy_var_4)) happy_var_1 (fst happy_var_2) happy_var_3 (fst happy_var_4))}}}} - ) (\r -> happyReturn (happyIn128 r)) - -happyReduce_293 = happyMonadReduce 4# 119# happyReduction_293 -happyReduction_293 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - case happyOut145 happy_x_2 of { happy_var_2 -> - case happyOut131 happy_x_3 of { happy_var_3 -> - case happyOut129 happy_x_4 of { happy_var_4 -> - ( do { checkEnabled BangPatterns ; - let { l = nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1] }; - p <- checkPattern (BangPat l happy_var_2); - return $ PatBind (p <> happy_var_3 <+?> (fmap ann) (fst happy_var_4) <** snd happy_var_4) - p Nothing happy_var_3 (fst happy_var_4) })}}}} - ) (\r -> happyReturn (happyIn128 r)) - -happyReduce_294 = happySpecReduce_2 120# happyReduction_294 -happyReduction_294 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - case happyOut56 happy_x_2 of { happy_var_2 -> - happyIn129 - ((Just happy_var_2, [happy_var_1]) - )}} - -happyReduce_295 = happySpecReduce_0 120# happyReduction_295 -happyReduction_295 = happyIn129 - ((Nothing, []) - ) - -happyReduce_296 = happyMonadReduce 2# 121# happyReduction_296 -happyReduction_296 (happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 DoubleColon) -> - case happyOut82 happy_x_2 of { happy_var_2 -> - ( checkEnabled ScopedTypeVariables >> return (Just happy_var_2, [happy_var_1]))}} - ) (\r -> happyReturn (happyIn130 r)) - -happyReduce_297 = happySpecReduce_0 121# happyReduction_297 -happyReduction_297 = happyIn130 - ((Nothing,[]) - ) - -happyReduce_298 = happySpecReduce_2 122# happyReduction_298 -happyReduction_298 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Equals) -> - case happyOut134 happy_x_2 of { happy_var_2 -> - happyIn131 - (UnGuardedRhs (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_299 = happySpecReduce_1 122# happyReduction_299 -happyReduction_299 happy_x_1 - = case happyOut132 happy_x_1 of { happy_var_1 -> - happyIn131 - (GuardedRhss (snd happy_var_1) (reverse $ fst happy_var_1) - )} - -happyReduce_300 = happySpecReduce_2 123# happyReduction_300 -happyReduction_300 happy_x_2 - happy_x_1 - = case happyOut132 happy_x_1 of { happy_var_1 -> - case happyOut133 happy_x_2 of { happy_var_2 -> - happyIn132 - ((happy_var_2 : fst happy_var_1, snd happy_var_1 <++> ann happy_var_2) - )}} - -happyReduce_301 = happySpecReduce_1 123# happyReduction_301 -happyReduction_301 happy_x_1 - = case happyOut133 happy_x_1 of { happy_var_1 -> - happyIn132 - (([happy_var_1],ann happy_var_1) - )} - -happyReduce_302 = happyMonadReduce 4# 124# happyReduction_302 -happyReduction_302 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Bar) -> - case happyOut168 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> - case happyOut134 happy_x_4 of { happy_var_4 -> - ( do { checkPatternGuards (fst happy_var_2); - return $ GuardedRhs (nIS happy_var_1 <++> ann happy_var_4 <** (happy_var_1:snd happy_var_2 ++ [happy_var_3])) (reverse (fst happy_var_2)) happy_var_4 })}}}} - ) (\r -> happyReturn (happyIn133 r)) - -happyReduce_303 = happyMonadReduce 1# 125# happyReduction_303 -happyReduction_303 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut135 happy_x_1 of { happy_var_1 -> - ( checkExpr happy_var_1)} - ) (\r -> happyReturn (happyIn134 r)) - -happyReduce_304 = happySpecReduce_3 126# happyReduction_304 -happyReduction_304 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> - case happyOut82 happy_x_3 of { happy_var_3 -> - happyIn135 - (ExpTypeSig (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_305 = happySpecReduce_1 126# happyReduction_305 -happyReduction_305 happy_x_1 - = case happyOut136 happy_x_1 of { happy_var_1 -> - happyIn135 - (happy_var_1 - )} - -happyReduce_306 = happySpecReduce_2 126# happyReduction_306 -happyReduction_306 happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOut200 happy_x_2 of { happy_var_2 -> - happyIn135 - (PostOp (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 - )}} - -happyReduce_307 = happySpecReduce_3 126# happyReduction_307 -happyReduction_307 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftArrowTail) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn135 - (LeftArrApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_308 = happySpecReduce_3 126# happyReduction_308 -happyReduction_308 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrowTail) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn135 - (RightArrApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_309 = happySpecReduce_3 126# happyReduction_309 -happyReduction_309 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftDblArrowTail) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn135 - (LeftArrHighApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_310 = happySpecReduce_3 126# happyReduction_310 -happyReduction_310 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightDblArrowTail) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn135 - (RightArrHighApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_311 = happySpecReduce_1 127# happyReduction_311 -happyReduction_311 happy_x_1 - = case happyOut137 happy_x_1 of { happy_var_1 -> - happyIn136 - (happy_var_1 - )} - -happyReduce_312 = happySpecReduce_1 127# happyReduction_312 -happyReduction_312 happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - happyIn136 - (happy_var_1 - )} - -happyReduce_313 = happySpecReduce_3 128# happyReduction_313 -happyReduction_313 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOut200 happy_x_2 of { happy_var_2 -> - case happyOut139 happy_x_3 of { happy_var_3 -> - happyIn137 - (InfixApp (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 - )}}} - -happyReduce_314 = happySpecReduce_1 128# happyReduction_314 -happyReduction_314 happy_x_1 - = case happyOut139 happy_x_1 of { happy_var_1 -> - happyIn137 - (happy_var_1 - )} - -happyReduce_315 = happySpecReduce_3 129# happyReduction_315 -happyReduction_315 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOut200 happy_x_2 of { happy_var_2 -> - case happyOut140 happy_x_3 of { happy_var_3 -> - happyIn138 - (InfixApp (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 - )}}} - -happyReduce_316 = happySpecReduce_1 129# happyReduction_316 -happyReduction_316 happy_x_1 - = case happyOut140 happy_x_1 of { happy_var_1 -> - happyIn138 - (happy_var_1 - )} - -happyReduce_317 = happyReduce 4# 130# happyReduction_317 -happyReduction_317 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Backslash) -> - case happyOut143 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightArrow) -> - case happyOut135 happy_x_4 of { happy_var_4 -> - happyIn139 - (Lambda (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) (reverse happy_var_2) happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_318 = happyReduce 4# 130# happyReduction_318 -happyReduction_318 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> - case happyOut56 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_In) -> - case happyOut135 happy_x_4 of { happy_var_4 -> - happyIn139 - (Let (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_319 = happyReduce 6# 130# happyReduction_319 -happyReduction_319 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_If) -> - case happyOut135 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_Then) -> - case happyOut135 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 KW_Else) -> - case happyOut135 happy_x_6 of { happy_var_6 -> - happyIn139 - (If (nIS happy_var_1 <++> ann happy_var_6 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 happy_var_6 - ) `HappyStk` happyRest}}}}}} - -happyReduce_320 = happyReduce 4# 130# happyReduction_320 -happyReduction_320 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Proc) -> - case happyOut144 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightArrow) -> - case happyOut135 happy_x_4 of { happy_var_4 -> - happyIn139 - (Proc (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_321 = happySpecReduce_1 130# happyReduction_321 -happyReduction_321 happy_x_1 - = case happyOut141 happy_x_1 of { happy_var_1 -> - happyIn139 - (happy_var_1 - )} - -happyReduce_322 = happyReduce 4# 131# happyReduction_322 -happyReduction_322 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Case) -> - case happyOut135 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_Of) -> - case happyOut170 happy_x_4 of { happy_var_4 -> - happyIn140 - (let (als, inf, ss) = happy_var_4 in Case (nIS happy_var_1 <++> inf <** (happy_var_1:happy_var_3:ss)) happy_var_2 als - ) `HappyStk` happyRest}}}} - -happyReduce_323 = happySpecReduce_2 131# happyReduction_323 -happyReduction_323 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Minus) -> - case happyOut142 happy_x_2 of { happy_var_2 -> - happyIn140 - (NegApp (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_324 = happySpecReduce_2 131# happyReduction_324 -happyReduction_324 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Do) -> - case happyOut178 happy_x_2 of { happy_var_2 -> - happyIn140 - (let (sts, inf, ss) = happy_var_2 in Do (nIS happy_var_1 <++> inf <** happy_var_1:ss) sts - )}} - -happyReduce_325 = happySpecReduce_2 131# happyReduction_325 -happyReduction_325 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_MDo) -> - case happyOut178 happy_x_2 of { happy_var_2 -> - happyIn140 - (let (sts, inf, ss) = happy_var_2 in MDo (nIS happy_var_1 <++> inf <** happy_var_1:ss) sts - )}} - -happyReduce_326 = happySpecReduce_1 131# happyReduction_326 -happyReduction_326 happy_x_1 - = case happyOut142 happy_x_1 of { happy_var_1 -> - happyIn140 - (happy_var_1 - )} - -happyReduce_327 = happyReduce 4# 132# happyReduction_327 -happyReduction_327 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 CORE) -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - case happyOut135 happy_x_4 of { happy_var_4 -> - happyIn141 - (let Loc l (StringTok (s,_)) = happy_var_2 in CorePragma (nIS happy_var_1 <++> ann happy_var_4 <** [l,happy_var_3]) s happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_328 = happyReduce 4# 132# happyReduction_328 -happyReduction_328 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 SCC) -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> - case happyOut135 happy_x_4 of { happy_var_4 -> - happyIn141 - (let Loc l (StringTok (s,_)) = happy_var_2 in SCCPragma (nIS happy_var_1 <++> ann happy_var_4 <** [l,happy_var_3]) s happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_329 = happyReduce 11# 132# happyReduction_329 -happyReduction_329 (happy_x_11 `HappyStk` - happy_x_10 `HappyStk` - happy_x_9 `HappyStk` - happy_x_8 `HappyStk` - happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 GENERATED) -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 Colon) -> - case happyOutTok happy_x_5 of { happy_var_5 -> - case happyOutTok happy_x_6 of { (Loc happy_var_6 Minus) -> - case happyOutTok happy_x_7 of { happy_var_7 -> - case happyOutTok happy_x_8 of { (Loc happy_var_8 Colon) -> - case happyOutTok happy_x_9 of { happy_var_9 -> - case happyOutTok happy_x_10 of { (Loc happy_var_10 PragmaEnd) -> - case happyOut135 happy_x_11 of { happy_var_11 -> - happyIn141 - (let { Loc l0 (StringTok (s,_)) = happy_var_2; - Loc l1 (IntTok (i1,_)) = happy_var_3; - Loc l2 (IntTok (i2,_)) = happy_var_5; - Loc l3 (IntTok (i3,_)) = happy_var_7; - Loc l4 (IntTok (i4,_)) = happy_var_9} - in GenPragma (nIS happy_var_1 <++> ann happy_var_11 <** [happy_var_1,l0,l1,happy_var_4,l2,happy_var_6,l3,happy_var_8,l4,happy_var_10]) - s (fromInteger i1, fromInteger i2) - (fromInteger i3, fromInteger i4) happy_var_11 - ) `HappyStk` happyRest}}}}}}}}}}} - -happyReduce_330 = happySpecReduce_2 133# happyReduction_330 -happyReduction_330 happy_x_2 - happy_x_1 - = case happyOut142 happy_x_1 of { happy_var_1 -> - case happyOut145 happy_x_2 of { happy_var_2 -> - happyIn142 - (App (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 - )}} - -happyReduce_331 = happySpecReduce_1 133# happyReduction_331 -happyReduction_331 happy_x_1 - = case happyOut145 happy_x_1 of { happy_var_1 -> - happyIn142 - (happy_var_1 - )} - -happyReduce_332 = happySpecReduce_2 134# happyReduction_332 -happyReduction_332 happy_x_2 - happy_x_1 - = case happyOut143 happy_x_1 of { happy_var_1 -> - case happyOut144 happy_x_2 of { happy_var_2 -> - happyIn143 - (happy_var_2 : happy_var_1 - )}} - -happyReduce_333 = happySpecReduce_1 134# happyReduction_333 -happyReduction_333 happy_x_1 - = case happyOut144 happy_x_1 of { happy_var_1 -> - happyIn143 - ([happy_var_1] - )} - -happyReduce_334 = happyMonadReduce 1# 135# happyReduction_334 -happyReduction_334 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut145 happy_x_1 of { happy_var_1 -> - ( checkPattern happy_var_1)} - ) (\r -> happyReturn (happyIn144 r)) - -happyReduce_335 = happyMonadReduce 2# 135# happyReduction_335 -happyReduction_335 (happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - case happyOut145 happy_x_2 of { happy_var_2 -> - ( checkPattern (BangPat (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2))}} - ) (\r -> happyReturn (happyIn144 r)) - -happyReduce_336 = happyMonadReduce 3# 136# happyReduction_336 -happyReduction_336 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut190 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 At) -> - case happyOut145 happy_x_3 of { happy_var_3 -> - ( do { n <- checkUnQual happy_var_1; - return (AsPat (happy_var_1 <> happy_var_3 <** [happy_var_2]) n happy_var_3) })}}} - ) (\r -> happyReturn (happyIn145 r)) - -happyReduce_337 = happyMonadReduce 3# 136# happyReduction_337 -happyReduction_337 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut190 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RPCAt) -> - case happyOut145 happy_x_3 of { happy_var_3 -> - ( do { n <- checkUnQual happy_var_1; - return (CAsRP (happy_var_1 <> happy_var_3 <** [happy_var_2]) n happy_var_3) })}}} - ) (\r -> happyReturn (happyIn145 r)) - -happyReduce_338 = happySpecReduce_2 136# happyReduction_338 -happyReduction_338 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Tilde) -> - case happyOut145 happy_x_2 of { happy_var_2 -> - happyIn145 - (IrrPat (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_339 = happySpecReduce_1 136# happyReduction_339 -happyReduction_339 happy_x_1 - = case happyOut146 happy_x_1 of { happy_var_1 -> - happyIn145 - (happy_var_1 - )} - -happyReduce_340 = happyMonadReduce 3# 137# happyReduction_340 -happyReduction_340 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut146 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> - ( liftM (amap (const (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]))) $ mkRecConstrOrUpdate happy_var_1 [])}}} - ) (\r -> happyReturn (happyIn146 r)) - -happyReduce_341 = happyMonadReduce 4# 137# happyReduction_341 -happyReduction_341 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut146 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> - case happyOut182 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> - ( liftM (amap (const (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])))) - $ mkRecConstrOrUpdate happy_var_1 (reverse (fst happy_var_3)))}}}} - ) (\r -> happyReturn (happyIn146 r)) - -happyReduce_342 = happyReduce 4# 137# happyReduction_342 -happyReduction_342 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut190 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurlyBar) -> - case happyOut73 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurlyBar) -> - happyIn146 - (ExplTypeArg (ann happy_var_1 <++> nIS happy_var_4 <** [happy_var_2,happy_var_4]) happy_var_1 happy_var_3 - ) `HappyStk` happyRest}}}} - -happyReduce_343 = happySpecReduce_1 137# happyReduction_343 -happyReduction_343 happy_x_1 - = case happyOut147 happy_x_1 of { happy_var_1 -> - happyIn146 - (happy_var_1 - )} - -happyReduce_344 = happySpecReduce_1 138# happyReduction_344 -happyReduction_344 happy_x_1 - = case happyOut191 happy_x_1 of { happy_var_1 -> - happyIn147 - (IPVar (ann happy_var_1) happy_var_1 - )} - -happyReduce_345 = happySpecReduce_1 138# happyReduction_345 -happyReduction_345 happy_x_1 - = case happyOut190 happy_x_1 of { happy_var_1 -> - happyIn147 - (Var (ann happy_var_1) happy_var_1 - )} - -happyReduce_346 = happySpecReduce_1 138# happyReduction_346 -happyReduction_346 happy_x_1 - = case happyOut187 happy_x_1 of { happy_var_1 -> - happyIn147 - (happy_var_1 - )} - -happyReduce_347 = happySpecReduce_1 138# happyReduction_347 -happyReduction_347 happy_x_1 - = case happyOut216 happy_x_1 of { happy_var_1 -> - happyIn147 - (Lit (ann happy_var_1) happy_var_1 - )} - -happyReduce_348 = happySpecReduce_3 138# happyReduction_348 -happyReduction_348 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut149 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn147 - (Paren (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 - )}}} - -happyReduce_349 = happySpecReduce_3 138# happyReduction_349 -happyReduction_349 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut149 happy_x_2 of { happy_var_2 -> - case happyOut150 happy_x_3 of { happy_var_3 -> - happyIn147 - (TupleSection (happy_var_1 <^^> head (snd happy_var_3) <** happy_var_1:reverse (snd happy_var_3)) (Just happy_var_2 : fst happy_var_3) - )}}} - -happyReduce_350 = happyReduce 4# 138# happyReduction_350 -happyReduction_350 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOut149 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> - happyIn147 - (TupleSection (happy_var_1 <^^> happy_var_4 <** happy_var_1:reverse (happy_var_4:happy_var_2)) - (replicate (length happy_var_2 - 1) Nothing ++ [Just happy_var_3]) - ) `HappyStk` happyRest}}}} - -happyReduce_351 = happyReduce 4# 138# happyReduction_351 -happyReduction_351 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOut149 happy_x_3 of { happy_var_3 -> - case happyOut150 happy_x_4 of { happy_var_4 -> - happyIn147 - (TupleSection (happy_var_1 <^^> head (snd happy_var_4) <** happy_var_1:reverse (snd happy_var_4 ++ happy_var_2)) - (replicate (length happy_var_2 - 1) Nothing ++ Just happy_var_3 : fst happy_var_4) - ) `HappyStk` happyRest}}}} - -happyReduce_352 = happySpecReduce_3 138# happyReduction_352 -happyReduction_352 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> - case happyOut162 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightSquare) -> - happyIn147 - (amap (\l -> l <** [happy_var_3]) $ happy_var_2 (happy_var_1 <^^> happy_var_3 <** [happy_var_1]) - )}}} - -happyReduce_353 = happySpecReduce_1 138# happyReduction_353 -happyReduction_353 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Underscore) -> - happyIn147 - (WildCard (nIS happy_var_1) - )} - -happyReduce_354 = happyMonadReduce 3# 138# happyReduction_354 -happyReduction_354 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut152 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - ( checkEnabled RegularPatterns >> return (Paren (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2))}}} - ) (\r -> happyReturn (happyIn147 r)) - -happyReduce_355 = happySpecReduce_3 138# happyReduction_355 -happyReduction_355 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 RPGuardOpen) -> - case happyOut151 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RPGuardClose) -> - happyIn147 - (SeqRP (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse (snd happy_var_2) ++ [happy_var_3])) $ reverse (fst happy_var_2) - )}}} - -happyReduce_356 = happyReduce 5# 138# happyReduction_356 -happyReduction_356 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 RPGuardOpen) -> - case happyOut135 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 Bar) -> - case happyOut168 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 RPGuardClose) -> - happyIn147 - (GuardRP (happy_var_1 <^^> happy_var_5 <** (happy_var_1:happy_var_3 : snd happy_var_4 ++ [happy_var_5])) happy_var_2 $ (reverse $ fst happy_var_4) - ) `HappyStk` happyRest}}}}} - -happyReduce_357 = happySpecReduce_1 138# happyReduction_357 -happyReduction_357 happy_x_1 - = case happyOut153 happy_x_1 of { happy_var_1 -> - happyIn147 - (happy_var_1 - )} - -happyReduce_358 = happySpecReduce_1 138# happyReduction_358 -happyReduction_358 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn147 - (let Loc l (THIdEscape s) = happy_var_1 in SpliceExp (nIS l) $ IdSplice (nIS l) s - )} - -happyReduce_359 = happySpecReduce_3 138# happyReduction_359 -happyReduction_359 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THParenEscape) -> - case happyOut134 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn147 - (SpliceExp (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ ParenSplice (ann happy_var_2) happy_var_2 - )}}} - -happyReduce_360 = happySpecReduce_3 138# happyReduction_360 -happyReduction_360 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THExpQuote) -> - case happyOut134 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 THCloseQuote) -> - happyIn147 - (BracketExp (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ ExpBracket (ann happy_var_2) happy_var_2 - )}}} - -happyReduce_361 = happyMonadReduce 3# 138# happyReduction_361 -happyReduction_361 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 THPatQuote) -> - case happyOut136 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 THCloseQuote) -> - ( do { p <- checkPattern happy_var_2; - return $ BracketExp (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ PatBracket (ann p) p })}}} - ) (\r -> happyReturn (happyIn147 r)) - -happyReduce_362 = happySpecReduce_3 138# happyReduction_362 -happyReduction_362 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THTypQuote) -> - case happyOut82 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 THCloseQuote) -> - happyIn147 - (let l = happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3] in BracketExp l $ TypeBracket l happy_var_2 - )}}} - -happyReduce_363 = happyReduce 5# 138# happyReduction_363 -happyReduction_363 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THDecQuote) -> - case happyOut44 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 THCloseQuote) -> - happyIn147 - (let l = happy_var_1 <^^> happy_var_5 <** (happy_var_1:snd happy_var_3 ++ [happy_var_5]) in BracketExp l $ DeclBracket l (fst happy_var_3) - ) `HappyStk` happyRest}}} - -happyReduce_364 = happySpecReduce_2 138# happyReduction_364 -happyReduction_364 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THVarQuote) -> - case happyOut190 happy_x_2 of { happy_var_2 -> - happyIn147 - (VarQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_365 = happySpecReduce_2 138# happyReduction_365 -happyReduction_365 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THVarQuote) -> - case happyOut193 happy_x_2 of { happy_var_2 -> - happyIn147 - (VarQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_366 = happySpecReduce_2 138# happyReduction_366 -happyReduction_366 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THTyQuote) -> - case happyOut222 happy_x_2 of { happy_var_2 -> - happyIn147 - (TypQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) (UnQual (ann happy_var_2) happy_var_2) - )}} - -happyReduce_367 = happySpecReduce_2 138# happyReduction_367 -happyReduction_367 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 THTyQuote) -> - case happyOut79 happy_x_2 of { happy_var_2 -> - happyIn147 - (TypQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_368 = happySpecReduce_1 138# happyReduction_368 -happyReduction_368 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn147 - (let Loc l (THQuasiQuote (n,q)) = happy_var_1 in QuasiQuote (nIS l) n q - )} - -happyReduce_369 = happySpecReduce_2 139# happyReduction_369 -happyReduction_369 happy_x_2 - happy_x_1 - = case happyOut148 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - happyIn148 - (happy_var_2 : happy_var_1 - )}} - -happyReduce_370 = happySpecReduce_1 139# happyReduction_370 -happyReduction_370 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Comma) -> - happyIn148 - ([happy_var_1] - )} - -happyReduce_371 = happySpecReduce_1 140# happyReduction_371 -happyReduction_371 happy_x_1 - = case happyOut135 happy_x_1 of { happy_var_1 -> - happyIn149 - (happy_var_1 - )} - -happyReduce_372 = happySpecReduce_2 140# happyReduction_372 -happyReduction_372 happy_x_2 - happy_x_1 - = case happyOut201 happy_x_1 of { happy_var_1 -> - case happyOut136 happy_x_2 of { happy_var_2 -> - happyIn149 - (PreOp (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 - )}} - -happyReduce_373 = happyMonadReduce 3# 140# happyReduction_373 -happyReduction_373 (happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut135 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - ( do {checkEnabled ViewPatterns; - return $ ViewPat (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3})}}} - ) (\r -> happyReturn (happyIn149 r)) - -happyReduce_374 = happySpecReduce_3 141# happyReduction_374 -happyReduction_374 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut148 happy_x_1 of { happy_var_1 -> - case happyOut149 happy_x_2 of { happy_var_2 -> - case happyOut150 happy_x_3 of { happy_var_3 -> - happyIn150 - (let (mes, ss) = happy_var_3 in (replicate (length happy_var_1 - 1) Nothing ++ Just happy_var_2 : mes, ss ++ happy_var_1) - )}}} - -happyReduce_375 = happySpecReduce_3 141# happyReduction_375 -happyReduction_375 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut148 happy_x_1 of { happy_var_1 -> - case happyOut149 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn150 - ((replicate (length happy_var_1 - 1) Nothing ++ [Just happy_var_2], happy_var_3 : happy_var_1) - )}}} - -happyReduce_376 = happySpecReduce_2 141# happyReduction_376 -happyReduction_376 happy_x_2 - happy_x_1 - = case happyOut148 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightParen) -> - happyIn150 - ((replicate (length happy_var_1) Nothing, happy_var_2 : happy_var_1) - )}} - -happyReduce_377 = happySpecReduce_3 142# happyReduction_377 -happyReduction_377 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut151 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn151 - ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) - )}}} - -happyReduce_378 = happySpecReduce_1 142# happyReduction_378 -happyReduction_378 happy_x_1 - = case happyOut135 happy_x_1 of { happy_var_1 -> - happyIn151 - (([happy_var_1],[]) - )} - -happyReduce_379 = happySpecReduce_3 143# happyReduction_379 -happyReduction_379 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut135 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> - case happyOut152 happy_x_3 of { happy_var_3 -> - happyIn152 - (EitherRP (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_380 = happySpecReduce_3 143# happyReduction_380 -happyReduction_380 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut135 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn152 - (EitherRP (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_381 = happyMonadReduce 9# 144# happyReduction_381 -happyReduction_381 (happy_x_9 `HappyStk` - happy_x_8 `HappyStk` - happy_x_7 `HappyStk` - happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> - case happyOut156 happy_x_2 of { happy_var_2 -> - case happyOut159 happy_x_3 of { happy_var_3 -> - case happyOut161 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 XStdTagClose) -> - case happyOut154 happy_x_6 of { happy_var_6 -> - case happyOutTok happy_x_7 of { (Loc happy_var_7 XCloseTagOpen) -> - case happyOut156 happy_x_8 of { happy_var_8 -> - case happyOutTok happy_x_9 of { (Loc happy_var_9 XStdTagClose) -> - ( do { n <- checkEqNames happy_var_2 happy_var_8; - let { cn = reverse happy_var_6; - as = reverse happy_var_3; - l = happy_var_1 <^^> happy_var_9 <** [happy_var_1,happy_var_5,happy_var_7,srcInfoSpan (ann happy_var_8),happy_var_9] }; - return $ XTag l n as happy_var_4 cn })}}}}}}}}} - ) (\r -> happyReturn (happyIn153 r)) - -happyReduce_382 = happyReduce 5# 144# happyReduction_382 -happyReduction_382 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> - case happyOut156 happy_x_2 of { happy_var_2 -> - case happyOut159 happy_x_3 of { happy_var_3 -> - case happyOut161 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 XEmptyTagClose) -> - happyIn153 - (XETag (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_5]) happy_var_2 (reverse happy_var_3) happy_var_4 - ) `HappyStk` happyRest}}}}} - -happyReduce_383 = happySpecReduce_3 144# happyReduction_383 -happyReduction_383 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 XCodeTagOpen) -> - case happyOut135 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 XCodeTagClose) -> - happyIn153 - (XExpTag (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 - )}}} - -happyReduce_384 = happySpecReduce_2 145# happyReduction_384 -happyReduction_384 happy_x_2 - happy_x_1 - = case happyOut154 happy_x_1 of { happy_var_1 -> - case happyOut155 happy_x_2 of { happy_var_2 -> - happyIn154 - (happy_var_2 : happy_var_1 - )}} - -happyReduce_385 = happySpecReduce_0 145# happyReduction_385 -happyReduction_385 = happyIn154 - ([] - ) - -happyReduce_386 = happySpecReduce_1 146# happyReduction_386 -happyReduction_386 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn155 - (let Loc l (XPCDATA pcd) = happy_var_1 in XPcdata (nIS l) pcd - )} - -happyReduce_387 = happySpecReduce_3 146# happyReduction_387 -happyReduction_387 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 XRPatOpen) -> - case happyOut151 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 XRPatClose) -> - happyIn155 - (XRPats (happy_var_1 <^^> happy_var_3 <** (snd happy_var_2 ++ [happy_var_1,happy_var_3])) $ reverse (fst happy_var_2) - )}}} - -happyReduce_388 = happySpecReduce_1 146# happyReduction_388 -happyReduction_388 happy_x_1 - = case happyOut153 happy_x_1 of { happy_var_1 -> - happyIn155 - (happy_var_1 - )} - -happyReduce_389 = happySpecReduce_3 147# happyReduction_389 -happyReduction_389 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut157 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Colon) -> - case happyOut157 happy_x_3 of { happy_var_3 -> - happyIn156 - (let {Loc l1 s1 = happy_var_1; Loc l2 s2 = happy_var_3} - in XDomName (nIS l1 <++> nIS l2 <** [l1,happy_var_2,l2]) s1 s2 - )}}} - -happyReduce_390 = happySpecReduce_1 147# happyReduction_390 -happyReduction_390 happy_x_1 - = case happyOut157 happy_x_1 of { happy_var_1 -> - happyIn156 - (let Loc l str = happy_var_1 in XName (nIS l) str - )} - -happyReduce_391 = happySpecReduce_1 148# happyReduction_391 -happyReduction_391 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn157 - (let Loc l (VarId s) = happy_var_1 in Loc l s - )} - -happyReduce_392 = happySpecReduce_1 148# happyReduction_392 -happyReduction_392 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn157 - (let Loc l (ConId s) = happy_var_1 in Loc l s - )} - -happyReduce_393 = happySpecReduce_1 148# happyReduction_393 -happyReduction_393 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn157 - (let Loc l (DVarId s) = happy_var_1 in Loc l $ mkDVar s - )} - -happyReduce_394 = happySpecReduce_1 148# happyReduction_394 -happyReduction_394 happy_x_1 - = case happyOut158 happy_x_1 of { happy_var_1 -> - happyIn157 - (happy_var_1 - )} - -happyReduce_395 = happySpecReduce_1 149# happyReduction_395 -happyReduction_395 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> - happyIn158 - (Loc happy_var_1 "type" - )} - -happyReduce_396 = happySpecReduce_1 149# happyReduction_396 -happyReduction_396 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Class) -> - happyIn158 - (Loc happy_var_1 "class" - )} - -happyReduce_397 = happySpecReduce_1 149# happyReduction_397 -happyReduction_397 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> - happyIn158 - (Loc happy_var_1 "data" - )} - -happyReduce_398 = happySpecReduce_1 149# happyReduction_398 -happyReduction_398 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Foreign) -> - happyIn158 - (Loc happy_var_1 "foreign" - )} - -happyReduce_399 = happySpecReduce_1 149# happyReduction_399 -happyReduction_399 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Export) -> - happyIn158 - (Loc happy_var_1 "export" - )} - -happyReduce_400 = happySpecReduce_1 149# happyReduction_400 -happyReduction_400 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Safe) -> - happyIn158 - (Loc happy_var_1 "safe" - )} - -happyReduce_401 = happySpecReduce_1 149# happyReduction_401 -happyReduction_401 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Unsafe) -> - happyIn158 - (Loc happy_var_1 "unsafe" - )} - -happyReduce_402 = happySpecReduce_1 149# happyReduction_402 -happyReduction_402 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Threadsafe) -> - happyIn158 - (Loc happy_var_1 "threadsafe" - )} - -happyReduce_403 = happySpecReduce_1 149# happyReduction_403 -happyReduction_403 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_StdCall) -> - happyIn158 - (Loc happy_var_1 "stdcall" - )} - -happyReduce_404 = happySpecReduce_1 149# happyReduction_404 -happyReduction_404 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_CCall) -> - happyIn158 - (Loc happy_var_1 "ccall" - )} - -happyReduce_405 = happySpecReduce_1 149# happyReduction_405 -happyReduction_405 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_As) -> - happyIn158 - (Loc happy_var_1 "as" - )} - -happyReduce_406 = happySpecReduce_1 149# happyReduction_406 -happyReduction_406 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_By) -> - happyIn158 - (Loc happy_var_1 "by" - )} - -happyReduce_407 = happySpecReduce_1 149# happyReduction_407 -happyReduction_407 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Case) -> - happyIn158 - (Loc happy_var_1 "case" - )} - -happyReduce_408 = happySpecReduce_1 149# happyReduction_408 -happyReduction_408 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Default) -> - happyIn158 - (Loc happy_var_1 "default" - )} - -happyReduce_409 = happySpecReduce_1 149# happyReduction_409 -happyReduction_409 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> - happyIn158 - (Loc happy_var_1 "deriving" - )} - -happyReduce_410 = happySpecReduce_1 149# happyReduction_410 -happyReduction_410 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Do) -> - happyIn158 - (Loc happy_var_1 "do" - )} - -happyReduce_411 = happySpecReduce_1 149# happyReduction_411 -happyReduction_411 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Else) -> - happyIn158 - (Loc happy_var_1 "else" - )} - -happyReduce_412 = happySpecReduce_1 149# happyReduction_412 -happyReduction_412 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Family) -> - happyIn158 - (Loc happy_var_1 "family" - )} - -happyReduce_413 = happySpecReduce_1 149# happyReduction_413 -happyReduction_413 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> - happyIn158 - (Loc happy_var_1 "forall" - )} - -happyReduce_414 = happySpecReduce_1 149# happyReduction_414 -happyReduction_414 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Group) -> - happyIn158 - (Loc happy_var_1 "group" - )} - -happyReduce_415 = happySpecReduce_1 149# happyReduction_415 -happyReduction_415 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Hiding) -> - happyIn158 - (Loc happy_var_1 "hiding" - )} - -happyReduce_416 = happySpecReduce_1 149# happyReduction_416 -happyReduction_416 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_If) -> - happyIn158 - (Loc happy_var_1 "if" - )} - -happyReduce_417 = happySpecReduce_1 149# happyReduction_417 -happyReduction_417 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Import) -> - happyIn158 - (Loc happy_var_1 "import" - )} - -happyReduce_418 = happySpecReduce_1 149# happyReduction_418 -happyReduction_418 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_In) -> - happyIn158 - (Loc happy_var_1 "in" - )} - -happyReduce_419 = happySpecReduce_1 149# happyReduction_419 -happyReduction_419 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Infix) -> - happyIn158 - (Loc happy_var_1 "infix" - )} - -happyReduce_420 = happySpecReduce_1 149# happyReduction_420 -happyReduction_420 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixL) -> - happyIn158 - (Loc happy_var_1 "infixl" - )} - -happyReduce_421 = happySpecReduce_1 149# happyReduction_421 -happyReduction_421 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixR) -> - happyIn158 - (Loc happy_var_1 "infixr" - )} - -happyReduce_422 = happySpecReduce_1 149# happyReduction_422 -happyReduction_422 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Instance) -> - happyIn158 - (Loc happy_var_1 "instance" - )} - -happyReduce_423 = happySpecReduce_1 149# happyReduction_423 -happyReduction_423 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> - happyIn158 - (Loc happy_var_1 "let" - )} - -happyReduce_424 = happySpecReduce_1 149# happyReduction_424 -happyReduction_424 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_MDo) -> - happyIn158 - (Loc happy_var_1 "mdo" - )} - -happyReduce_425 = happySpecReduce_1 149# happyReduction_425 -happyReduction_425 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Module) -> - happyIn158 - (Loc happy_var_1 "module" - )} - -happyReduce_426 = happySpecReduce_1 149# happyReduction_426 -happyReduction_426 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_NewType) -> - happyIn158 - (Loc happy_var_1 "newtype" - )} - -happyReduce_427 = happySpecReduce_1 149# happyReduction_427 -happyReduction_427 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Of) -> - happyIn158 - (Loc happy_var_1 "of" - )} - -happyReduce_428 = happySpecReduce_1 149# happyReduction_428 -happyReduction_428 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Proc) -> - happyIn158 - (Loc happy_var_1 "proc" - )} - -happyReduce_429 = happySpecReduce_1 149# happyReduction_429 -happyReduction_429 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Rec) -> - happyIn158 - (Loc happy_var_1 "rec" - )} - -happyReduce_430 = happySpecReduce_1 149# happyReduction_430 -happyReduction_430 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> - happyIn158 - (Loc happy_var_1 "then" - )} - -happyReduce_431 = happySpecReduce_1 149# happyReduction_431 -happyReduction_431 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Using) -> - happyIn158 - (Loc happy_var_1 "using" - )} - -happyReduce_432 = happySpecReduce_1 149# happyReduction_432 -happyReduction_432 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> - happyIn158 - (Loc happy_var_1 "where" - )} - -happyReduce_433 = happySpecReduce_1 149# happyReduction_433 -happyReduction_433 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Qualified) -> - happyIn158 - (Loc happy_var_1 "qualified" - )} - -happyReduce_434 = happySpecReduce_2 150# happyReduction_434 -happyReduction_434 happy_x_2 - happy_x_1 - = case happyOut159 happy_x_1 of { happy_var_1 -> - case happyOut160 happy_x_2 of { happy_var_2 -> - happyIn159 - (happy_var_2 : happy_var_1 - )}} - -happyReduce_435 = happySpecReduce_0 150# happyReduction_435 -happyReduction_435 = happyIn159 - ([] - ) - -happyReduce_436 = happySpecReduce_3 151# happyReduction_436 -happyReduction_436 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut156 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Equals) -> - case happyOut145 happy_x_3 of { happy_var_3 -> - happyIn160 - (XAttr (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_437 = happySpecReduce_1 152# happyReduction_437 -happyReduction_437 happy_x_1 - = case happyOut145 happy_x_1 of { happy_var_1 -> - happyIn161 - (Just happy_var_1 - )} - -happyReduce_438 = happySpecReduce_0 152# happyReduction_438 -happyReduction_438 = happyIn161 - (Nothing - ) - -happyReduce_439 = happySpecReduce_1 153# happyReduction_439 -happyReduction_439 happy_x_1 - = case happyOut149 happy_x_1 of { happy_var_1 -> - happyIn162 - (\l -> List l [happy_var_1] - )} - -happyReduce_440 = happySpecReduce_1 153# happyReduction_440 -happyReduction_440 happy_x_1 - = case happyOut163 happy_x_1 of { happy_var_1 -> - happyIn162 - (\l -> let (ps,ss) = happy_var_1 in List (l <** reverse ss) (reverse ps) - )} - -happyReduce_441 = happySpecReduce_2 153# happyReduction_441 -happyReduction_441 happy_x_2 - happy_x_1 - = case happyOut149 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DotDot) -> - happyIn162 - (\l -> EnumFrom (l <** [happy_var_2]) happy_var_1 - )}} - -happyReduce_442 = happyReduce 4# 153# happyReduction_442 -happyReduction_442 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut149 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 DotDot) -> - happyIn162 - (\l -> EnumFromThen (l <** [happy_var_2,happy_var_4]) happy_var_1 happy_var_3 - ) `HappyStk` happyRest}}}} - -happyReduce_443 = happySpecReduce_3 153# happyReduction_443 -happyReduction_443 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut149 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 DotDot) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn162 - (\l -> EnumFromTo (l <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_444 = happyReduce 5# 153# happyReduction_444 -happyReduction_444 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut149 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (Loc happy_var_4 DotDot) -> - case happyOut135 happy_x_5 of { happy_var_5 -> - happyIn162 - (\l -> EnumFromThenTo (l <** [happy_var_2,happy_var_4]) happy_var_1 happy_var_3 happy_var_5 - ) `HappyStk` happyRest}}}}} - -happyReduce_445 = happySpecReduce_3 153# happyReduction_445 -happyReduction_445 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut149 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> - case happyOut164 happy_x_3 of { happy_var_3 -> - happyIn162 - (\l -> let (stss, ss) = happy_var_3 in ParComp (l <** (happy_var_2:ss)) happy_var_1 (reverse stss) - )}}} - -happyReduce_446 = happySpecReduce_3 154# happyReduction_446 -happyReduction_446 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut163 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut149 happy_x_3 of { happy_var_3 -> - happyIn163 - (let (es, ss) = happy_var_1 in (happy_var_3 : es, happy_var_2 : ss) - )}}} - -happyReduce_447 = happySpecReduce_3 154# happyReduction_447 -happyReduction_447 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut149 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut149 happy_x_3 of { happy_var_3 -> - happyIn163 - (([happy_var_3,happy_var_1], [happy_var_2]) - )}}} - -happyReduce_448 = happySpecReduce_3 155# happyReduction_448 -happyReduction_448 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut164 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> - case happyOut165 happy_x_3 of { happy_var_3 -> - happyIn164 - (let { (stss, ss1) = happy_var_1; - (sts, ss2) = happy_var_3 } - in (reverse sts : stss, ss1 ++ [happy_var_2] ++ reverse ss2) - )}}} - -happyReduce_449 = happySpecReduce_1 155# happyReduction_449 -happyReduction_449 happy_x_1 - = case happyOut165 happy_x_1 of { happy_var_1 -> - happyIn164 - (let (sts, ss) = happy_var_1 in ([reverse sts], reverse ss) - )} - -happyReduce_450 = happySpecReduce_3 156# happyReduction_450 -happyReduction_450 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut166 happy_x_3 of { happy_var_3 -> - happyIn165 - (let (sts, ss) = happy_var_1 in (happy_var_3 : sts, happy_var_2 : ss) - )}}} - -happyReduce_451 = happySpecReduce_1 156# happyReduction_451 -happyReduction_451 happy_x_1 - = case happyOut166 happy_x_1 of { happy_var_1 -> - happyIn165 - (([happy_var_1],[]) - )} - -happyReduce_452 = happySpecReduce_1 157# happyReduction_452 -happyReduction_452 happy_x_1 - = case happyOut167 happy_x_1 of { happy_var_1 -> - happyIn166 - (happy_var_1 - )} - -happyReduce_453 = happySpecReduce_1 157# happyReduction_453 -happyReduction_453 happy_x_1 - = case happyOut169 happy_x_1 of { happy_var_1 -> - happyIn166 - (QualStmt (ann happy_var_1) happy_var_1 - )} - -happyReduce_454 = happySpecReduce_2 158# happyReduction_454 -happyReduction_454 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> - case happyOut134 happy_x_2 of { happy_var_2 -> - happyIn167 - (ThenTrans (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_455 = happyReduce 4# 158# happyReduction_455 -happyReduction_455 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> - case happyOut134 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_By) -> - case happyOut134 happy_x_4 of { happy_var_4 -> - happyIn167 - (ThenBy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_456 = happyReduce 4# 158# happyReduction_456 -happyReduction_456 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Group) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_By) -> - case happyOut134 happy_x_4 of { happy_var_4 -> - happyIn167 - (GroupBy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_457 = happyReduce 4# 158# happyReduction_457 -happyReduction_457 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Group) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_Using) -> - case happyOut134 happy_x_4 of { happy_var_4 -> - happyIn167 - (GroupUsing (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_458 = happyReduce 6# 158# happyReduction_458 -happyReduction_458 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Group) -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_By) -> - case happyOut134 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (Loc happy_var_5 KW_Using) -> - case happyOut134 happy_x_6 of { happy_var_6 -> - happyIn167 - (GroupByUsing (nIS happy_var_1 <++> ann happy_var_6 <** [happy_var_1,happy_var_2,happy_var_3,happy_var_5]) happy_var_4 happy_var_6 - ) `HappyStk` happyRest}}}}}} - -happyReduce_459 = happySpecReduce_3 159# happyReduction_459 -happyReduction_459 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut168 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut169 happy_x_3 of { happy_var_3 -> - happyIn168 - (let (sts, ss) = happy_var_1 in (happy_var_3 : sts, happy_var_2 : ss) - )}}} - -happyReduce_460 = happySpecReduce_1 159# happyReduction_460 -happyReduction_460 happy_x_1 - = case happyOut169 happy_x_1 of { happy_var_1 -> - happyIn168 - (([happy_var_1],[]) - )} - -happyReduce_461 = happySpecReduce_3 160# happyReduction_461 -happyReduction_461 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut177 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftArrow) -> - case happyOut134 happy_x_3 of { happy_var_3 -> - happyIn169 - (Generator (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_462 = happySpecReduce_1 160# happyReduction_462 -happyReduction_462 happy_x_1 - = case happyOut134 happy_x_1 of { happy_var_1 -> - happyIn169 - (Qualifier (ann happy_var_1) happy_var_1 - )} - -happyReduce_463 = happySpecReduce_2 160# happyReduction_463 -happyReduction_463 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> - case happyOut56 happy_x_2 of { happy_var_2 -> - happyIn169 - (LetStmt (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_464 = happySpecReduce_3 161# happyReduction_464 -happyReduction_464 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> - case happyOut171 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> - happyIn170 - ((fst happy_var_2, happy_var_1 <^^> happy_var_3, happy_var_1:snd happy_var_2 ++ [happy_var_3]) - )}}} - -happyReduce_465 = happySpecReduce_3 161# happyReduction_465 -happyReduction_465 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut217 happy_x_1 of { happy_var_1 -> - case happyOut171 happy_x_2 of { happy_var_2 -> - case happyOut218 happy_x_3 of { happy_var_3 -> - happyIn170 - ((fst happy_var_2, happy_var_1 <^^> happy_var_3, happy_var_1:snd happy_var_2 ++ [happy_var_3]) - )}}} - -happyReduce_466 = happySpecReduce_3 162# happyReduction_466 -happyReduction_466 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut172 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - happyIn171 - ((reverse $ fst happy_var_2, happy_var_1 ++ snd happy_var_2 ++ happy_var_3) - )}}} - -happyReduce_467 = happySpecReduce_3 163# happyReduction_467 -happyReduction_467 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut172 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut173 happy_x_3 of { happy_var_3 -> - happyIn172 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ happy_var_2) - )}}} - -happyReduce_468 = happySpecReduce_1 163# happyReduction_468 -happyReduction_468 happy_x_1 - = case happyOut173 happy_x_1 of { happy_var_1 -> - happyIn172 - (([happy_var_1],[]) - )} - -happyReduce_469 = happySpecReduce_3 164# happyReduction_469 -happyReduction_469 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut177 happy_x_1 of { happy_var_1 -> - case happyOut174 happy_x_2 of { happy_var_2 -> - case happyOut129 happy_x_3 of { happy_var_3 -> - happyIn173 - (Alt (happy_var_1 <> happy_var_2 <+?> (fmap ann) (fst happy_var_3) <** snd happy_var_3) happy_var_1 happy_var_2 (fst happy_var_3) - )}}} - -happyReduce_470 = happySpecReduce_2 165# happyReduction_470 -happyReduction_470 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 RightArrow) -> - case happyOut134 happy_x_2 of { happy_var_2 -> - happyIn174 - (UnGuardedAlt (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_471 = happySpecReduce_1 165# happyReduction_471 -happyReduction_471 happy_x_1 - = case happyOut175 happy_x_1 of { happy_var_1 -> - happyIn174 - (GuardedAlts (snd happy_var_1) (reverse $ fst happy_var_1) - )} - -happyReduce_472 = happySpecReduce_2 166# happyReduction_472 -happyReduction_472 happy_x_2 - happy_x_1 - = case happyOut175 happy_x_1 of { happy_var_1 -> - case happyOut176 happy_x_2 of { happy_var_2 -> - happyIn175 - ((happy_var_2 : fst happy_var_1, snd happy_var_1 <++> ann happy_var_2) - )}} - -happyReduce_473 = happySpecReduce_1 166# happyReduction_473 -happyReduction_473 happy_x_1 - = case happyOut176 happy_x_1 of { happy_var_1 -> - happyIn175 - (([happy_var_1], ann happy_var_1) - )} - -happyReduce_474 = happyMonadReduce 4# 167# happyReduction_474 -happyReduction_474 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Bar) -> - case happyOut168 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightArrow) -> - case happyOut134 happy_x_4 of { happy_var_4 -> - ( do { checkPatternGuards (fst happy_var_2); - let {l = nIS happy_var_1 <++> ann happy_var_4 <** (happy_var_1:snd happy_var_2 ++ [happy_var_3])}; - return (GuardedAlt l (reverse (fst happy_var_2)) happy_var_4) })}}}} - ) (\r -> happyReturn (happyIn176 r)) - -happyReduce_475 = happyMonadReduce 1# 168# happyReduction_475 -happyReduction_475 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut135 happy_x_1 of { happy_var_1 -> - ( checkPattern happy_var_1)} - ) (\r -> happyReturn (happyIn177 r)) - -happyReduce_476 = happyMonadReduce 2# 168# happyReduction_476 -happyReduction_476 (happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - case happyOut145 happy_x_2 of { happy_var_2 -> - ( checkPattern (BangPat (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2))}} - ) (\r -> happyReturn (happyIn177 r)) - -happyReduce_477 = happySpecReduce_3 169# happyReduction_477 -happyReduction_477 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> - case happyOut179 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> - happyIn178 - ((fst happy_var_2, happy_var_1 <^^> happy_var_3, happy_var_1:snd happy_var_2 ++ [happy_var_3]) - )}}} - -happyReduce_478 = happySpecReduce_3 169# happyReduction_478 -happyReduction_478 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut217 happy_x_1 of { happy_var_1 -> - case happyOut179 happy_x_2 of { happy_var_2 -> - case happyOut218 happy_x_3 of { happy_var_3 -> - happyIn178 - ((fst happy_var_2, happy_var_1 <^^> happy_var_3, happy_var_1:snd happy_var_2 ++ [happy_var_3]) - )}}} - -happyReduce_479 = happySpecReduce_2 170# happyReduction_479 -happyReduction_479 happy_x_2 - happy_x_1 - = case happyOut181 happy_x_1 of { happy_var_1 -> - case happyOut180 happy_x_2 of { happy_var_2 -> - happyIn179 - ((happy_var_1 : fst happy_var_2, snd happy_var_2) - )}} - -happyReduce_480 = happySpecReduce_2 170# happyReduction_480 -happyReduction_480 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 SemiColon) -> - case happyOut179 happy_x_2 of { happy_var_2 -> - happyIn179 - ((fst happy_var_2, happy_var_1 : snd happy_var_2) - )}} - -happyReduce_481 = happySpecReduce_0 170# happyReduction_481 -happyReduction_481 = happyIn179 - (([],[]) - ) - -happyReduce_482 = happySpecReduce_2 171# happyReduction_482 -happyReduction_482 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 SemiColon) -> - case happyOut179 happy_x_2 of { happy_var_2 -> - happyIn180 - ((fst happy_var_2, happy_var_1 : snd happy_var_2) - )}} - -happyReduce_483 = happySpecReduce_0 171# happyReduction_483 -happyReduction_483 = happyIn180 - (([],[]) - ) - -happyReduce_484 = happySpecReduce_2 172# happyReduction_484 -happyReduction_484 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> - case happyOut56 happy_x_2 of { happy_var_2 -> - happyIn181 - (LetStmt (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 - )}} - -happyReduce_485 = happySpecReduce_3 172# happyReduction_485 -happyReduction_485 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut177 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftArrow) -> - case happyOut134 happy_x_3 of { happy_var_3 -> - happyIn181 - (Generator (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_486 = happySpecReduce_1 172# happyReduction_486 -happyReduction_486 happy_x_1 - = case happyOut134 happy_x_1 of { happy_var_1 -> - happyIn181 - (Qualifier (ann happy_var_1) happy_var_1 - )} - -happyReduce_487 = happySpecReduce_2 172# happyReduction_487 -happyReduction_487 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Rec) -> - case happyOut178 happy_x_2 of { happy_var_2 -> - happyIn181 - (let (stms,inf,ss) = happy_var_2 in RecStmt (nIS happy_var_1 <++> inf <** happy_var_1:ss) stms - )}} - -happyReduce_488 = happySpecReduce_3 173# happyReduction_488 -happyReduction_488 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut182 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> - case happyOut183 happy_x_3 of { happy_var_3 -> - happyIn182 - (let (fbs, ss) = happy_var_1 in (happy_var_3 : fbs, happy_var_2 : ss) - )}}} - -happyReduce_489 = happySpecReduce_1 173# happyReduction_489 -happyReduction_489 happy_x_1 - = case happyOut183 happy_x_1 of { happy_var_1 -> - happyIn182 - (([happy_var_1],[]) - )} - -happyReduce_490 = happySpecReduce_3 174# happyReduction_490 -happyReduction_490 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut190 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Equals) -> - case happyOut135 happy_x_3 of { happy_var_3 -> - happyIn183 - (FieldUpdate (happy_var_1 <>happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_491 = happyMonadReduce 1# 174# happyReduction_491 -happyReduction_491 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOut190 happy_x_1 of { happy_var_1 -> - ( checkEnabled NamedFieldPuns >> checkUnQual happy_var_1 >>= return . FieldPun (ann happy_var_1))} - ) (\r -> happyReturn (happyIn183 r)) - -happyReduce_492 = happyMonadReduce 1# 174# happyReduction_492 -happyReduction_492 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 DotDot) -> - ( checkEnabled RecordWildCards >> return (FieldWildcard (nIS happy_var_1)))} - ) (\r -> happyReturn (happyIn183 r)) - -happyReduce_493 = happySpecReduce_3 175# happyReduction_493 -happyReduction_493 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut185 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_3 of { happy_var_3 -> - happyIn184 - ((reverse (fst happy_var_2), reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3) - )}}} - -happyReduce_494 = happySpecReduce_3 176# happyReduction_494 -happyReduction_494 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut185 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut186 happy_x_3 of { happy_var_3 -> - happyIn185 - ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) - )}}} - -happyReduce_495 = happySpecReduce_1 176# happyReduction_495 -happyReduction_495 happy_x_1 - = case happyOut186 happy_x_1 of { happy_var_1 -> - happyIn185 - (([happy_var_1],[]) - )} - -happyReduce_496 = happySpecReduce_3 177# happyReduction_496 -happyReduction_496 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut191 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 Equals) -> - case happyOut134 happy_x_3 of { happy_var_3 -> - happyIn186 - (IPBind (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 - )}}} - -happyReduce_497 = happySpecReduce_2 178# happyReduction_497 -happyReduction_497 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightParen) -> - happyIn187 - (p_unit_con (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) - )}} - -happyReduce_498 = happySpecReduce_2 178# happyReduction_498 -happyReduction_498 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightSquare) -> - happyIn187 - (List (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) [] - )}} - -happyReduce_499 = happySpecReduce_3 178# happyReduction_499 -happyReduction_499 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn187 - (p_tuple_con (happy_var_1 <^^> happy_var_3 <** happy_var_1:reverse (happy_var_3:happy_var_2)) Boxed (length happy_var_2) - )}}} - -happyReduce_500 = happySpecReduce_2 178# happyReduction_500 -happyReduction_500 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> - case happyOutTok happy_x_2 of { (Loc happy_var_2 RightHashParen) -> - happyIn187 - (p_unboxed_singleton_con (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) - )}} - -happyReduce_501 = happySpecReduce_3 178# happyReduction_501 -happyReduction_501 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightHashParen) -> - happyIn187 - (p_tuple_con (happy_var_1 <^^> happy_var_3 <** happy_var_1:reverse (happy_var_3:happy_var_2)) Unboxed (length happy_var_2) - )}}} - -happyReduce_502 = happySpecReduce_1 178# happyReduction_502 -happyReduction_502 happy_x_1 - = case happyOut193 happy_x_1 of { happy_var_1 -> - happyIn187 - (Con (ann happy_var_1) happy_var_1 - )} - -happyReduce_503 = happySpecReduce_1 179# happyReduction_503 -happyReduction_503 happy_x_1 - = case happyOut205 happy_x_1 of { happy_var_1 -> - happyIn188 - (happy_var_1 - )} - -happyReduce_504 = happySpecReduce_3 179# happyReduction_504 -happyReduction_504 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut213 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn188 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_505 = happySpecReduce_1 180# happyReduction_505 -happyReduction_505 happy_x_1 - = case happyOut204 happy_x_1 of { happy_var_1 -> - happyIn189 - (happy_var_1 - )} - -happyReduce_506 = happySpecReduce_3 180# happyReduction_506 -happyReduction_506 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut213 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn189 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_507 = happySpecReduce_1 181# happyReduction_507 -happyReduction_507 happy_x_1 - = case happyOut203 happy_x_1 of { happy_var_1 -> - happyIn190 - (happy_var_1 - )} - -happyReduce_508 = happySpecReduce_3 181# happyReduction_508 -happyReduction_508 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut211 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn190 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_509 = happySpecReduce_1 182# happyReduction_509 -happyReduction_509 happy_x_1 - = case happyOut206 happy_x_1 of { happy_var_1 -> - happyIn191 - (happy_var_1 - )} - -happyReduce_510 = happySpecReduce_1 183# happyReduction_510 -happyReduction_510 happy_x_1 - = case happyOut208 happy_x_1 of { happy_var_1 -> - happyIn192 - (happy_var_1 - )} - -happyReduce_511 = happySpecReduce_3 183# happyReduction_511 -happyReduction_511 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut210 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn192 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_512 = happySpecReduce_1 184# happyReduction_512 -happyReduction_512 happy_x_1 - = case happyOut207 happy_x_1 of { happy_var_1 -> - happyIn193 - (happy_var_1 - )} - -happyReduce_513 = happySpecReduce_3 184# happyReduction_513 -happyReduction_513 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> - case happyOut202 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> - happyIn193 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_514 = happySpecReduce_1 185# happyReduction_514 -happyReduction_514 happy_x_1 - = case happyOut213 happy_x_1 of { happy_var_1 -> - happyIn194 - (happy_var_1 - )} - -happyReduce_515 = happySpecReduce_3 185# happyReduction_515 -happyReduction_515 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> - case happyOut205 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> - happyIn194 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_516 = happySpecReduce_1 186# happyReduction_516 -happyReduction_516 happy_x_1 - = case happyOut211 happy_x_1 of { happy_var_1 -> - happyIn195 - (happy_var_1 - )} - -happyReduce_517 = happySpecReduce_3 186# happyReduction_517 -happyReduction_517 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> - case happyOut203 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> - happyIn195 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_518 = happySpecReduce_1 187# happyReduction_518 -happyReduction_518 happy_x_1 - = case happyOut212 happy_x_1 of { happy_var_1 -> - happyIn196 - (happy_var_1 - )} - -happyReduce_519 = happySpecReduce_3 187# happyReduction_519 -happyReduction_519 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> - case happyOut203 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> - happyIn196 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_520 = happySpecReduce_1 188# happyReduction_520 -happyReduction_520 happy_x_1 - = case happyOut210 happy_x_1 of { happy_var_1 -> - happyIn197 - (happy_var_1 - )} - -happyReduce_521 = happySpecReduce_3 188# happyReduction_521 -happyReduction_521 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> - case happyOut208 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> - happyIn197 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_522 = happySpecReduce_1 189# happyReduction_522 -happyReduction_522 happy_x_1 - = case happyOut202 happy_x_1 of { happy_var_1 -> - happyIn198 - (happy_var_1 - )} - -happyReduce_523 = happySpecReduce_3 189# happyReduction_523 -happyReduction_523 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> - case happyOut207 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> - happyIn198 - (fmap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 - )}}} - -happyReduce_524 = happySpecReduce_1 190# happyReduction_524 -happyReduction_524 happy_x_1 - = case happyOut194 happy_x_1 of { happy_var_1 -> - happyIn199 - (VarOp (ann happy_var_1) happy_var_1 - )} - -happyReduce_525 = happySpecReduce_1 190# happyReduction_525 -happyReduction_525 happy_x_1 - = case happyOut197 happy_x_1 of { happy_var_1 -> - happyIn199 - (ConOp (ann happy_var_1) happy_var_1 - )} - -happyReduce_526 = happySpecReduce_1 191# happyReduction_526 -happyReduction_526 happy_x_1 - = case happyOut195 happy_x_1 of { happy_var_1 -> - happyIn200 - (QVarOp (ann happy_var_1) happy_var_1 - )} - -happyReduce_527 = happySpecReduce_1 191# happyReduction_527 -happyReduction_527 happy_x_1 - = case happyOut198 happy_x_1 of { happy_var_1 -> - happyIn200 - (QConOp (ann happy_var_1) happy_var_1 - )} - -happyReduce_528 = happySpecReduce_1 192# happyReduction_528 -happyReduction_528 happy_x_1 - = case happyOut196 happy_x_1 of { happy_var_1 -> - happyIn201 - (QVarOp (ann happy_var_1) happy_var_1 - )} - -happyReduce_529 = happySpecReduce_1 192# happyReduction_529 -happyReduction_529 happy_x_1 - = case happyOut198 happy_x_1 of { happy_var_1 -> - happyIn201 - (QConOp (ann happy_var_1) happy_var_1 - )} - -happyReduce_530 = happySpecReduce_1 193# happyReduction_530 -happyReduction_530 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Colon) -> - happyIn202 - (list_cons_name (nIS happy_var_1) - )} - -happyReduce_531 = happySpecReduce_1 193# happyReduction_531 -happyReduction_531 happy_x_1 - = case happyOut209 happy_x_1 of { happy_var_1 -> - happyIn202 - (happy_var_1 - )} - -happyReduce_532 = happySpecReduce_1 194# happyReduction_532 -happyReduction_532 happy_x_1 - = case happyOut205 happy_x_1 of { happy_var_1 -> - happyIn203 - (UnQual (ann happy_var_1) happy_var_1 - )} - -happyReduce_533 = happySpecReduce_1 194# happyReduction_533 -happyReduction_533 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn203 - (let {Loc l (QVarId q) = happy_var_1; nis = nIS l} - in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) - )} - -happyReduce_534 = happySpecReduce_1 195# happyReduction_534 -happyReduction_534 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn204 - (let Loc l (VarId v) = happy_var_1 in Ident (nIS l) v - )} - -happyReduce_535 = happySpecReduce_1 195# happyReduction_535 -happyReduction_535 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_As) -> - happyIn204 - (as_name (nIS happy_var_1) - )} - -happyReduce_536 = happySpecReduce_1 195# happyReduction_536 -happyReduction_536 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Qualified) -> - happyIn204 - (qualified_name (nIS happy_var_1) - )} - -happyReduce_537 = happySpecReduce_1 195# happyReduction_537 -happyReduction_537 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Hiding) -> - happyIn204 - (hiding_name (nIS happy_var_1) - )} - -happyReduce_538 = happySpecReduce_1 195# happyReduction_538 -happyReduction_538 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Export) -> - happyIn204 - (export_name (nIS happy_var_1) - )} - -happyReduce_539 = happySpecReduce_1 195# happyReduction_539 -happyReduction_539 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_StdCall) -> - happyIn204 - (stdcall_name (nIS happy_var_1) - )} - -happyReduce_540 = happySpecReduce_1 195# happyReduction_540 -happyReduction_540 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_CCall) -> - happyIn204 - (ccall_name (nIS happy_var_1) - )} - -happyReduce_541 = happySpecReduce_1 196# happyReduction_541 -happyReduction_541 happy_x_1 - = case happyOut204 happy_x_1 of { happy_var_1 -> - happyIn205 - (happy_var_1 - )} - -happyReduce_542 = happySpecReduce_1 196# happyReduction_542 -happyReduction_542 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Safe) -> - happyIn205 - (safe_name (nIS happy_var_1) - )} - -happyReduce_543 = happySpecReduce_1 196# happyReduction_543 -happyReduction_543 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Unsafe) -> - happyIn205 - (unsafe_name (nIS happy_var_1) - )} - -happyReduce_544 = happySpecReduce_1 196# happyReduction_544 -happyReduction_544 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Threadsafe) -> - happyIn205 - (threadsafe_name (nIS happy_var_1) - )} - -happyReduce_545 = happySpecReduce_1 197# happyReduction_545 -happyReduction_545 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn206 - (let Loc l (IDupVarId i) = happy_var_1 in IPDup (nIS l) i - )} - -happyReduce_546 = happySpecReduce_1 197# happyReduction_546 -happyReduction_546 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn206 - (let Loc l (ILinVarId i) = happy_var_1 in IPLin (nIS l) i - )} - -happyReduce_547 = happySpecReduce_1 198# happyReduction_547 -happyReduction_547 happy_x_1 - = case happyOut208 happy_x_1 of { happy_var_1 -> - happyIn207 - (UnQual (ann happy_var_1) happy_var_1 - )} - -happyReduce_548 = happySpecReduce_1 198# happyReduction_548 -happyReduction_548 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn207 - (let {Loc l (QConId q) = happy_var_1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) - )} - -happyReduce_549 = happySpecReduce_1 199# happyReduction_549 -happyReduction_549 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn208 - (let Loc l (ConId c) = happy_var_1 in Ident (nIS l) c - )} - -happyReduce_550 = happySpecReduce_1 200# happyReduction_550 -happyReduction_550 happy_x_1 - = case happyOut210 happy_x_1 of { happy_var_1 -> - happyIn209 - (UnQual (ann happy_var_1) happy_var_1 - )} - -happyReduce_551 = happySpecReduce_1 200# happyReduction_551 -happyReduction_551 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn209 - (let {Loc l (QConSym q) = happy_var_1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) - )} - -happyReduce_552 = happySpecReduce_1 201# happyReduction_552 -happyReduction_552 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn210 - (let Loc l (ConSym c) = happy_var_1 in Symbol (nIS l) c - )} - -happyReduce_553 = happySpecReduce_1 202# happyReduction_553 -happyReduction_553 happy_x_1 - = case happyOut213 happy_x_1 of { happy_var_1 -> - happyIn211 - (UnQual (ann happy_var_1) happy_var_1 - )} - -happyReduce_554 = happySpecReduce_1 202# happyReduction_554 -happyReduction_554 happy_x_1 - = case happyOut215 happy_x_1 of { happy_var_1 -> - happyIn211 - (happy_var_1 - )} - -happyReduce_555 = happySpecReduce_1 203# happyReduction_555 -happyReduction_555 happy_x_1 - = case happyOut214 happy_x_1 of { happy_var_1 -> - happyIn212 - (UnQual (ann happy_var_1) happy_var_1 - )} - -happyReduce_556 = happySpecReduce_1 203# happyReduction_556 -happyReduction_556 happy_x_1 - = case happyOut215 happy_x_1 of { happy_var_1 -> - happyIn212 - (happy_var_1 - )} - -happyReduce_557 = happySpecReduce_1 204# happyReduction_557 -happyReduction_557 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn213 - (let Loc l (VarSym v) = happy_var_1 in Symbol (nIS l) v - )} - -happyReduce_558 = happySpecReduce_1 204# happyReduction_558 -happyReduction_558 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Minus) -> - happyIn213 - (minus_name (nIS happy_var_1) - )} - -happyReduce_559 = happySpecReduce_1 204# happyReduction_559 -happyReduction_559 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - happyIn213 - (bang_name (nIS happy_var_1) - )} - -happyReduce_560 = happySpecReduce_1 204# happyReduction_560 -happyReduction_560 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Dot) -> - happyIn213 - (dot_name (nIS happy_var_1) - )} - -happyReduce_561 = happySpecReduce_1 204# happyReduction_561 -happyReduction_561 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Star) -> - happyIn213 - (star_name (nIS happy_var_1) - )} - -happyReduce_562 = happySpecReduce_1 205# happyReduction_562 -happyReduction_562 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn214 - (let Loc l (VarSym v) = happy_var_1 in Symbol (nIS l) v - )} - -happyReduce_563 = happySpecReduce_1 205# happyReduction_563 -happyReduction_563 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> - happyIn214 - (bang_name (nIS happy_var_1) - )} - -happyReduce_564 = happySpecReduce_1 205# happyReduction_564 -happyReduction_564 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Dot) -> - happyIn214 - (dot_name (nIS happy_var_1) - )} - -happyReduce_565 = happySpecReduce_1 205# happyReduction_565 -happyReduction_565 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 Star) -> - happyIn214 - (star_name (nIS happy_var_1) - )} - -happyReduce_566 = happySpecReduce_1 206# happyReduction_566 -happyReduction_566 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn215 - (let {Loc l (QVarSym q) = happy_var_1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) - )} - -happyReduce_567 = happySpecReduce_1 207# happyReduction_567 -happyReduction_567 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (IntTok (i,raw)) = happy_var_1 in Int (nIS l) i raw - )} - -happyReduce_568 = happySpecReduce_1 207# happyReduction_568 -happyReduction_568 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (Character (c,raw)) = happy_var_1 in Char (nIS l) c raw - )} - -happyReduce_569 = happySpecReduce_1 207# happyReduction_569 -happyReduction_569 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (FloatTok (r,raw)) = happy_var_1 in Frac (nIS l) r raw - )} - -happyReduce_570 = happySpecReduce_1 207# happyReduction_570 -happyReduction_570 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (StringTok (s,raw)) = happy_var_1 in String (nIS l) s raw - )} - -happyReduce_571 = happySpecReduce_1 207# happyReduction_571 -happyReduction_571 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (IntTokHash (i,raw)) = happy_var_1 in PrimInt (nIS l) i raw - )} - -happyReduce_572 = happySpecReduce_1 207# happyReduction_572 -happyReduction_572 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (WordTokHash (w,raw)) = happy_var_1 in PrimWord (nIS l) w raw - )} - -happyReduce_573 = happySpecReduce_1 207# happyReduction_573 -happyReduction_573 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (FloatTokHash (f,raw)) = happy_var_1 in PrimFloat (nIS l) f raw - )} - -happyReduce_574 = happySpecReduce_1 207# happyReduction_574 -happyReduction_574 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (DoubleTokHash (d,raw)) = happy_var_1 in PrimDouble (nIS l) d raw - )} - -happyReduce_575 = happySpecReduce_1 207# happyReduction_575 -happyReduction_575 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (CharacterHash (c,raw)) = happy_var_1 in PrimChar (nIS l) c raw - )} - -happyReduce_576 = happySpecReduce_1 207# happyReduction_576 -happyReduction_576 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn216 - (let Loc l (StringHash (s,raw)) = happy_var_1 in PrimString (nIS l) s raw - )} - -happyReduce_577 = happyMonadReduce 0# 208# happyReduction_577 -happyReduction_577 (happyRest) tk - = happyThen (( pushCurrentContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x) (return x) -}) - ) (\r -> happyReturn (happyIn217 r)) - -happyReduce_578 = happySpecReduce_1 209# happyReduction_578 -happyReduction_578 happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 VRightCurly) -> - happyIn218 - (happy_var_1 {- >>= \x -> trace (show x ++ show x ++ show x) (return x) -} - )} - -happyReduce_579 = happyMonadReduce 1# 209# happyReduction_579 -happyReduction_579 (happy_x_1 `HappyStk` - happyRest) tk - = happyThen (( popContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x ++ show x) (return x) -}) - ) (\r -> happyReturn (happyIn218 r)) - -happyReduce_580 = happySpecReduce_1 210# happyReduction_580 -happyReduction_580 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn219 - (let Loc l (ConId n) = happy_var_1 in ModuleName (nIS l) n - )} - -happyReduce_581 = happySpecReduce_1 210# happyReduction_581 -happyReduction_581 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn219 - (let Loc l (QConId n) = happy_var_1 in ModuleName (nIS l) (fst n ++ '.':snd n) - )} - -happyReduce_582 = happySpecReduce_1 211# happyReduction_582 -happyReduction_582 happy_x_1 - = case happyOut192 happy_x_1 of { happy_var_1 -> - happyIn220 - (happy_var_1 - )} - -happyReduce_583 = happySpecReduce_1 212# happyReduction_583 -happyReduction_583 happy_x_1 - = case happyOut193 happy_x_1 of { happy_var_1 -> - happyIn221 - (happy_var_1 - )} - -happyReduce_584 = happySpecReduce_1 213# happyReduction_584 -happyReduction_584 happy_x_1 - = case happyOut205 happy_x_1 of { happy_var_1 -> - happyIn222 - (happy_var_1 - )} - -happyReduce_585 = happySpecReduce_3 214# happyReduction_585 -happyReduction_585 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> - case happyOut222 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> - happyIn223 - (UnQual (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3]) happy_var_2 - )}}} - -happyReduce_586 = happySpecReduce_1 214# happyReduction_586 -happyReduction_586 happy_x_1 - = case happyOut224 happy_x_1 of { happy_var_1 -> - happyIn223 - (UnQual (ann happy_var_1) happy_var_1 - )} - -happyReduce_587 = happySpecReduce_1 215# happyReduction_587 -happyReduction_587 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn224 - (let Loc l (VarSym x) = happy_var_1 in Symbol (nIS l) x - )} - -happyNewToken action sts stk - = lexer(\tk -> - let cont i = happyDoAction i tk action sts stk in - case tk of { - Loc _ EOF -> happyDoAction 133# tk action sts stk; - Loc _ (VarId _) -> cont 1#; - Loc _ (QVarId _) -> cont 2#; - Loc _ (IDupVarId _) -> cont 3#; - Loc _ (ILinVarId _) -> cont 4#; - Loc _ (ConId _) -> cont 5#; - Loc _ (QConId _) -> cont 6#; - Loc _ (DVarId _) -> cont 7#; - Loc _ (VarSym _) -> cont 8#; - Loc _ (ConSym _) -> cont 9#; - Loc _ (QVarSym _) -> cont 10#; - Loc _ (QConSym _) -> cont 11#; - Loc _ (IntTok _) -> cont 12#; - Loc _ (FloatTok _) -> cont 13#; - Loc _ (Character _) -> cont 14#; - Loc _ (StringTok _) -> cont 15#; - Loc _ (IntTokHash _) -> cont 16#; - Loc _ (WordTokHash _) -> cont 17#; - Loc _ (FloatTokHash _) -> cont 18#; - Loc _ (DoubleTokHash _) -> cont 19#; - Loc _ (CharacterHash _) -> cont 20#; - Loc _ (StringHash _) -> cont 21#; - Loc happy_dollar_dollar LeftParen -> cont 22#; - Loc happy_dollar_dollar RightParen -> cont 23#; - Loc happy_dollar_dollar LeftHashParen -> cont 24#; - Loc happy_dollar_dollar RightHashParen -> cont 25#; - Loc happy_dollar_dollar LeftCurlyBar -> cont 26#; - Loc happy_dollar_dollar RightCurlyBar -> cont 27#; - Loc happy_dollar_dollar SemiColon -> cont 28#; - Loc happy_dollar_dollar LeftCurly -> cont 29#; - Loc happy_dollar_dollar RightCurly -> cont 30#; - Loc happy_dollar_dollar VRightCurly -> cont 31#; - Loc happy_dollar_dollar LeftSquare -> cont 32#; - Loc happy_dollar_dollar RightSquare -> cont 33#; - Loc happy_dollar_dollar Comma -> cont 34#; - Loc happy_dollar_dollar Underscore -> cont 35#; - Loc happy_dollar_dollar BackQuote -> cont 36#; - Loc happy_dollar_dollar Dot -> cont 37#; - Loc happy_dollar_dollar DotDot -> cont 38#; - Loc happy_dollar_dollar Colon -> cont 39#; - Loc happy_dollar_dollar DoubleColon -> cont 40#; - Loc happy_dollar_dollar Equals -> cont 41#; - Loc happy_dollar_dollar Backslash -> cont 42#; - Loc happy_dollar_dollar Bar -> cont 43#; - Loc happy_dollar_dollar LeftArrow -> cont 44#; - Loc happy_dollar_dollar RightArrow -> cont 45#; - Loc happy_dollar_dollar At -> cont 46#; - Loc happy_dollar_dollar Tilde -> cont 47#; - Loc happy_dollar_dollar DoubleArrow -> cont 48#; - Loc happy_dollar_dollar Minus -> cont 49#; - Loc happy_dollar_dollar Exclamation -> cont 50#; - Loc happy_dollar_dollar Star -> cont 51#; - Loc happy_dollar_dollar LeftArrowTail -> cont 52#; - Loc happy_dollar_dollar RightArrowTail -> cont 53#; - Loc happy_dollar_dollar LeftDblArrowTail -> cont 54#; - Loc happy_dollar_dollar RightDblArrowTail -> cont 55#; - Loc happy_dollar_dollar RPGuardOpen -> cont 56#; - Loc happy_dollar_dollar RPGuardClose -> cont 57#; - Loc happy_dollar_dollar RPCAt -> cont 58#; - Loc _ (THIdEscape _) -> cont 59#; - Loc happy_dollar_dollar THParenEscape -> cont 60#; - Loc happy_dollar_dollar THExpQuote -> cont 61#; - Loc happy_dollar_dollar THPatQuote -> cont 62#; - Loc happy_dollar_dollar THTypQuote -> cont 63#; - Loc happy_dollar_dollar THDecQuote -> cont 64#; - Loc happy_dollar_dollar THCloseQuote -> cont 65#; - Loc happy_dollar_dollar THVarQuote -> cont 66#; - Loc happy_dollar_dollar THTyQuote -> cont 67#; - Loc _ (THQuasiQuote _) -> cont 68#; - Loc _ (XPCDATA _) -> cont 69#; - Loc happy_dollar_dollar XStdTagOpen -> cont 70#; - Loc happy_dollar_dollar XCloseTagOpen -> cont 71#; - Loc happy_dollar_dollar XCodeTagOpen -> cont 72#; - Loc happy_dollar_dollar XStdTagClose -> cont 73#; - Loc happy_dollar_dollar XEmptyTagClose -> cont 74#; - Loc happy_dollar_dollar XCodeTagClose -> cont 75#; - Loc happy_dollar_dollar XRPatOpen -> cont 76#; - Loc happy_dollar_dollar XRPatClose -> cont 77#; - Loc happy_dollar_dollar KW_Foreign -> cont 78#; - Loc happy_dollar_dollar KW_Export -> cont 79#; - Loc happy_dollar_dollar KW_Safe -> cont 80#; - Loc happy_dollar_dollar KW_Unsafe -> cont 81#; - Loc happy_dollar_dollar KW_Threadsafe -> cont 82#; - Loc happy_dollar_dollar KW_StdCall -> cont 83#; - Loc happy_dollar_dollar KW_CCall -> cont 84#; - Loc happy_dollar_dollar KW_As -> cont 85#; - Loc happy_dollar_dollar KW_By -> cont 86#; - Loc happy_dollar_dollar KW_Case -> cont 87#; - Loc happy_dollar_dollar KW_Class -> cont 88#; - Loc happy_dollar_dollar KW_Data -> cont 89#; - Loc happy_dollar_dollar KW_Default -> cont 90#; - Loc happy_dollar_dollar KW_Deriving -> cont 91#; - Loc happy_dollar_dollar KW_Do -> cont 92#; - Loc happy_dollar_dollar KW_Else -> cont 93#; - Loc happy_dollar_dollar KW_Family -> cont 94#; - Loc happy_dollar_dollar KW_Forall -> cont 95#; - Loc happy_dollar_dollar KW_Group -> cont 96#; - Loc happy_dollar_dollar KW_Hiding -> cont 97#; - Loc happy_dollar_dollar KW_If -> cont 98#; - Loc happy_dollar_dollar KW_Import -> cont 99#; - Loc happy_dollar_dollar KW_In -> cont 100#; - Loc happy_dollar_dollar KW_Infix -> cont 101#; - Loc happy_dollar_dollar KW_InfixL -> cont 102#; - Loc happy_dollar_dollar KW_InfixR -> cont 103#; - Loc happy_dollar_dollar KW_Instance -> cont 104#; - Loc happy_dollar_dollar KW_Let -> cont 105#; - Loc happy_dollar_dollar KW_MDo -> cont 106#; - Loc happy_dollar_dollar KW_Module -> cont 107#; - Loc happy_dollar_dollar KW_NewType -> cont 108#; - Loc happy_dollar_dollar KW_Of -> cont 109#; - Loc happy_dollar_dollar KW_Proc -> cont 110#; - Loc happy_dollar_dollar KW_Rec -> cont 111#; - Loc happy_dollar_dollar KW_Then -> cont 112#; - Loc happy_dollar_dollar KW_Type -> cont 113#; - Loc happy_dollar_dollar KW_Using -> cont 114#; - Loc happy_dollar_dollar KW_Where -> cont 115#; - Loc happy_dollar_dollar KW_Qualified -> cont 116#; - Loc _ (INLINE _) -> cont 117#; - Loc happy_dollar_dollar SPECIALISE -> cont 118#; - Loc _ (SPECIALISE_INLINE _) -> cont 119#; - Loc happy_dollar_dollar SOURCE -> cont 120#; - Loc happy_dollar_dollar RULES -> cont 121#; - Loc happy_dollar_dollar CORE -> cont 122#; - Loc happy_dollar_dollar SCC -> cont 123#; - Loc happy_dollar_dollar GENERATED -> cont 124#; - Loc happy_dollar_dollar DEPRECATED -> cont 125#; - Loc happy_dollar_dollar WARNING -> cont 126#; - Loc happy_dollar_dollar UNPACK -> cont 127#; - Loc _ (OPTIONS _) -> cont 128#; - Loc _ (CFILES _) -> cont 129#; - Loc _ (INCLUDE _) -> cont 130#; - Loc happy_dollar_dollar LANGUAGE -> cont 131#; - Loc happy_dollar_dollar PragmaEnd -> cont 132#; - _ -> happyError' tk - }) - -happyError_ tk = happyError' tk - -happyThen :: () => P a -> (a -> P b) -> P b -happyThen = (>>=) -happyReturn :: () => a -> P a -happyReturn = (return) -happyThen1 = happyThen -happyReturn1 :: () => a -> P a -happyReturn1 = happyReturn -happyError' :: () => (Loc Token) -> P a -happyError' tk = parseError tk - -mparseModule = happySomeParser where - happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut9 x)) - -mparseExp = happySomeParser where - happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut134 x)) - -mparsePat = happySomeParser where - happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut177 x)) - -mparseDecl = happySomeParser where - happySomeParser = happyThen (happyParse 3#) (\x -> happyReturn (happyOut46 x)) - -mparseType = happySomeParser where - happySomeParser = happyThen (happyParse 4#) (\x -> happyReturn (happyOut82 x)) - -mfindOptPragmas = happySomeParser where - happySomeParser = happyThen (happyParse 5#) (\x -> happyReturn (happyOut11 x)) - -happySeq = happyDontSeq - - -type L = SrcSpanInfo -- just for convenience -type S = SrcSpan - -parseError :: Loc Token -> P a -parseError t = fail $ "Parse error: " ++ show t - -(<>) :: (Annotated a, Annotated b) => a SrcSpanInfo -> b SrcSpanInfo -> SrcSpanInfo -a <> b = ann a <++> ann b -infixl 6 <> - -nIS = noInfoSpan -iS = infoSpan - - --- | Parse of a string, which should contain a complete Haskell module. -parseModule :: String -> ParseResult (Module L) -parseModule = simpleParse mparseModule - --- | Parse of a string containing a complete Haskell module, using an explicit mode. -parseModuleWithMode :: ParseMode -> String -> ParseResult (Module L) -parseModuleWithMode = modeParse mparseModule - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseModuleWithComments :: ParseMode -> String -> ParseResult (Module L, [Comment]) -parseModuleWithComments = commentParse mparseModule - --- | Parse of a string containing a Haskell expression. -parseExp :: String -> ParseResult (Exp L) -parseExp = simpleParse mparseExp - --- | Parse of a string containing a Haskell expression, using an explicit mode. -parseExpWithMode :: ParseMode -> String -> ParseResult (Exp L) -parseExpWithMode = modeParse mparseExp - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseExpWithComments :: ParseMode -> String -> ParseResult (Exp L, [Comment]) -parseExpWithComments = commentParse mparseExp - --- | Parse of a string containing a Haskell pattern. -parsePat :: String -> ParseResult (Pat L) -parsePat = simpleParse mparsePat - --- | Parse of a string containing a Haskell pattern, using an explicit mode. -parsePatWithMode :: ParseMode -> String -> ParseResult (Pat L) -parsePatWithMode = modeParse mparsePat - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parsePatWithComments :: ParseMode -> String -> ParseResult (Pat L, [Comment]) -parsePatWithComments = commentParse mparsePat - --- | Parse of a string containing a Haskell top-level declaration. -parseDecl :: String -> ParseResult (Decl L) -parseDecl = simpleParse mparseDecl - --- | Parse of a string containing a Haskell top-level declaration, using an explicit mode. -parseDeclWithMode :: ParseMode -> String -> ParseResult (Decl L) -parseDeclWithMode = modeParse mparseDecl - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseDeclWithComments :: ParseMode -> String -> ParseResult (Decl L, [Comment]) -parseDeclWithComments = commentParse mparseDecl - --- | Parse of a string containing a Haskell type. -parseType :: String -> ParseResult (Type L) -parseType = runParser mparseType - --- | Parse of a string containing a Haskell type, using an explicit mode. -parseTypeWithMode :: ParseMode -> String -> ParseResult (Type L) -parseTypeWithMode mode = runParserWithMode mode mparseType - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseTypeWithComments :: ParseMode -> String -> ParseResult (Type L, [Comment]) -parseTypeWithComments mode str = runParserWithModeComments mode mparseType str - - -simpleParse :: AppFixity a => P (a L) -> String -> ParseResult (a L) -simpleParse p = fmap (applyFixities preludeFixities) . runParser p - -modeParse :: AppFixity a => P (a L) -> ParseMode -> String -> ParseResult (a L) -modeParse p mode = fmap (applyFixities (fixities mode)) . runParserWithMode mode p - -commentParse :: AppFixity a => P (a L) -> ParseMode -> String -> ParseResult (a L, [Comment]) -commentParse p mode str = runParserWithModeComments mode p str - >>= \(ast, cs) -> return (applyFixities (fixities mode) ast, cs) - --- | Partial parse of a string starting with a series of top-level option pragmas. -getTopPragmas :: String -> ParseResult [OptionPragma L] -getTopPragmas = runParser (mfindOptPragmas >>= \(ps,_,_) -> return ps) -{-# LINE 1 "templates\GenericTemplate.hs" #-} -{-# LINE 1 "templates\\GenericTemplate.hs" #-} -{-# LINE 1 "<built-in>" #-} -{-# LINE 1 "<command line>" #-} -{-# LINE 1 "templates\\GenericTemplate.hs" #-} --- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp - -{-# LINE 28 "templates\\GenericTemplate.hs" #-} - - -data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList - - - - - -{-# LINE 49 "templates\\GenericTemplate.hs" #-} - -{-# LINE 59 "templates\\GenericTemplate.hs" #-} - -{-# LINE 68 "templates\\GenericTemplate.hs" #-} - -infixr 9 `HappyStk` -data HappyStk a = HappyStk a (HappyStk a) - ------------------------------------------------------------------------------ --- starting the parse - -happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll - ------------------------------------------------------------------------------ --- Accepting the parse - --- If the current token is 0#, it means we've just accepted a partial --- parse (a %partial parser). We must ignore the saved token on the top of --- the stack in this case. -happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) = - happyReturn1 ans -happyAccept j tk st sts (HappyStk ans _) = - (happyTcHack j (happyTcHack st)) (happyReturn1 ans) - ------------------------------------------------------------------------------ --- Arrays only: do the next action - - - -happyDoAction i tk st - = {- nothing -} - - - case action of - 0# -> {- nothing -} - happyFail i tk st - -1# -> {- nothing -} - happyAccept i tk st - n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -} - - (happyReduceArr Happy_Data_Array.! rule) i tk st - where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#)))))) - n -> {- nothing -} - - - happyShift new_state i tk st - where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) - where off = indexShortOffAddr happyActOffsets st - off_i = (off Happy_GHC_Exts.+# i) - check = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#)) - then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==# i) - else False - action | check = indexShortOffAddr happyTable off_i - | otherwise = indexShortOffAddr happyDefActions st - -{-# LINE 127 "templates\\GenericTemplate.hs" #-} - - -indexShortOffAddr (HappyA# arr) off = -#if __GLASGOW_HASKELL__ > 500 - Happy_GHC_Exts.narrow16Int# i -#elif __GLASGOW_HASKELL__ == 500 - Happy_GHC_Exts.intToInt16# i -#else - Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16# -#endif - where -#if __GLASGOW_HASKELL__ >= 503 - i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low) -#else - i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low) -#endif - high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#))) - low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off')) - off' = off Happy_GHC_Exts.*# 2# - - - - - -data HappyAddr = HappyA# Happy_GHC_Exts.Addr# - - - - ------------------------------------------------------------------------------ --- HappyState data type (not arrays) - -{-# LINE 170 "templates\\GenericTemplate.hs" #-} - ------------------------------------------------------------------------------ --- Shifting a token - -happyShift new_state 0# tk st sts stk@(x `HappyStk` _) = - let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in --- trace "shifting the error token" $ - happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) - -happyShift new_state i tk st sts stk = - happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk) - --- happyReduce is specialised for the common cases. - -happySpecReduce_0 i fn 0# tk st sts stk - = happyFail 0# tk st sts stk -happySpecReduce_0 nt fn j tk st@((action)) sts stk - = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk) - -happySpecReduce_1 i fn 0# tk st sts stk - = happyFail 0# tk st sts stk -happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk') - = let r = fn v1 in - happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) - -happySpecReduce_2 i fn 0# tk st sts stk - = happyFail 0# tk st sts stk -happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk') - = let r = fn v1 v2 in - happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) - -happySpecReduce_3 i fn 0# tk st sts stk - = happyFail 0# tk st sts stk -happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk') - = let r = fn v1 v2 v3 in - happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) - -happyReduce k i fn 0# tk st sts stk - = happyFail 0# tk st sts stk -happyReduce k nt fn j tk st sts stk - = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of - sts1@((HappyCons (st1@(action)) (_))) -> - let r = fn stk in -- it doesn't hurt to always seq here... - happyDoSeq r (happyGoto nt j tk st1 sts1 r) - -happyMonadReduce k nt fn 0# tk st sts stk - = happyFail 0# tk st sts stk -happyMonadReduce k nt fn j tk st sts stk = - happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk)) - where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) - drop_stk = happyDropStk k stk - -happyMonad2Reduce k nt fn 0# tk st sts stk - = happyFail 0# tk st sts stk -happyMonad2Reduce k nt fn j tk st sts stk = - happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk)) - where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) - drop_stk = happyDropStk k stk - - off = indexShortOffAddr happyGotoOffsets st1 - off_i = (off Happy_GHC_Exts.+# nt) - new_state = indexShortOffAddr happyTable off_i - - - - -happyDrop 0# l = l -happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t - -happyDropStk 0# l = l -happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs - ------------------------------------------------------------------------------ --- Moving to a new state after a reduction - - -happyGoto nt j tk st = - {- nothing -} - happyDoAction j tk new_state - where off = indexShortOffAddr happyGotoOffsets st - off_i = (off Happy_GHC_Exts.+# nt) - new_state = indexShortOffAddr happyTable off_i - - - - ------------------------------------------------------------------------------ --- Error recovery (0# is the error token) - --- parse error if we are in recovery and we fail again -happyFail 0# tk old_st _ stk = --- trace "failing" $ - happyError_ tk - -{- We don't need state discarding for our restricted implementation of - "error". In fact, it can cause some bogus parses, so I've disabled it - for now --SDM - --- discard a state -happyFail 0# tk old_st (HappyCons ((action)) (sts)) - (saved_tok `HappyStk` _ `HappyStk` stk) = --- trace ("discarding state, depth " ++ show (length stk)) $ - happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk)) --} - --- Enter error recovery: generate an error token, --- save the old token and carry on. -happyFail i tk (action) sts stk = --- trace "entering error recovery" $ - happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk) - --- Internal happy errors: - -notHappyAtAll = error "Internal Happy error\n" - ------------------------------------------------------------------------------ --- Hack to get the typechecker to accept our action functions - - -happyTcHack :: Happy_GHC_Exts.Int# -> a -> a -happyTcHack x y = y -{-# INLINE happyTcHack #-} - - ------------------------------------------------------------------------------ --- Seq-ing. If the --strict flag is given, then Happy emits --- happySeq = happyDoSeq --- otherwise it emits --- happySeq = happyDontSeq - -happyDoSeq, happyDontSeq :: a -> b -> b -happyDoSeq a b = a `seq` b -happyDontSeq a b = b - ------------------------------------------------------------------------------ --- Don't inline any functions from the template. GHC has a nasty habit --- of deciding to inline happyGoto everywhere, which increases the size of --- the generated parser quite a bit. - - -{-# NOINLINE happyDoAction #-} -{-# NOINLINE happyTable #-} -{-# NOINLINE happyCheck #-} -{-# NOINLINE happyActOffsets #-} -{-# NOINLINE happyGotoOffsets #-} -{-# NOINLINE happyDefActions #-} - -{-# NOINLINE happyShift #-} -{-# NOINLINE happySpecReduce_0 #-} -{-# NOINLINE happySpecReduce_1 #-} -{-# NOINLINE happySpecReduce_2 #-} -{-# NOINLINE happySpecReduce_3 #-} -{-# NOINLINE happyReduce #-} -{-# NOINLINE happyMonadReduce #-} -{-# NOINLINE happyGoto #-} -{-# NOINLINE happyFail #-} - --- end of Happy Template.
@@ -1,73 +1,99 @@ Name: haskell-src-exts-Version: 1.2.0+Version: 1.24.0 License: BSD3 License-File: LICENSE+Build-Type: Simple Author: Niklas Broberg-Maintainer: Niklas Broberg <d00nibro@chalmers.se>+Maintainer: Dan Burton <danburton.email@gmail.com> Category: Language Synopsis: Manipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer Description: Haskell-Source with Extensions (HSE, haskell-src-exts)- is an extension of the standard haskell-src package,- and handles most registered syntactic extensions to Haskell, including:- .- * Multi-parameter type classes with functional dependencies- .- * Indexed type families (including associated types)- .- * Empty data declarations- .- * GADTs- .- * Implicit parameters- .- * Template Haskell+ is a standalone parser for Haskell. In addition to+ standard Haskell, all extensions implemented in GHC are supported. .- and a few more. All extensions implemented in GHC are supported. Apart from these standard extensions, it also handles regular patterns as per the HaRP extension as well as HSX-style embedded XML syntax.- .- For details on usage, please see the website.-Homepage: http://www.cs.chalmers.se/~d00nibro/haskell-src-exts/+Homepage: https://github.com/haskell-suite/haskell-src-exts+Bug-Reports: https://github.com/haskell-suite/haskell-src-exts/issues Stability: Stable-Tested-with: GHC==6.10.2-Build-Type: Custom-Cabal-Version: >= 1.2+Cabal-Version: >= 1.10+Tested-With: GHC == 9.14.1 -Flag base4+Extra-Source-Files:+ README.md+ CHANGELOG+ RELEASENOTES-1.17.0+ tests/examples/*.hs+ tests/examples/*.lhs+ tests/examples/*.hs.parser.golden+ tests/examples/*.lhs.parser.golden+ tests/examples/*.hs.exactprinter.golden+ tests/examples/*.lhs.exactprinter.golden+ tests/examples/*.hs.prettyprinter.golden+ tests/examples/*.lhs.prettyprinter.golden+ tests/examples/*.hs.prettyparser.golden+ tests/examples/*.lhs.prettyparser.golden+ tests/Runner.hs+ tests/Extensions.hs Library- Build-Tools: happy >= 1.17- Build-Depends: array >= 0.1, pretty >= 1.0, cpphs >= 1.3- if flag(base4)- Build-depends: base >= 4 && < 5- cpp-options: -DBASE4- else- Build-depends: base >= 3 && < 4-+ Default-language: Haskell98+ Build-Tools: happy >= 1.19+ Build-Depends: array >= 0.1 && < 0.6,+ pretty >= 1.0 && < 1.2,+ base >= 4.5 && < 5,+ -- this is needed to access GHC.Generics on GHC 7.4+ ghc-prim < 0.14+ -- this is needed to access Data.Semigroup and Control.Monad.Fail on GHCs+ -- before 8.0+ if !impl(ghc >= 8.0)+ Build-Depends:+ semigroups >= 0.18.3 && < 0.21,+ fail == 4.9.* Exposed-modules: Language.Haskell.Exts,- Language.Haskell.Exts.Parser,+ Language.Haskell.Exts.Lexer, Language.Haskell.Exts.Pretty,- Language.Haskell.Exts.Syntax, Language.Haskell.Exts.Extension, Language.Haskell.Exts.Build,- Language.Haskell.Exts.Fixity,- Language.Haskell.Exts.Comments, Language.Haskell.Exts.SrcLoc,- - Language.Haskell.Exts.Annotated,- Language.Haskell.Exts.Annotated.Syntax,- Language.Haskell.Exts.Annotated.Fixity,- Language.Haskell.Exts.Annotated.Build,- Language.Haskell.Exts.Annotated.ExactPrint,- Language.Haskell.Exts.Annotated.Simplify + Language.Haskell.Exts.Syntax,+ Language.Haskell.Exts.Fixity,+ Language.Haskell.Exts.ExactPrint,+ Language.Haskell.Exts.Parser,+ Language.Haskell.Exts.Comments+ Other-modules: Language.Haskell.Exts.ExtScheme,- Language.Haskell.Exts.ParseMonad, Language.Haskell.Exts.ParseSyntax,- Language.Haskell.Exts.Lexer,+ Language.Haskell.Exts.InternalLexer, Language.Haskell.Exts.ParseUtils, Language.Haskell.Exts.InternalParser+ Language.Preprocessor.Unlit Hs-source-dirs: src+ Ghc-options: -Wall++Source-Repository head+ Type: git+ Location: https://github.com/haskell-suite/haskell-src-exts.git++Test-Suite test+ type: exitcode-stdio-1.0+ hs-source-dirs: tests+ main-is: Runner.hs+ other-modules: Extensions+ GHC-Options: -threaded -Wall+ Default-language: Haskell2010+ Build-depends: base,+ mtl,+ containers,+ haskell-src-exts,+ smallcheck >= 1.0,+ tasty >= 0.3,+ tasty-smallcheck,+ tasty-golden >= 2.2.2,+ filepath,+ directory,+ pretty-show >= 1.6.16
@@ -17,77 +17,137 @@ -- * Re-exported modules module Language.Haskell.Exts.Syntax , module Language.Haskell.Exts.Build- , module Language.Haskell.Exts.Parser+ , module Language.Haskell.Exts.Lexer , module Language.Haskell.Exts.Pretty- , module Language.Haskell.Exts.Extension , module Language.Haskell.Exts.Fixity+ , module Language.Haskell.Exts.ExactPrint+ , module Language.Haskell.Exts.SrcLoc , module Language.Haskell.Exts.Comments+ , module Language.Haskell.Exts.Extension+ , module Language.Haskell.Exts.Parser -- * Parsing of Haskell source files , parseFile , parseFileWithMode , parseFileWithExts+ , parseFileWithComments+ , parseFileWithCommentsAndPragmas , parseFileContents , parseFileContentsWithMode+ , parseFileContentsWithExts+ , parseFileContentsWithComments -- * Read extensions declared in LANGUAGE pragmas , readExtensions ) where import Language.Haskell.Exts.Build-import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.Comments import Language.Haskell.Exts.Parser+import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.Lexer ( lexTokenStream, lexTokenStreamWithMode, Token(..) ) import Language.Haskell.Exts.Pretty-import Language.Haskell.Exts.Extension import Language.Haskell.Exts.Fixity-import Language.Haskell.Exts.Comments+import Language.Haskell.Exts.ExactPrint+import Language.Haskell.Exts.SrcLoc+import Language.Haskell.Exts.Extension import Data.List+import Data.Maybe (fromMaybe) import Language.Preprocessor.Unlit+import System.IO -- | Parse a source file on disk, using the default parse mode.-parseFile :: FilePath -> IO (ParseResult Module)+parseFile :: FilePath -> IO (ParseResult (Module SrcSpanInfo)) parseFile fp = parseFileWithMode (defaultParseMode { parseFilename = fp }) fp -- | Parse a source file on disk, with an extra set of extensions to know about -- on top of what the file itself declares.-parseFileWithExts :: [Extension] -> FilePath -> IO (ParseResult Module)-parseFileWithExts exts fp = parseFileWithMode (defaultParseMode { extensions = exts, parseFilename = fp }) fp+parseFileWithExts :: [Extension] -> FilePath -> IO (ParseResult (Module SrcSpanInfo))+parseFileWithExts exts fp =+ parseFileWithMode (defaultParseMode {+ extensions = exts,+ parseFilename = fp }) fp -- | Parse a source file on disk, supplying a custom parse mode.-parseFileWithMode :: ParseMode -> FilePath -> IO (ParseResult Module)-parseFileWithMode p fp = readFile fp >>= (return . parseFileContentsWithMode p)+parseFileWithMode :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo))+parseFileWithMode p fp = readUTF8File fp >>= return . parseFileContentsWithMode p +parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo, [Comment]))+parseFileWithComments p fp = readUTF8File fp >>= return . parseFileContentsWithComments p++-- | Parse a source file on disk, supplying a custom parse mode, and retaining comments+-- as well as unknown pragmas.+parseFileWithCommentsAndPragmas+ :: ParseMode -> FilePath+ -> IO (ParseResult (Module SrcSpanInfo, [Comment], [UnknownPragma]))+parseFileWithCommentsAndPragmas p fp =+ readUTF8File fp >>= return . parseFileContentsWithCommentsAndPragmas p++-- | Parse a source file from a string using a custom parse mode retaining comments+-- as well as unknown pragmas.+parseFileContentsWithCommentsAndPragmas+ :: ParseMode -> String+ -> ParseResult (Module SrcSpanInfo, [Comment], [UnknownPragma])+parseFileContentsWithCommentsAndPragmas pmode str = separatePragmas parseResult+ where parseResult = parseFileContentsWithComments pmode str+ -- | Parse a source file from a string using the default parse mode.-parseFileContents :: String -> ParseResult Module+parseFileContents :: String -> ParseResult (Module SrcSpanInfo) parseFileContents = parseFileContentsWithMode defaultParseMode -- | Parse a source file from a string, with an extra set of extensions to know about -- on top of what the file itself declares.-parseFileContentsWithExts :: [Extension] -> String -> ParseResult Module-parseFileContentsWithExts exts = parseFileContentsWithMode (defaultParseMode { extensions = exts })+parseFileContentsWithExts :: [Extension] -> String -> ParseResult (Module SrcSpanInfo)+parseFileContentsWithExts exts =+ parseFileContentsWithMode (defaultParseMode { extensions = exts }) -- | Parse a source file from a string using a custom parse mode.-parseFileContentsWithMode :: ParseMode -> String -> ParseResult Module-parseFileContentsWithMode p@(ParseMode fn exts ign _) rawStr =+parseFileContentsWithMode :: ParseMode -> String -> ParseResult (Module SrcSpanInfo)+parseFileContentsWithMode p@(ParseMode fn oldLang exts ign _ _ _) rawStr = let md = delit fn $ ppContents rawStr- allExts = impliesExts $ case (ign, readExtensions md) of- (False,Just es) -> exts ++ es- _ -> exts- in parseWithMode (p { extensions = allExts }) md+ (bLang, extraExts) =+ case (ign, readExtensions md) of+ (False, Just (mLang, es)) ->+ (fromMaybe oldLang mLang, es)+ _ -> (oldLang, [])+ in -- trace (fn ++ ": " ++ show extraExts) $+ parseModuleWithMode (p { baseLanguage = bLang, extensions = exts ++ extraExts }) md +parseFileContentsWithComments :: ParseMode -> String -> ParseResult (Module SrcSpanInfo, [Comment])+parseFileContentsWithComments p@(ParseMode fn oldLang exts ign _ _ _) rawStr =+ let md = delit fn $ ppContents rawStr+ (bLang, extraExts) =+ case (ign, readExtensions md) of+ (False, Just (mLang, es)) ->+ (fromMaybe oldLang mLang, es)+ _ -> (oldLang, [])+ in parseModuleWithComments (p { baseLanguage = bLang, extensions = exts ++ extraExts }) md -- | Gather the extensions declared in LANGUAGE pragmas -- at the top of the file. Returns 'Nothing' if the -- parse of the pragmas fails.-readExtensions :: String -> Maybe [Extension]+readExtensions :: String -> Maybe (Maybe Language, [Extension]) readExtensions str = case getTopPragmas str of- ParseOk pgms -> Just (concatMap getExts pgms)+ ParseOk pgms -> extractLang $ concatMap getExts pgms _ -> Nothing- where getExts :: OptionPragma -> [Extension]+ where getExts :: ModulePragma l -> [Either Language Extension] getExts (LanguagePragma _ ns) = map readExt ns getExts _ = [] - readExt (Ident e) = classifyExtension e+ readExt (Ident _ e) =+ case classifyLanguage e of+ UnknownLanguage _ -> Right $ classifyExtension e+ lang -> Left lang+ readExt Symbol {} = error "readExt: Symbol" + extractLang = extractLang' Nothing []++ extractLang' lacc eacc [] = Just (lacc, eacc)+ extractLang' Nothing eacc (Left l : rest) = extractLang' (Just l) eacc rest+ extractLang' (Just l1) eacc (Left l2:rest)+ | l1 == l2 = extractLang' (Just l1) eacc rest+ | otherwise = Nothing+ extractLang' lacc eacc (Right ext : rest) = extractLang' lacc (ext:eacc) rest+ ppContents :: String -> String ppContents = unlines . f . lines where f (('#':_):rest) = rest@@ -95,3 +155,26 @@ delit :: String -> String -> String delit fn = if ".lhs" `isSuffixOf` fn then unlit fn else id++readUTF8File :: FilePath -> IO String+readUTF8File fp = do+ h <- openFile fp ReadMode+ hSetEncoding h utf8+ c <- hGetContents h >>= \s -> length s `seq` return s+ hClose h+ return c++-- | Converts a parse result with comments to a parse result with comments and+-- unknown pragmas.+separatePragmas :: ParseResult (Module SrcSpanInfo, [Comment])+ -> ParseResult (Module SrcSpanInfo, [Comment], [UnknownPragma])+separatePragmas r =+ case r of+ ParseOk (m, comments) ->+ let (pragmas, comments') = partition pragLike comments+ in ParseOk (m, comments', map commentToPragma pragmas)+ where commentToPragma (Comment _ l s) =+ UnknownPragma l $ init $ drop 1 s+ pragLike (Comment b _ s) = b && pcond s+ pcond s = length s > 1 && take 1 s == "#" && last s == '#'+ ParseFailed l s -> ParseFailed l s
@@ -1,116 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Exts--- Copyright : (c) Niklas Broberg 2004-2009--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@chalmers.se--- Stability : stable--- Portability : portable------ An umbrella module for the various functionality--- of the package. Also provides some convenient--- functionality for dealing directly with source files.----------------------------------------------------------------------------------module Language.Haskell.Exts.Annotated (- -- * Re-exported modules- module Language.Haskell.Exts.Annotated.Syntax- , module Language.Haskell.Exts.Annotated.Build- , module Language.Haskell.Exts.Parser- , module Language.Haskell.Exts.Pretty- , module Language.Haskell.Exts.Annotated.Fixity- , module Language.Haskell.Exts.Annotated.ExactPrint- , module Language.Haskell.Exts.SrcLoc- , module Language.Haskell.Exts.Comments- , module Language.Haskell.Exts.Extension- -- * Parsing of Haskell source files- , parseFile- , parseFileWithMode- , parseFileWithExts- , parseFileWithComments- , parseFileContents- , parseFileContentsWithMode- , parseFileContentsWithExts- , parseFileContentsWithComments- -- * Read extensions declared in LANGUAGE pragmas- , readExtensions- ) where--import Language.Haskell.Exts.Annotated.Build-import Language.Haskell.Exts.Annotated.Syntax-import Language.Haskell.Exts.Parser ( Parseable(..), ParseResult(..), fromParseResult, ParseMode(..), defaultParseMode )-import Language.Haskell.Exts.Pretty-import Language.Haskell.Exts.Annotated.Fixity-import Language.Haskell.Exts.Annotated.ExactPrint-import Language.Haskell.Exts.SrcLoc-import Language.Haskell.Exts.Extension-import Language.Haskell.Exts.Comments--import Language.Haskell.Exts.InternalParser--import Data.List-import Language.Preprocessor.Unlit---- | Parse a source file on disk, using the default parse mode.-parseFile :: FilePath -> IO (ParseResult (Module SrcSpanInfo))-parseFile fp = parseFileWithMode (defaultParseMode { parseFilename = fp }) fp---- | Parse a source file on disk, with an extra set of extensions to know about--- on top of what the file itself declares.-parseFileWithExts :: [Extension] -> FilePath -> IO (ParseResult (Module SrcSpanInfo))-parseFileWithExts exts fp = parseFileWithMode (defaultParseMode { extensions = exts, parseFilename = fp }) fp---- | Parse a source file on disk, supplying a custom parse mode.-parseFileWithMode :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo))-parseFileWithMode p fp = readFile fp >>= (return . parseFileContentsWithMode p)--parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo, [Comment]))-parseFileWithComments p fp = readFile fp >>= (return . parseFileContentsWithComments p)---- | Parse a source file from a string using the default parse mode.-parseFileContents :: String -> ParseResult (Module SrcSpanInfo)-parseFileContents = parseFileContentsWithMode defaultParseMode---- | Parse a source file from a string, with an extra set of extensions to know about--- on top of what the file itself declares.-parseFileContentsWithExts :: [Extension] -> String -> ParseResult (Module SrcSpanInfo)-parseFileContentsWithExts exts = parseFileContentsWithMode (defaultParseMode { extensions = exts })---- | Parse a source file from a string using a custom parse mode.-parseFileContentsWithMode :: ParseMode -> String -> ParseResult (Module SrcSpanInfo)-parseFileContentsWithMode p@(ParseMode fn exts ign _) rawStr =- let md = delit fn $ ppContents rawStr- allExts = impliesExts $ case (ign, readExtensions md) of- (False,Just es) -> exts ++ es- _ -> exts- in parseModuleWithMode (p { extensions = allExts }) md--parseFileContentsWithComments :: ParseMode -> String -> ParseResult (Module SrcSpanInfo, [Comment])-parseFileContentsWithComments p@(ParseMode fn exts ign _) rawStr =- let md = delit fn $ ppContents rawStr- allExts = impliesExts $ case (ign, readExtensions md) of- (False,Just es) -> exts ++ es- _ -> exts- in parseModuleWithComments (p { extensions = allExts }) md---- | Gather the extensions declared in LANGUAGE pragmas--- at the top of the file. Returns 'Nothing' if the--- parse of the pragmas fails.-readExtensions :: String -> Maybe [Extension]-readExtensions str = case getTopPragmas str of- ParseOk pgms -> Just (concatMap getExts pgms)- _ -> Nothing- where getExts :: OptionPragma l -> [Extension]- getExts (LanguagePragma _ ns) = map readExt ns- getExts _ = []-- readExt (Ident _ e) = classifyExtension e--ppContents :: String -> String-ppContents = unlines . f . lines- where f (('#':_):rest) = rest- f x = x--delit :: String -> String -> String-delit fn = if ".lhs" `isSuffixOf` fn then unlit fn else id
@@ -1,290 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Exts.Annotated.Build--- Copyright : (c) The GHC Team, 1997-2000,--- (c) Niklas Broberg 2004--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@chalmers.se--- Stability : experimental--- Portability : portable------ This module contains combinators to use when building--- Haskell source trees programmatically, as opposed to--- parsing them from a string. The contents here are quite--- experimental and will likely receive a lot of attention--- when the rest has stabilised.-----------------------------------------------------------------------------------module Language.Haskell.Exts.Annotated.Build (-- -- * Syntax building functions- name, -- :: String -> Name- sym, -- :: String -> Name- var, -- :: Name -> Exp- op, -- :: Name -> QOp- qvar, -- :: Module -> Name -> Exp- pvar, -- :: Name -> Pat- app, -- :: Exp -> Exp -> Exp- infixApp, -- :: Exp -> QOp -> Exp -> Exp- appFun, -- :: Exp -> [Exp] -> Exp- pApp, -- :: Name -> [Pat] -> Pat- tuple, -- :: [Exp] -> Exp- pTuple, -- :: [Pat] -> Pat- varTuple, -- :: [Name] -> Exp- pvarTuple, -- :: [Name] -> Pat- function, -- :: String -> Exp- strE, -- :: String -> Exp- charE, -- :: Char -> Exp- intE, -- :: Integer -> Exp- strP, -- :: String -> Pat- charP, -- :: Char -> Pat- intP, -- :: Integer -> Pat- doE, -- :: [Stmt] -> Exp- lamE, -- :: SrcLoc -> [Pat] -> Exp -> Exp- letE, -- :: [Decl] -> Exp -> Exp- caseE, -- :: Exp -> [Alt] -> Exp- alt, -- :: SrcLoc -> Pat -> Exp -> Alt- altGW, -- :: SrcLoc -> Pat -> [Stmt] -> Exp -> Binds -> Alt- listE, -- :: [Exp] -> Exp- eList, -- :: Exp- peList, -- :: Pat- paren, -- :: Exp -> Exp- pParen, -- :: Pat -> Pat- qualStmt, -- :: Exp -> Stmt- genStmt, -- :: SrcLoc -> Pat -> Exp -> Stmt- letStmt, -- :: [Decl] -> Stmt- binds, -- :: [Decl] -> Binds- noBinds, -- :: Binds- wildcard, -- :: Pat- genNames, -- :: String -> Int -> [Name]-- -- * More advanced building- sfun, -- :: SrcLoc -> Name -> [Name] -> Rhs -> Binds -> Decl- simpleFun, -- :: SrcLoc -> Name -> Name -> Exp -> Decl- patBind, -- :: SrcLoc -> Pat -> Exp -> Decl- patBindWhere, -- :: SrcLoc -> Pat -> Exp -> [Decl] -> Decl- nameBind, -- :: SrcLoc -> Name -> Exp -> Decl- metaFunction, -- :: String -> [Exp] -> Exp- metaConPat -- :: String -> [Pat] -> Pat- ) where--import Language.Haskell.Exts.Annotated.Syntax---------------------------------------------------------------------------------- Help functions for Abstract syntax---- | An identifier with the given string as its name.--- The string should be a valid Haskell identifier.-name :: l -> String -> Name l-name = Ident---- | A symbol identifier. The string should be a valid--- Haskell symbol identifier.-sym :: l -> String -> Name l-sym = Symbol---- | A local variable as expression.-var :: l -> Name l -> Exp l-var l = Var l . UnQual l---- | Use the given identifier as an operator.-op :: l -> Name l -> QOp l-op l = QVarOp l . UnQual l---- | A qualified variable as expression.-qvar :: l -> ModuleName l -> Name l -> Exp l-qvar l m = Var l . Qual l m---- | A pattern variable.-pvar :: l -> Name l -> Pat l-pvar = PVar---- | Application of expressions by juxtaposition.-app :: l -> Exp l -> Exp l -> Exp l-app = App---- | Apply an operator infix.-infixApp :: l -> Exp l -> QOp l -> Exp l -> Exp l-infixApp = InfixApp---- | Apply a function to a list of arguments.-appFun :: [l] -> Exp l -> [Exp l] -> Exp l-appFun _ f [] = f-appFun (l:ls) f (a:as) = appFun ls (app l f a) as---- | A constructor pattern, with argument patterns.-pApp :: l -> Name l -> [Pat l] -> Pat l-pApp l n = PApp l (UnQual l n)---- | A tuple expression.-tuple :: l -> [Exp l] -> Exp l-tuple = Tuple---- | A tuple pattern.-pTuple :: l -> [Pat l] -> Pat l-pTuple = PTuple---- | A tuple expression consisting of variables only.-varTuple :: l -> [Name l] -> Exp l-varTuple l ns = tuple l $ map (var l) ns---- | A tuple pattern consisting of variables only.-pvarTuple :: l -> [Name l] -> Pat l-pvarTuple l ns = pTuple l $ map (pvar l) ns---- | A function with a given name.-function :: l -> String -> Exp l-function l = var l . Ident l---- | A literal string expression.-strE :: l -> String -> Exp l-strE l s = Lit l $ String l s s---- | A literal character expression.-charE :: l -> Char -> Exp l-charE l c = Lit l $ Char l c [c]---- | A literal integer expression.-intE :: l -> Integer -> Exp l-intE l i = Lit l $ Int l i (show i)---- | A literal string pattern.-strP :: l -> String -> Pat l-strP l s = PLit l $ String l s s---- | A literal character pattern.-charP :: l -> Char -> Pat l-charP l c = PLit l $ Char l c [c]---- | A literal integer pattern.-intP :: l -> Integer -> Pat l-intP l i = PLit l $ Int l i (show i)---- | A do block formed by the given statements.--- The last statement in the list should be--- a 'Qualifier' expression.-doE :: l -> [Stmt l] -> Exp l-doE = Do---- | Lambda abstraction, given a list of argument--- patterns and an expression body.-lamE :: l -> [Pat l] -> Exp l -> Exp l-lamE = Lambda---- | A @let@ ... @in@ block.-letE :: l -> [Decl l] -> Exp l -> Exp l-letE l ds e = Let l (binds l ds) e---- | A @case@ expression.-caseE :: l -> Exp l -> [Alt l] -> Exp l-caseE = Case---- | An unguarded alternative in a @case@ expression.-alt :: l -> Pat l -> Exp l -> Alt l-alt l p e = Alt l p (unGAlt l e) Nothing---- | An alternative with a single guard in a @case@ expression.-altGW :: l -> Pat l -> [Stmt l] -> Exp l -> Binds l -> Alt l-altGW l p gs e w = Alt l p (gAlt l gs e) (Just w)---- | An unguarded righthand side of a @case@ alternative.-unGAlt :: l -> Exp l -> GuardedAlts l-unGAlt = UnGuardedAlt---- | An list of guarded righthand sides for a @case@ alternative.-gAlts :: l -> [([Stmt l], Exp l)] -> GuardedAlts l-gAlts l as = GuardedAlts l $ map (\(gs,e) -> GuardedAlt l gs e) as---- | A single guarded righthand side for a @case@ alternative.-gAlt :: l -> [Stmt l] -> Exp l -> GuardedAlts l-gAlt l gs e = gAlts l [(gs,e)]---- | A list expression.-listE :: l -> [Exp l] -> Exp l-listE = List---- | The empty list expression.-eList :: l -> Exp l-eList l = List l []---- | The empty list pattern.-peList :: l -> Pat l-peList l = PList l []---- | Put parentheses around an expression.-paren :: l -> Exp l -> Exp l-paren = Paren---- | Put parentheses around a pattern.-pParen :: l -> Pat l -> Pat l-pParen = PParen---- | A qualifier expression statement.-qualStmt :: l -> Exp l -> Stmt l-qualStmt = Qualifier---- | A generator statement: /pat/ @<-@ /exp/-genStmt :: l -> Pat l -> Exp l -> Stmt l-genStmt = Generator---- | A @let@ binding group as a statement.-letStmt :: l -> [Decl l] -> Stmt l-letStmt l ds = LetStmt l $ binds l ds---- | Hoist a set of declarations to a binding group.-binds :: l -> [Decl l] -> Binds l-binds = BDecls---- | An empty binding group.-noBinds :: l -> Binds l-noBinds l = binds l []---- | The wildcard pattern: @_@-wildcard :: l -> Pat l-wildcard = PWildCard---- | Generate k names by appending numbers 1 through k to a given string.-genNames :: l -> String -> Int -> [Name l]-genNames l s k = [ Ident l $ s ++ show i | i <- [1..k] ]------------------------------------------------------------------------------------ Some more specialised help functions---- | A function with a single clause-sfun :: l -> Name l -> [Name l] -> Rhs l -> Maybe (Binds l) -> Decl l-sfun l f pvs rhs mbs = FunBind l [Match l f (map (pvar l) pvs) rhs mbs]---- | A function with a single clause, a single argument, no guards--- and no where declarations-simpleFun :: l -> Name l -> Name l -> Exp l -> Decl l-simpleFun l f a e = let rhs = UnGuardedRhs l e- in sfun l f [a] rhs Nothing---- | A pattern bind where the pattern is a variable, and where--- there are no guards and no 'where' clause.-patBind :: l -> Pat l -> Exp l -> Decl l-patBind l p e = let rhs = UnGuardedRhs l e- in PatBind l p Nothing rhs Nothing---- | A pattern bind where the pattern is a variable, and where--- there are no guards, but with a 'where' clause.-patBindWhere :: l -> Pat l -> Exp l -> [Decl l] -> Decl l-patBindWhere l p e ds = let rhs = UnGuardedRhs l e- in PatBind l p Nothing rhs (Just $ binds l ds)---- | Bind an identifier to an expression.-nameBind :: l -> Name l -> Exp l -> Decl l-nameBind l n e = patBind l (pvar l n) e---- | Apply function of a given name to a list of arguments.-metaFunction :: l -> String -> [Exp l] -> Exp l-metaFunction l s es = mf l s (reverse es)- where mf l s [] = var l $ name l s- mf l s (e:es) = app l (mf l s es) e---- | Apply a constructor of a given name to a list of pattern--- arguments, forming a constructor pattern.-metaConPat :: l -> String -> [Pat l] -> Pat l-metaConPat l s ps = pApp l (name l s) ps
@@ -1,1417 +0,0 @@------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.Annotated.ExactPrint --- Copyright : (c) Niklas Broberg 2009 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : stable --- Portability : portable --- --- Exact-printer for Haskell abstract syntax. The input is a (semi-concrete) --- abstract syntax tree, annotated with exact source information to enable --- printing the tree exactly as it was parsed. --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.Annotated.ExactPrint - ( exactPrint - , ExactP - ) where - -import Language.Haskell.Exts.Annotated.Syntax -import Language.Haskell.Exts.SrcLoc -import Language.Haskell.Exts.Comments - -import Control.Monad (when) - --- import Debug.Trace (trace) - ------------------------------------------------------- --- The EP monad and basic combinators - -type Pos = (Int,Int) - -pos :: (SrcInfo loc) => loc -> Pos -pos ss = (startLine ss, startColumn ss) - -newtype EP x = EP (Pos -> [Comment] -> (x, Pos, [Comment], ShowS)) - -instance Monad EP where - return x = EP $ \l cs -> (x, l, cs, id) - - EP m >>= k = EP $ \l0 c0 -> let - (a, l1, c1, s1) = m l0 c0 - EP f = k a - (b, l2, c2, s2) = f l1 c1 - in (b, l2, c2, s1 . s2) - -runEP :: EP () -> [Comment] -> String -runEP (EP f) cs = let (_,_,_,s) = f (1,1) cs in s "" - -getPos :: EP Pos -getPos = EP (\l cs -> (l,l,cs,id)) - -setPos :: Pos -> EP () -setPos l = EP (\_ cs -> ((),l,cs,id)) - -printString :: String -> EP () -printString str = EP (\(l,c) cs -> ((), (l,c+length str), cs, showString str)) - -getComment :: EP (Maybe Comment) -getComment = EP $ \l cs -> - let x = case cs of - c:_ -> Just c - _ -> Nothing - in (x, l, cs, id) - -dropComment :: EP () -dropComment = EP $ \l cs -> - let cs' = case cs of - (_:cs) -> cs - _ -> cs - in ((), l, cs', id) - -newLine :: EP () -newLine = do - (l,_) <- getPos - printString "\n" - setPos (l+1,1) - -padUntil :: Pos -> EP () -padUntil (l,c) = do - (l1,c1) <- getPos - case {- trace (show ((l,c), (l1,c1))) -} () of - _ {-()-} | l1 >= l && c1 <= c -> printString $ replicate (c - c1) ' ' - | l1 < l -> newLine >> padUntil (l,c) - | otherwise -> return () - - -mPrintComments :: Pos -> EP () -mPrintComments p = do - mc <- getComment - case mc of - Nothing -> return () - Just (Comment multi s str) -> - when (pos s < p) $ do - dropComment - padUntil (pos s) - printComment multi str - setPos (srcSpanEndLine s, srcSpanEndColumn s) - mPrintComments p - -printComment :: Bool -> String -> EP () -printComment b str - | b = printString $ "{-" ++ str ++ "-}" - | otherwise = printString $ "--" ++ str - -printWhitespace :: Pos -> EP () -printWhitespace p = mPrintComments p >> padUntil p - -printStringAt :: Pos -> String -> EP () -printStringAt p str = printWhitespace p >> printString str - ------------------------------------------------------------------------------- --- Printing of source elements - -exactPrint :: (ExactP ast) => ast SrcSpanInfo -> [Comment] -> String -exactPrint ast cs = runEP (exactP ast) cs - -exactPC :: (Annotated ast, ExactP ast) => ast SrcSpanInfo -> EP () -exactPC ast = let p = pos (ann ast) in mPrintComments p >> padUntil p >> exactP ast - -printSeq :: [(Pos, EP ())] -> EP () -printSeq [] = return () -printSeq ((p,pr):xs) = printWhitespace p >> pr >> printSeq xs - -printStrs :: SrcInfo loc => [(loc, String)] -> EP () -printStrs = printSeq . map (\(loc, str) -> (pos loc, printString str)) - -printPoints :: SrcSpanInfo -> [String] -> EP () -printPoints l = printStrs . zip (srcInfoPoints l) - -printInterleaved, printInterleaved' :: (Annotated ast, ExactP ast, SrcInfo loc) => [(loc, String)] -> [ast SrcSpanInfo] -> EP () -printInterleaved sistrs asts = printSeq $ - interleave (map (\(loc, str) -> (pos loc, printString str)) sistrs) - (map (\a -> (pos $ ann a, exactP a)) asts) - -printInterleaved' sistrs (a:asts) = exactPC a >> printInterleaved sistrs asts - -printStreams :: [(Pos, EP ())] -> [(Pos, EP ())] -> EP () -printStreams [] ys = printSeq ys -printStreams xs [] = printSeq xs -printStreams (x@(p1,ep1):xs) (y@(p2,ep2):ys) - | p1 <= p2 = printWhitespace p1 >> ep1 >> printStreams xs (y:ys) - | otherwise = printWhitespace p2 >> ep2 >> printStreams (x:xs) ys - - -interleave :: [a] -> [a] -> [a] -interleave [] ys = ys -interleave xs [] = xs -interleave (x:xs) (y:ys) = x:y: interleave xs ys - -maybeEP :: (a -> EP ()) -> Maybe a -> EP () -maybeEP = maybe (return ()) - -bracketList :: (Annotated ast, ExactP ast) => (String, String, String) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP () -bracketList (a,b,c) poss asts = printInterleaved (pList poss (a,b,c)) asts - -pList (p:ps) (a,b,c) = (p,a) : pList' ps (b,c) -pList' [] _ = [] -pList' [p] (_,c) = [(p,c)] -pList' (p:ps) (b,c) = (p, b) : pList' ps (b,c) - -parenList, squareList, curlyList :: (Annotated ast, ExactP ast) => [SrcSpan] -> [ast SrcSpanInfo] -> EP () -parenList = bracketList ("(",",",")") -squareList = bracketList ("[",",","]") -curlyList = bracketList ("{",",","}") - -layoutList :: (Functor ast, Show (ast ()), Annotated ast, ExactP ast) => [SrcSpan] -> [ast SrcSpanInfo] -> EP () -layoutList poss asts = printInterleaved (lList poss) asts - -lList (p:ps) = (if isNullSpan p then (p,"") else (p,"{")) : lList' ps -lList' [] = [] -lList' [p] = [if isNullSpan p then (p,"") else (p,"}")] -lList' (p:ps) = (if isNullSpan p then (p,"") else (p,";")) : lList' ps - - --------------------------------------------------- --- Exact printing - -class ExactP ast where - exactP :: ast SrcSpanInfo -> EP () - -instance ExactP Literal where - exactP lit = case lit of - Char _ _ rw -> printString ('\'':rw ++ "\'") - String _ _ rw -> printString ('\"':rw ++ "\"") - Int _ _ rw -> printString (rw) - Frac _ _ rw -> printString (rw) - PrimInt _ _ rw -> printString (rw ++ "#" ) - PrimWord _ _ rw -> printString (rw ++ "##") - PrimFloat _ _ rw -> printString (rw ++ "#" ) - PrimDouble _ _ rw -> printString (rw ++ "##") - PrimChar _ _ rw -> printString ('\'':rw ++ "\'#" ) - PrimString _ _ rw -> printString ('\"':rw ++ "\"#" ) - -instance ExactP ModuleName where - exactP (ModuleName l str) = printString str - -instance ExactP SpecialCon where - exactP sc = case sc of - UnitCon l -> printPoints l ["(",")"] - ListCon l -> printPoints l ["[","]"] - FunCon l -> printPoints l ["(","->",")"] - TupleCon l b n -> printPoints l $ - case b of - Unboxed -> "(#": replicate n "," ++ ["#)"] - _ -> "(" : replicate n "," ++ [")"] - Cons l -> printString ":" - UnboxedSingleCon l -> printPoints l ["(#","#)"] - -isSymbol :: Name l -> Bool -isSymbol (Symbol _ _) = True -isSymbol _ = False - -getName :: QName l -> Name l -getName (UnQual _ s) = s -getName (Qual _ _ s) = s -getName (Special l (Cons _)) = Symbol l ":" -getName (Special l (FunCon _)) = Symbol l "->" -getName (Special l s) = Ident l (specialName s) - -specialName :: SpecialCon l -> String -specialName (UnitCon _) = "()" -specialName (ListCon _) = "[]" -specialName (FunCon _) = "->" -specialName (TupleCon _ b n) = "(" ++ hash ++ replicate (n-1) ',' ++ hash ++ ")" - where hash = case b of - Unboxed -> "#" - _ -> "" -specialName (Cons _) = ":" - -instance ExactP QName where - exactP qn - | isSymbol (getName qn) = do - let [a,b,c] = srcInfoPoints (ann qn) - printString "(" - printWhitespace (pos b) - epQName qn - printStringAt (pos c) ")" - | otherwise = epQName qn - -epQName :: QName SrcSpanInfo -> EP () -epQName qn = case qn of - Qual l mn n -> exactP mn >> printString "." >> epName n - UnQual l n -> epName n - Special l sc -> exactP sc - -epInfixQName :: QName SrcSpanInfo -> EP () -epInfixQName qn - | isSymbol (getName qn) = printWhitespace (pos (ann qn)) >> epQName qn - | otherwise = do - let [a,b,c] = srcInfoPoints (ann qn) - printStringAt (pos a) "`" - printWhitespace (pos b) - epQName qn - printStringAt (pos c) "`" - -instance ExactP Name where - exactP n = case n of - Ident l str -> printString str - Symbol l str -> do - let [a,b,c] = srcInfoPoints l - printString "(" - printWhitespace (pos b) - printString str - printStringAt (pos c) ")" - -epName :: Name SrcSpanInfo -> EP () -epName (Ident _ str) = printString str -epName (Symbol _ str) = printString str - -epInfixName :: Name SrcSpanInfo -> EP () -epInfixName n - | isSymbol n = printWhitespace (pos (ann n)) >> epName n - | otherwise = do - let [a,b,c] = srcInfoPoints (ann n) - printStringAt (pos a) "`" - printWhitespace (pos b) - epName n - printStringAt (pos c) "`" - -instance ExactP IPName where - exactP ipn = case ipn of - IPDup l str -> printString $ '?':str - IPLin l str -> printString $ '%':str - -instance ExactP QOp where - exactP qop = case qop of - QVarOp l qn -> epInfixQName qn - QConOp l qn -> epInfixQName qn - -instance ExactP Op where - exactP op = case op of - VarOp l n -> epInfixName n - ConOp l n -> epInfixName n - - - -instance ExactP CName where - exactP cn = case cn of - VarName l n -> exactP n - ConName l n -> exactP n - -instance ExactP ExportSpec where - exactP espec = case espec of - EVar l qn -> exactP qn - EAbs l qn -> exactP qn - EThingAll l qn -> exactP qn >> printPoints l ["(","..",")"] - EThingWith l qn cns -> - let k = length (srcInfoPoints l) - in exactP qn >> printInterleaved (zip (srcInfoPoints l) $ "(":replicate (k-2) "," ++ [")"]) cns - EModuleContents l mn -> printString "module" >> exactPC mn - -instance ExactP ExportSpecList where - exactP (ExportSpecList l ess) = - let k = length (srcInfoPoints l) - in printInterleaved (zip (srcInfoPoints l) $ "(": replicate (k-2) "," ++ [")"]) ess - -instance ExactP ImportSpecList where - exactP (ImportSpecList l hid ispecs) = do - let pts = srcInfoPoints l - pts <- if hid then do - let (x:pts') = pts - printStringAt (pos x) "hiding" - return pts' - else return pts - let k = length pts - printInterleaved (zip pts $ "(": replicate (k-2) "," ++ [")"]) ispecs - -instance ExactP ImportSpec where - exactP ispec = case ispec of - IVar l n -> exactP n - IAbs l n -> exactP n - IThingAll l n -> exactP n >> printPoints l ["(","..",")"] - IThingWith l n cns -> - let k = length (srcInfoPoints l) - in exactP n >> printInterleaved (zip (srcInfoPoints l) $ "(":replicate (k-2) "," ++ [")"]) cns - -instance ExactP ImportDecl where - exactP (ImportDecl l mn qf src mpkg mas mispecs) = do - printString "import" - let (a:pts) = srcInfoPoints l - pts <- if src then do - let (x:y:pts') = pts - printStringAt (pos x) "{-# SOURCE" - printStringAt (pos y) "#-}" - return pts' - else return pts - pts <- if qf then do - let (x:pts') = pts - printStringAt (pos x) "qualified" - return pts' - else return pts - pts <- case mpkg of - Just pkg -> do - let (x:pts') = pts - printStringAt (pos x) $ show pkg - return pts' - _ -> return pts - exactPC mn - pts <- case mas of - Just as -> do - let (x:pts') = pts - printStringAt (pos x) "as" - exactPC as - return pts' - _ -> return pts - case mispecs of - Nothing -> return () - Just ispecs -> exactPC ispecs - -instance ExactP Module where - exactP mdl = case mdl of - Module l mmh oss ids decls -> do - let (oPts, pts) = splitAt (max (length oss + 1) 2) (srcInfoPoints l) - layoutList oPts oss - maybeEP exactPC mmh - printStreams (map (\(p,s) -> (pos p, printString s)) $ lList pts) - (map (\i -> (pos $ ann i, exactPC i)) ids ++ map (\d -> (pos $ ann d, exactPC d)) (sepFunBinds decls)) - XmlPage l _mn oss xn attrs mat es -> do - let (oPts, [a,b,c,d,e]) = splitAt (max (length oss + 1) 2) $ srcInfoPoints l - layoutList oPts oss - printStringAt (pos a) "<" - exactPC xn - mapM_ exactPC attrs - maybeEP exactPC mat - printStringAt (pos b) ">" - mapM_ exactPC es - printStringAt (pos c) "</" - printWhitespace (pos d) - exactP xn - printStringAt (pos e) ">" - XmlHybrid l mmh oss ids decls xn attrs mat es -> do - let (oPts, pts) = splitAt (max (length oss + 1) 2) (srcInfoPoints l) - layoutList oPts oss - maybeEP exactPC mmh - let (dPts, [a,b,c,d,e]) = splitAt (length pts - 5) pts - printStreams (map (\(p,s) -> (pos p, printString s)) $ lList dPts) - (map (\i -> (pos $ ann i, exactPC i)) ids ++ map (\d -> (pos $ ann d, exactPC d)) (sepFunBinds decls)) - - printStringAt (pos a) "<" - exactPC xn - mapM_ exactPC attrs - maybeEP exactPC mat - printStringAt (pos b) ">" - mapM_ exactPC es - printStringAt (pos c) "</" - printWhitespace (pos d) - exactP xn - printStringAt (pos e) ">" - -instance ExactP ModuleHead where - exactP (ModuleHead l mn mwt mess) = do - let [a,b] = srcInfoPoints l - printStringAt (pos a) "module" - exactPC mn - maybeEP exactPC mwt - maybeEP exactPC mess - printStringAt (pos b) "where" - -instance ExactP OptionPragma where - exactP op = case op of - LanguagePragma l ns -> - let pts = srcInfoPoints l - k = length ns - 1 -- number of commas - m = length pts - k - 2 -- number of virtual semis, likely 0 - in printInterleaved (zip pts ("{-# LANGUAGE":replicate k "," ++ replicate m "" ++ ["#-}"])) ns - IncludePragma l str -> - let k = length (srcInfoPoints l) - in printPoints l $ ("{-# INCLUDE " ++ str) : replicate (k-2) "" ++ ["#-}"] - CFilesPragma l str -> - let k = length (srcInfoPoints l) - in printPoints l $ ("{-# CFILES " ++ str) : replicate (k-2) "" ++ ["#-}"] - OptionsPragma l mt str -> - let k = length (srcInfoPoints l) - opstr = "{-# OPTIONS" ++ case mt of { Just t -> "_" ++ show t ; _ -> "" } ++ " " ++ str - in printPoints l $ opstr : replicate (k-2) "" ++ ["#-}"] - -instance ExactP WarningText where - exactP (DeprText l str) = printPoints l ["{-# DEPRECATED", str, "#-}"] - exactP (WarnText l str) = printPoints l ["{-# WARNING", str, "#-}"] - -instance ExactP Assoc where - exactP a = case a of - AssocNone l -> printString "infix" - AssocLeft l -> printString "infixl" - AssocRight l -> printString "infixr" - -instance ExactP DataOrNew where - exactP (DataType l) = printString "data" - exactP (NewType l) = printString "newtype" - -instance ExactP Decl where - exactP decl = case decl of - TypeDecl l dh t -> do - let [a,b] = srcInfoPoints l - printStringAt (pos a) "type" - exactPC dh - printStringAt (pos b) "=" - exactPC t - TypeFamDecl l dh mk -> do - let (a:b:ps) = srcInfoPoints l - printStringAt (pos a) "type" - printStringAt (pos b) "family" - exactPC dh - maybeEP (\k -> printStringAt (pos (head ps)) "::" >> exactPC k) mk - DataDecl l dn mctxt dh constrs mder -> do - exactP dn - maybeEP exactPC mctxt - exactPC dh - -- the next line works for empty data types since the srcInfoPoints will be empty then - printInterleaved (zip (srcInfoPoints l) ("=": repeat "|")) constrs - maybeEP exactPC mder - GDataDecl l dn mctxt dh mk gds mder -> do - let pts = srcInfoPoints l - exactP dn - maybeEP exactPC mctxt - exactPC dh - (x:pts) <- case mk of - Nothing -> return pts - Just kd -> let (p:pts') = pts in do - printStringAt (pos p) "::" - exactPC kd - return pts' - printStringAt (pos x) "where" - layoutList pts gds - maybeEP exactPC mder - DataFamDecl l mctxt dh mk -> do - printString "data" - maybeEP exactPC mctxt - exactPC dh - maybeEP (\kd -> printStringAt (pos (head (srcInfoPoints l))) "::" >> exactPC kd) mk - TypeInsDecl l t1 t2 -> do - let [a,b,c] = srcInfoPoints l - printString "type" - printStringAt (pos b) "instance" - exactPC t1 - printStringAt (pos c) "=" - exactPC t2 - DataInsDecl l dn t constrs mder -> do - let (p:pts) = srcInfoPoints l - exactP dn - printStringAt (pos p) "instance" - exactPC t - printInterleaved (zip (srcInfoPoints l) ("=": repeat "|")) constrs - maybeEP exactPC mder - GDataInsDecl l dn t mk gds mder -> do - let (p:pts) = srcInfoPoints l - exactP dn - printStringAt (pos p) "instance" - exactPC t - (x:pts) <- case mk of - Nothing -> return pts - Just kd -> let (p:pts') = pts in do - printStringAt (pos p) "::" - exactPC kd - return pts' - printStringAt (pos x) "where" - layoutList pts gds - maybeEP exactPC mder - ClassDecl l mctxt dh fds mcds -> do - let (a:pts) = srcInfoPoints l - printString "class" - maybeEP exactPC mctxt - exactPC dh - pts <- case fds of - [] -> return pts - _ -> do - let (pts1, pts2) = splitAt (length fds) pts - printInterleaved (zip pts1 ("|":repeat ",")) fds - return pts2 - maybeEP (\cds -> do - let (p:pts') = pts - printStringAt (pos p) "where" - layoutList pts' $ sepClassFunBinds cds - ) mcds - InstDecl l mctxt ih mids -> do - let (a:pts) = srcInfoPoints l - printString "instance" - maybeEP exactPC mctxt - exactPC ih - maybeEP (\ids -> do - let (p:pts') = pts - printStringAt (pos p) "where" - layoutList pts' $ sepInstFunBinds ids - ) mids - DerivDecl l mctxt ih -> do - let [a,b] = srcInfoPoints l - printString "deriving" - printStringAt (pos b) "instance" - maybeEP exactPC mctxt - exactPC ih - InfixDecl l assoc mprec ops -> do - let pts = srcInfoPoints l - exactP assoc - pts <- case mprec of - Nothing -> return pts - Just prec -> do - let (p:pts') = pts - printStringAt (pos p) (show prec) - return pts' - printInterleaved' (zip pts (repeat ",")) ops - DefaultDecl l ts -> do - let (a:pts) = srcInfoPoints l - printString "default" - printInterleaved (zip (init pts) ("(":repeat ",")) ts - printStringAt (pos (last pts)) ")" - SpliceDecl l spl -> exactP spl - TypeSig l ns t -> do - let pts = srcInfoPoints l - printInterleaved' (zip pts (replicate (length pts - 1) "," ++ ["::"])) ns - exactPC t - FunBind l ms -> mapM_ exactPC ms - PatBind l p mt rhs mbs -> do - let pts = srcInfoPoints l - exactP p - pts <- case mt of - Nothing -> return pts - Just t -> let (x:pts') = pts in do - printStringAt (pos x) "::" - exactPC t - return pts' - exactPC rhs - maybeEP (\bs -> printStringAt (pos (head pts)) "where" >> exactPC bs) mbs - ForImp l cc msf mstr n t -> do - let (a:b:pts) = srcInfoPoints l - printString "foreign" - printStringAt (pos b) "import" - exactPC cc - maybeEP exactPC msf - (y:_) <- case mstr of - Nothing -> return pts - Just str -> let (x:pts') = pts in do - printStringAt (pos x) (show str) - return pts' - exactPC n - printStringAt (pos y) "::" - exactPC t - ForExp l cc mstr n t -> do - let (a:b:pts) = srcInfoPoints l - printString "foreign" - printStringAt (pos b) "export" - exactPC cc - (y:_) <- case mstr of - Nothing -> return pts - Just str -> let (x:pts') = pts in do - printStringAt (pos x) (show str) - return pts' - exactPC n - printStringAt (pos y) "::" - exactPC t - RulePragmaDecl l rs -> do - let [a,b] = srcInfoPoints l - printString "{-# RULES" - mapM_ exactPC rs - printStringAt (pos b) "#-}" - DeprPragmaDecl l nstrs -> do - let pts = srcInfoPoints l - printString "{-# DEPRECATED" - printWarndeprs (map pos (init pts)) nstrs - printStringAt (pos (last pts)) "#-}" - WarnPragmaDecl l nstrs -> do - let pts = srcInfoPoints l - printString "{-# WARNING" - printWarndeprs (map pos (init pts)) nstrs - printStringAt (pos (last pts)) "#-}" - InlineSig l inl mact qn -> do - let [a,b] = srcInfoPoints l - printString $ if inl then "{-# INLINE" else "{-# NOINLINE" - maybeEP exactPC mact - exactPC qn - printStringAt (pos b) "#-}" - SpecSig l qn ts -> do - let (a:pts) = srcInfoPoints l - printString "{-# SPECIALISE" - exactPC qn - printInterleaved (zip pts ("::" : repeat "," ++ ["#-}"])) ts - SpecInlineSig l b mact qn ts -> do - let (a:pts) = srcInfoPoints l - printString $ "{-# SPECIALISE " ++ if b then "INLINE" else "NOINLINE" - maybeEP exactPC mact - exactPC qn - printInterleaved (zip pts ("::" : repeat "," ++ ["#-}"])) ts - InstSig l mctxt ih -> do - let [a,b,c] = srcInfoPoints l - printString $ "{-# SPECIALISE" - printStringAt (pos b) "instance" - maybeEP exactPC mctxt - exactPC ih - printStringAt (pos c) "#-}" - -printWarndeprs :: [Pos] -> [([Name SrcSpanInfo], String)] -> EP () -printWarndeprs _ [] = return () -printWarndeprs ps ((ns,str):nsts) = printWd ps ns str nsts - where printWd :: [Pos] -> [Name SrcSpanInfo] -> String -> [([Name SrcSpanInfo], String)] -> EP () - printWd (p:ps) [] str nsts = printStringAt p (show str) >> printWarndeprs ps nsts - printWd ps [n] str nsts = exactPC n >> printWd ps [] str nsts - printWd (p:ps) (n:ns) str nsts = exactPC n >> printStringAt p "," >> printWd ps ns str nsts - - -sepFunBinds :: [Decl SrcSpanInfo] -> [Decl SrcSpanInfo] -sepFunBinds [] = [] -sepFunBinds (FunBind _ ms:ds) = map (\m -> FunBind (ann m) [m]) ms ++ sepFunBinds ds -sepFunBinds (d:ds) = d : sepFunBinds ds - -sepClassFunBinds :: [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo] -sepClassFunBinds [] = [] -sepClassFunBinds (ClsDecl _ (FunBind _ ms):ds) = map (\m -> ClsDecl (ann m) $ FunBind (ann m) [m]) ms ++ sepClassFunBinds ds -sepClassFunBinds (d:ds) = d : sepClassFunBinds ds - -sepInstFunBinds :: [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo] -sepInstFunBinds [] = [] -sepInstFunBinds (InsDecl _ (FunBind _ ms):ds) = map (\m -> InsDecl (ann m) $ FunBind (ann m) [m]) ms ++ sepInstFunBinds ds -sepInstFunBinds (d:ds) = d : sepInstFunBinds ds - -instance ExactP DeclHead where - exactP dh = case dh of - DHead l n tvs -> exactP n >> mapM_ exactPC tvs - DHInfix l tva n tvb -> exactP tva >> epInfixName n >> exactPC tvb - DHParen l dh -> - let [_,b] = srcInfoPoints l - in printString "(" >> exactPC dh >> printStringAt (pos b) ")" - -instance ExactP InstHead where - exactP ih = case ih of - IHead l qn ts -> exactP qn >> mapM_ exactPC ts - IHInfix l ta qn tb -> exactP ta >> epInfixQName qn >> exactPC tb - IHParen l ih -> - let [_,b] = srcInfoPoints l - in printString "(" >> exactPC ih >> printStringAt (pos b) ")" - -instance ExactP TyVarBind where - exactP (KindedVar l n k) = do - let [a,b,c] = srcInfoPoints l - printString "(" - exactPC n - printStringAt (pos b) "::" - exactPC k - printStringAt (pos c) ")" - exactP (UnkindedVar l n) = exactP n - -instance ExactP Kind where - exactP kd = case kd of - KindStar l -> printString "*" - KindBang l -> printString "!" - KindFn l k1 k2 -> do - let [a] = srcInfoPoints l - exactP k1 - printStringAt (pos a) "->" - exactPC k2 - KindParen l kd -> do - let [a,b] = srcInfoPoints l - printString "(" - exactPC kd - printStringAt (pos b) ")" - KindVar l n -> exactP n - -instance ExactP Type where - exactP t = case t of - TyForall l mtvs mctxt t -> do - let pts = srcInfoPoints l - pts <- case mtvs of - Nothing -> return pts - Just tvs -> do - let (a:b:pts') = pts - printString "forall" - mapM_ exactPC tvs - printStringAt (pos b) "." - return pts' - maybeEP exactPC mctxt - exactPC t - TyFun l t1 t2 -> do - let [a] = srcInfoPoints l - exactP t1 - printStringAt (pos a) "->" - exactPC t2 - TyTuple l bx ts -> do - let pts = srcInfoPoints l - (o,e) = case bx of - Boxed -> ("(" , ")") - Unboxed -> ("(#","#)") - printInterleaved (zip pts (o: replicate (length pts - 2) "," ++ [e])) ts - TyList l t -> do - let [a,b] = srcInfoPoints l - printString "[" - exactPC t - printStringAt (pos b) "]" - TyApp l t1 t2 -> exactP t1 >> exactPC t2 - TyVar l n -> exactP n - TyCon l qn -> exactP qn - TyParen l t -> do - let [a,b] = srcInfoPoints l - printString "(" - exactPC t - printStringAt (pos b) ")" - TyInfix l t1 qn t2 -> exactP t1 >> epInfixQName qn >> exactPC t2 - TyKind l t kd -> do - let [a,b,c] = srcInfoPoints l - printString "(" - exactPC t - printStringAt (pos b) "::" - exactPC kd - printStringAt (pos c) ")" - -instance ExactP Context where - exactP ctxt = do - printContext ctxt - printStringAt (pos (last (srcInfoPoints (ann ctxt)))) "=>" - -printContext ctxt = do - let l = ann ctxt - pts = init $ srcInfoPoints l - case ctxt of - CxParen l ctxt -> do - let [a,b] = pts - printStringAt (pos a) "(" - printContext ctxt - printStringAt (pos b) ")" - CxSingle l asst -> exactP asst - CxEmpty l -> do - let [a,b] = pts - printStringAt (pos a) "(" - printStringAt (pos b) ")" - CxTuple l assts -> parenList pts assts - - -instance ExactP Asst where - exactP asst = case asst of - ClassA l qn ts -> exactP qn >> mapM_ exactPC ts - InfixA l ta qn tb -> exactP ta >> epInfixQName qn >> exactPC tb - IParam l ipn t -> do - let [a] = srcInfoPoints l - exactP ipn - printStringAt (pos a) "::" - exactPC t - EqualP l t1 t2 -> do - let [a] = srcInfoPoints l - exactP t1 - printStringAt (pos a) "~" - exactPC t2 - -instance ExactP Deriving where - exactP (Deriving l ihs) = do - let (x:pts) = srcInfoPoints l - printString "deriving" - parenList pts ihs - -instance ExactP ClassDecl where - exactP cdecl = case cdecl of - ClsDecl l d -> exactP d - ClsDataFam l mctxt dh mk -> do - let (x:pts) = srcInfoPoints l - printString "data" - maybeEP exactPC mctxt - exactPC dh - maybeEP (\kd -> printStringAt (pos (head pts)) "::" >> exactPC kd) mk - ClsTyFam l dh mk -> do - let (x:pts) = srcInfoPoints l - printString "type" - exactPC dh - maybeEP (\kd -> printStringAt (pos (head pts)) "::" >> exactPC kd) mk - ClsTyDef l t1 t2 -> do - let [a,b] = srcInfoPoints l - printString "type" - exactPC t1 - printStringAt (pos b) "=" - exactPC t2 - -instance ExactP InstDecl where - exactP idecl = case idecl of - InsDecl l d -> exactP d - InsType l t1 t2 -> do - let [a,b] = srcInfoPoints l - printString "type" - exactPC t1 - printStringAt (pos b) "=" - exactPC t2 - InsData l dn t constrs mder -> do - exactP dn - exactPC t - printInterleaved (zip (srcInfoPoints l) ("=": repeat "|")) constrs - maybeEP exactPC mder - InsGData l dn t mk gds mder -> do - let pts = srcInfoPoints l - exactP dn - exactPC t - (x:pts) <- case mk of - Nothing -> return pts - Just kd -> let (p:pts') = pts in do - printStringAt (pos p) "::" - exactPC kd - return pts' - printStringAt (pos x) "where" - mapM_ exactPC gds - maybeEP exactPC mder - InsInline l inl mact qn -> do - let [a,b] = srcInfoPoints l - printString $ if inl then "{-# INLINE" else "{-# NOINLINE" - maybeEP exactPC mact - exactPC qn - printStringAt (pos b) "#-}" - -instance ExactP FunDep where - exactP (FunDep l nxs nys) = do - let [a] = srcInfoPoints l - mapM_ exactPC nxs - printStringAt (pos a) "->" - mapM_ exactPC nys - -instance ExactP QualConDecl where - exactP (QualConDecl l mtvs mctxt cd) = do - let pts = srcInfoPoints l - pts <- case mtvs of - Nothing -> return pts - Just tvs -> do - let (a:b:pts') = pts - printString "forall" - mapM_ exactPC tvs - printStringAt (pos b) "." - return pts' - maybeEP exactPC mctxt - exactPC cd - -instance ExactP ConDecl where - exactP cd = case cd of - ConDecl l n bts -> exactP n >> mapM_ exactPC bts - InfixConDecl l bta n btb -> exactP bta >> epInfixName n >> exactP btb - RecDecl l n fds -> exactP n >> curlyList (srcInfoPoints l) fds - -instance ExactP GadtDecl where - exactP (GadtDecl l n t) = do - let [a] = srcInfoPoints l - exactP n - printStringAt (pos a) "::" - exactPC t - -instance ExactP BangType where - exactP bt = case bt of - UnBangedTy l t -> exactP t - BangedTy l t -> printString "!" >> exactPC t - UnpackedTy l t -> do - let [a,b,c] = srcInfoPoints l - printString "{-# UNPACK" - printStringAt (pos b) "#-}" - printStringAt (pos c) "!" - exactPC t - -instance ExactP Splice where - exactP (IdSplice l str) = printString $ '$':str - exactP (ParenSplice l e) = do - let [a,b] = srcInfoPoints l - printString "$(" - exactPC e - printStringAt (pos b) ")" - -instance ExactP Exp where - exactP exp = case exp of - Var l qn -> exactP qn - IPVar l ipn -> exactP ipn - Con l qn -> exactP qn - Lit l lit -> exactP lit - InfixApp l e1 op e2 -> exactP e1 >> exactPC op >> exactPC e2 - App l e1 e2 -> exactP e1 >> exactPC e2 - NegApp l e -> printString "-" >> exactPC e - Lambda l ps e -> do - let [a,b] = srcInfoPoints l - printString "\\" - mapM_ exactPC ps - printStringAt (pos b) "->" - exactPC e - Let l bs e -> do - let [a,b] = srcInfoPoints l - printString "let" - exactPC bs - printStringAt (pos b) "in" - exactPC e - If l ec et ee -> do - let [a,b,c] = srcInfoPoints l - printString "if" - exactPC ec - printStringAt (pos b) "then" - exactPC et - printStringAt (pos c) "else" - exactPC ee - Case l e alts -> do - let (a:b:pts) = srcInfoPoints l - printString "case" - exactPC e - printStringAt (pos b) "of" - layoutList pts alts - Do l stmts -> do - let (a:pts) = srcInfoPoints l - printString "do" - layoutList pts stmts - MDo l stmts -> do - let (a:pts) = srcInfoPoints l - printString "mdo" - layoutList pts stmts - Tuple l es -> parenList (srcInfoPoints l) es - TupleSection l mexps -> do - let pts = srcInfoPoints l - printSeq $ interleave (zip (map pos $ init pts) (map printString ("(": repeat ",")) ++ [(pos $ last pts, printString ")")]) - (map (\me -> (maybe (0,0) (pos . ann) me, maybeEP exactPC me)) mexps) - List l es -> squareList (srcInfoPoints l) es - Paren l p -> parenList (srcInfoPoints l) [p] - LeftSection l e qop -> do - let [a,b] = srcInfoPoints l - printString "(" - exactPC e - exactPC qop - printStringAt (pos b) ")" - RightSection l qop e -> do - let [a,b] = srcInfoPoints l - printString "(" - exactPC qop - exactPC e - printStringAt (pos b) ")" - RecConstr l qn fups -> do - let pts = srcInfoPoints l - exactP qn - curlyList pts fups - RecUpdate l e fups -> do - let pts = srcInfoPoints l - exactP e - curlyList pts fups - EnumFrom l e -> do - let [a,b,c] = srcInfoPoints l - printString "[" - exactPC e - printStringAt (pos b) ".." - printStringAt (pos c) "]" - EnumFromTo l e1 e2 -> do - let [a,b,c] = srcInfoPoints l - printString "[" - exactPC e1 - printStringAt (pos b) ".." - exactPC e2 - printStringAt (pos c) "]" - EnumFromThen l e1 e2 -> do - let [a,b,c,d] = srcInfoPoints l - printString "[" - exactPC e1 - printStringAt (pos b) "," - exactPC e2 - printStringAt (pos c) ".." - EnumFromThenTo l e1 e2 e3 -> do - let [a,b,c,d] = srcInfoPoints l - printString "[" - exactPC e1 - printStringAt (pos b) "," - exactPC e2 - printStringAt (pos c) ".." - exactPC e3 - printStringAt (pos d) "]" - ListComp l e qss -> do - let (a:pts) = srcInfoPoints l - printString "[" - exactPC e - bracketList ("|",",","]") pts qss - ParComp l e qsss -> do - let (a:pts) = srcInfoPoints l - (strs, qss) = unzip $ pairUp qsss - printString "[" - exactPC e - printInterleaved (zip pts (strs ++ ["]"])) qss - where pairUp [] = [] - pairUp ((a:as):xs) = ("|", a) : zip (repeat ",") as ++ pairUp xs - - ExpTypeSig l e t -> do - let [a] = srcInfoPoints l - exactP e - printStringAt (pos a) "::" - exactPC t - VarQuote l qn -> do - printString "'" - exactPC qn - TypQuote l qn -> do - printString "''" - exactPC qn - BracketExp l br -> exactP br - SpliceExp l sp -> exactP sp - QuasiQuote l name qt -> printString $ "[$" ++ name ++ "|" ++ qt ++ "]" - XTag l xn attrs mat es -> do - let [a,b,c,d,e] = srcInfoPoints l - printString "<" - exactPC xn - mapM_ exactPC attrs - maybeEP exactPC mat - printStringAt (pos b) ">" - mapM_ exactPC es - printStringAt (pos c) "</" - printWhitespace (pos d) - exactP xn - printStringAt (pos e) ">" - XETag l xn attrs mat -> do - let [a,b] = srcInfoPoints l - printString "<" - exactPC xn - mapM_ exactPC attrs - maybeEP exactPC mat - printStringAt (pos b) "/>" - XPcdata l str -> printString str - XExpTag l e -> do - let [a,b] = srcInfoPoints l - printString "<%" - exactPC e - printString "%>" - - CorePragma l str e -> do - let [a,b] = srcInfoPoints l - printString $ "{-# CORE " ++ show str - printStringAt (pos b) "#-}" - exactPC e - SCCPragma l str e -> do - let [a,b] = srcInfoPoints l - printString $ "{-# SCC " ++ show str - printStringAt (pos b) "#-}" - exactPC e - GenPragma l str (i1,i2) (i3,i4) e -> do - printStrs $ zip (srcInfoPoints l) ["{-# GENERATED", show str, show i1, ":", show i2, "-", show i3, ":", show i4, "#-}"] - exactPC e - Proc l p e -> do - let [a,b] = srcInfoPoints l - printString "proc" - exactPC p - printStringAt (pos b) "->" - exactPC e - LeftArrApp l e1 e2 -> do - let [a] = srcInfoPoints l - exactP e1 - printStringAt (pos a) "-<" - exactPC e2 - RightArrApp l e1 e2 -> do - let [a] = srcInfoPoints l - exactP e1 - printStringAt (pos a) ">-" - exactPC e2 - LeftArrHighApp l e1 e2 -> do - let [a] = srcInfoPoints l - exactP e1 - printStringAt (pos a) "-<<" - exactPC e2 - RightArrHighApp l e1 e2 -> do - let [a] = srcInfoPoints l - exactP e1 - printStringAt (pos a) ">>-" - exactPC e2 - -instance ExactP FieldUpdate where - exactP fup = case fup of - FieldUpdate l qn e -> do - let [a] = srcInfoPoints l - exactP qn - printStringAt (pos a) "=" - exactPC e - FieldPun l n -> exactP n - FieldWildcard l -> printString ".." - -instance ExactP Stmt where - exactP stmt = case stmt of - Generator l p e -> do - let [a] = srcInfoPoints l - exactP p - printStringAt (pos a) "<-" - exactPC e - Qualifier l e -> exactP e - LetStmt l bds -> do - printString "let" - exactPC bds - RecStmt l ss -> do - let (a:pts) = srcInfoPoints l - printString "rec" - layoutList pts ss - -instance ExactP QualStmt where - exactP qstmt = case qstmt of - QualStmt l stmt -> exactP stmt - ThenTrans l e -> printString "then" >> exactPC e - ThenBy l e1 e2 -> do - let [a,b] = srcInfoPoints l - printString "then" - exactPC e1 - printStringAt (pos b) "by" - exactPC e2 - GroupBy l e -> do - printStrs $ zip (srcInfoPoints l) ["then","group","by"] - exactPC e - GroupUsing l e -> do - printStrs $ zip (srcInfoPoints l) ["then","group","using"] - exactPC e - GroupByUsing l e1 e2 -> do - let pts = srcInfoPoints l - printStrs $ zip (init pts) ["then","group","by"] - exactPC e1 - printStringAt (pos (last pts)) "using" - exactPC e2 - -instance ExactP Bracket where - exactP br = case br of - ExpBracket l e -> do - let [a,b] = srcInfoPoints l - printString "[|" - exactPC e - printStringAt (pos b) "|]" - PatBracket l p -> do - let [a,b] = srcInfoPoints l - printString "[p|" - exactPC p - printStringAt (pos b) "|]" - TypeBracket l t -> do - let [a,b] = srcInfoPoints l - printString "[t|" - exactPC t - printStringAt (pos b) "|]" - DeclBracket l ds -> do - let (a:pts) = srcInfoPoints l - printString "[d|" - layoutList (init pts) (sepFunBinds ds) - printStringAt (pos (last pts)) "|]" - -instance ExactP XAttr where - exactP (XAttr l xn e) = do - let [a] = srcInfoPoints l - exactP xn - printStringAt (pos a) "=" - exactPC e - -instance ExactP Alt where - exactP (Alt l p galts mbs) = do - exactP p - exactPC galts - maybeEP (\bs -> printStringAt (pos (head (srcInfoPoints l))) "where" >> exactPC bs) mbs - -instance ExactP GuardedAlts where - exactP (UnGuardedAlt l e) = printString "->" >> exactPC e - exactP (GuardedAlts l galts) = mapM_ exactPC galts - -instance ExactP GuardedAlt where - exactP (GuardedAlt l stmts e) = do - bracketList ("|",",","->") (srcInfoPoints l) stmts - exactPC e - -instance ExactP Match where - exactP (Match l n ps rhs mbinds) = do - let pts = srcInfoPoints l - exactP n - mapM_ exactPC ps - exactPC rhs - maybeEP (\bds -> printStringAt (pos (head pts)) "where" >> exactPC bds) mbinds - exactP (InfixMatch l a n b rhs mbinds) = do - let pts = srcInfoPoints l - exactP a - epInfixName n - exactPC b - exactPC rhs - maybeEP (\bds -> printStringAt (pos (head pts)) "where" >> exactPC bds) mbinds - -instance ExactP Rhs where - exactP (UnGuardedRhs l e) = printString "=" >> exactPC e - exactP (GuardedRhss l grhss) = mapM_ exactPC grhss - -instance ExactP GuardedRhs where - exactP (GuardedRhs l ss e) = do - let (a:pts) = srcInfoPoints l - printString "|" - printInterleaved' (zip (init pts) (repeat ",") ++ [(last pts, "=")]) ss - exactPC e - -instance ExactP Pat where - exactP pat = case pat of - PVar l n -> exactP n - PLit l lit -> exactP lit - PNeg l p -> printString "-" >> exactPC p - PNPlusK l n k -> do - let [a,b] = srcInfoPoints l - exactP n - printStringAt (pos a) "+" - printStringAt (pos b) (show k) - PInfixApp l pa qn pb -> exactP pa >> epInfixQName qn >> exactPC pb - PApp l qn ps -> exactP qn >> mapM_ exactPC ps - PTuple l ps -> parenList (srcInfoPoints l) ps - PList l ps -> squareList (srcInfoPoints l) ps - PParen l p -> parenList (srcInfoPoints l) [p] - PRec l qn pfs -> exactP qn >> curlyList (srcInfoPoints l) pfs - PAsPat l n p -> do - let [a] = srcInfoPoints l - exactP n - printStringAt (pos a) "@" - exactPC p - PWildCard l -> printString "_" - PIrrPat l p -> printString "~" >> exactPC p - PatTypeSig l p t -> do - let [a] = srcInfoPoints l - exactP p - printStringAt (pos a) "::" - exactPC t - PViewPat l e p -> do - let [a] = srcInfoPoints l - exactP e - printStringAt (pos a) "->" - exactPC p - PRPat l rps -> squareList (srcInfoPoints l) rps - PXTag l xn attrs mat ps -> do - let [a,b,c,d,e] = srcInfoPoints l - printString "<" - exactPC xn - mapM_ exactPC attrs - maybeEP exactPC mat - printStringAt (pos b) ">" - mapM_ exactPC ps - printStringAt (pos c) "</" - printWhitespace (pos d) - exactP xn - printStringAt (pos e) ">" - PXETag l xn attrs mat -> do - let [a,b] = srcInfoPoints l - printString "<" - exactPC xn - mapM_ exactPC attrs - maybeEP exactPC mat - printStringAt (pos b) "/>" - PXPcdata l str -> printString str - PXPatTag l p -> do - let [a,b] = srcInfoPoints l - printString "<%" - exactPC p - printString "%>" - PXRPats l rps -> bracketList ("<[",",","]>") (srcInfoPoints l) rps - PExplTypeArg l qn t -> do - let [a,b] = srcInfoPoints l - exactP qn - printStringAt (pos a) "{|" - exactPC t - printStringAt (pos b) "|}" - PQuasiQuote l name qt -> printString $ "[$" ++ name ++ "|" ++ qt ++ "]" - PBangPat l p -> printString "!" >> exactPC p - -instance ExactP PatField where - exactP pf = case pf of - PFieldPat l qn p -> do - let [a] = srcInfoPoints l - exactP qn - printStringAt (pos a) "=" - exactPC p - PFieldPun l n -> exactP n - PFieldWildcard l -> printString ".." - -instance ExactP RPat where - exactP rpat = case rpat of - RPOp l rp op -> exactP rp >> exactPC op - RPEither l r1 r2 -> do - let [a] = srcInfoPoints l - exactP r1 - printStringAt (pos a) "|" - exactPC r2 - RPSeq l rps -> bracketList ("(|",",","|)") (srcInfoPoints l) rps - RPGuard l p stmts -> do - let (a:pts) = srcInfoPoints l - printString "(|" - exactPC p - bracketList ("|",",","|)") pts stmts - RPCAs l n rp -> do - let [a] = srcInfoPoints l - exactP n - printStringAt (pos a) "@:" - exactPC rp - RPAs l n rp -> do - let [a] = srcInfoPoints l - exactP n - printStringAt (pos a) "@" - exactPC rp - RPParen l rp -> do - parenList (srcInfoPoints l) [rp] - RPPat l p -> exactP p - -instance ExactP RPatOp where - exactP rop = printString $ case rop of - RPStar l -> "*" - RPStarG l -> "*!" - RPPlus l -> "+" - RPPlusG l -> "+!" - RPOpt l -> "?" - RPOptG l -> "?!" - -instance ExactP PXAttr where - exactP (PXAttr l xn p) = do - let [a] = srcInfoPoints l - exactP xn - printStringAt (pos a) "=" - exactPC p - -instance ExactP XName where - exactP xn = case xn of - XName l name -> printString name - XDomName l dom name -> do - let [a,b,c] = srcInfoPoints l - printString dom - printStringAt (pos b) ":" - printStringAt (pos c) name - -instance ExactP Binds where - exactP (BDecls l ds) = layoutList (srcInfoPoints l) (sepFunBinds ds) - exactP (IPBinds l ips) = layoutList (srcInfoPoints l) ips - -instance ExactP CallConv where - exactP (StdCall _) = printString "stdcall" - exactP (CCall _) = printString "ccall" - -instance ExactP Safety where - exactP (PlayRisky _) = printString "unsafe" - exactP (PlaySafe _ b) = printString $ if b then "threadsafe" else "safe" - -instance ExactP Rule where - exactP (Rule l str mact mrvs e1 e2) = do - let (a:pts) = srcInfoPoints l - printString (show str) - maybeEP exactP mact - [x] <- case mrvs of - Nothing -> return pts - Just rvs -> do - let (a:b:pts') = pts - printStringAt (pos a) "forall" - mapM_ exactPC rvs - printStringAt (pos b) "." - return pts' - exactPC e1 - printStringAt (pos x) "=" - exactPC e2 - -instance ExactP RuleVar where - exactP (TypedRuleVar l n t) = do - let [a,b,c] = srcInfoPoints l - printString "(" - exactPC n - printStringAt (pos b) "::" - exactPC t - printStringAt (pos c) ")" - exactP (RuleVar l n) = exactP n - -instance ExactP Activation where - exactP (ActiveFrom l i) = - printPoints l ["[", show i, "]"] - exactP (ActiveUntil l i) = - printPoints l ["[", "~", show i, "]"] - -instance ExactP FieldDecl where - exactP (FieldDecl l ns bt) = do - let pts = srcInfoPoints l - printInterleaved' (zip (init pts) (repeat ",") ++ [(last pts, "::")]) ns - exactPC bt - -instance ExactP IPBind where - exactP (IPBind l ipn e) = do - let [a] = srcInfoPoints l - exactP ipn - printStringAt (pos a) "=" - exactPC e
@@ -1,359 +0,0 @@------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.Annotated.Fixity --- Copyright : (c) Niklas Broberg 2009 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : stable --- Portability : portable --- --- Fixity information to give the parser so that infix operators can --- be parsed properly. --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.Annotated.Fixity - ( - -- * Fixity representation - Fixity(..) - -- | The following three functions all create lists of - -- fixities from textual representations of operators. - -- The intended usage is e.g. - -- - -- > fixs = infixr_ 0 ["$","$!","`seq`"] - -- - -- Note that the operators are expected as you would - -- write them infix, i.e. with ` characters surrounding - -- /varid/ operators, and /varsym/ operators written as is. - , infix_, infixl_, infixr_ - -- ** Collections of fixities - , preludeFixities, baseFixities - - -- * Applying fixities to an AST - , AppFixity(..) - ) where - -import Language.Haskell.Exts.Annotated.Syntax -import Language.Haskell.Exts.SrcLoc - -import Data.Char (isUpper) - --- | Operator fixities are represented by their associativity --- (left, right or none) and their precedence (0-9). -data Fixity = Fixity (Assoc ()) Int (Op ()) - --- | All AST elements that may include expressions which in turn may --- need fixity tweaking will be instances of this class. -class AppFixity ast where - -- | Tweak any expressions in the element to account for the - -- fixities given. Assumes that all operator expressions are - -- fully left associative chains to begin with. - applyFixities :: [Fixity] -- ^ The fixities to account for. - -> ast SrcSpanInfo -- ^ The element to tweak. - -> ast SrcSpanInfo -- ^ The same element, but with operator expressions updated. - - -instance AppFixity Exp where - applyFixities fixs = infFix fixs . leafFix fixs - where -- This is the real meat case. We can assume a left-associative list to begin with. - infFix fixs (InfixApp l2 a op2 z) = - let e = infFix fixs a - in case e of - InfixApp l1 x op1 y -> - let (a1,p1) = askFixity fixs op1 - (a2,p2) = askFixity fixs op2 - in if (p1 == p2 && (a1 /= a2 || a1 == AssocNone ())) -- Ambiguous infix expression! - || (p1 > p2 || p1 == p2 && (a1 == AssocLeft () || a2 == AssocNone ())) -- Already right order - then InfixApp l2 e op2 z - else InfixApp l2 x op1 (infFix fixs $ InfixApp (ann y <++> ann z) y op2 z) - _ -> InfixApp l2 e op2 z - - infFix _ e = e - - --- Internal: lookup associativity and precedence of an operator -askFixity :: [Fixity] -> QOp l -> (Assoc (), Int) -askFixity xs = \k -> lookupWithDefault (AssocLeft (), 9) (f k) mp - where - lookupWithDefault def k mp = case lookup k mp of - Nothing -> def - Just x -> x - - mp = [(x,(a,p)) | Fixity a p x <- xs] - - f (QVarOp l x) = nullAnn $ VarOp l (g x) - f (QConOp l x) = nullAnn $ ConOp l (g x) - - g (Qual _ _ x) = x - g (UnQual _ x) = x - g (Special l (Cons _)) = Symbol l ":" - -nullAnn :: Functor ast => ast l -> ast () -nullAnn = fmap (const ()) - - --- | All fixities defined in the Prelude. -preludeFixities :: [Fixity] -preludeFixities = concat - [infixr_ 9 ["."] - ,infixl_ 9 ["!!"] - ,infixr_ 8 ["^","^^","**"] - ,infixl_ 7 ["*","/","`quot`","`rem`","`div`","`mod`",":%","%"] - ,infixl_ 6 ["+","-"] - ,infixr_ 5 [":","++"] - ,infix_ 4 ["==","/=","<","<=",">=",">","`elem`","`notElem`"] - ,infixr_ 3 ["&&"] - ,infixr_ 2 ["||"] - ,infixl_ 1 [">>",">>="] - ,infixr_ 1 ["=<<"] - ,infixr_ 0 ["$","$!","`seq`"] - ] - --- | All fixities defined in the base package. --- --- Note that the @+++@ operator appears in both Control.Arrows and --- Text.ParserCombinators.ReadP. The listed precedence for @+++@ in --- this list is that of Control.Arrows. -baseFixities :: [Fixity] -baseFixities = preludeFixities ++ concat - [infixl_ 9 ["!","//","!:"] - ,infixl_ 8 ["`shift`","`rotate`","`shiftL`","`shiftR`","`rotateL`","`rotateR`"] - ,infixl_ 7 [".&."] - ,infixl_ 6 ["`xor`"] - ,infix_ 6 [":+"] - ,infixl_ 5 [".|."] - ,infixr_ 5 ["+:+","<++","<+>"] -- fixity conflict for +++ between ReadP and Arrow - ,infix_ 5 ["\\\\"] - ,infixl_ 4 ["<$>","<$","<*>","<*","*>","<**>"] - ,infix_ 4 ["`elemP`","`notElemP`"] - ,infixl_ 3 ["<|>"] - ,infixr_ 3 ["&&&","***"] - ,infixr_ 2 ["+++","|||"] - ,infixr_ 1 ["<=<",">=>",">>>","<<<","^<<","<<^","^>>",">>^"] - ,infixl_ 0 ["`on`"] - ,infixr_ 0 ["`par`","`pseq`"] - ] - -infixr_, infixl_, infix_ :: Int -> [String] -> [Fixity] -infixr_ = fixity $ AssocRight () -infixl_ = fixity $ AssocLeft () -infix_ = fixity $ AssocNone () - --- Internal: help function for the above definitions. -fixity :: Assoc () -> Int -> [String] -> [Fixity] -fixity a p = map (Fixity a p . op) - where - op ('`':xs) = (if isUpper (head xs) then ConOp else VarOp) () $ Ident () $ init xs - op xs = (if head xs == ':' then ConOp else VarOp) () $ Symbol () xs - - - - - - -------------------------------------------------------------------- --- Boilerplate - yuck!! Everything below here is internal stuff - -instance AppFixity Module where - applyFixities fixs (Module l mmh prs imp decls) = - Module l mmh prs imp $ appFixDecls fixs decls - applyFixities fixs (XmlPage l mn os xn xas mexp cs) = - XmlPage l mn os xn (map fix xas) (fmap fix mexp) (map fix cs) - where fix x = applyFixities fixs x - applyFixities fixs (XmlHybrid l mmh prs imp decls xn xas mexp cs) = - XmlHybrid l mmh prs imp (appFixDecls fixs decls) - xn (map fixe xas) (fmap fixe mexp) (map fixe cs) - where fixe x = let extraFixs = getFixities decls - in applyFixities (fixs++extraFixs) x - -instance AppFixity Decl where - applyFixities fixs decl = case decl of - ClassDecl l ctxt dh deps cdecls -> ClassDecl l ctxt dh deps $ fmap (map fix) cdecls - InstDecl l ctxt ih idecls -> InstDecl l ctxt ih $ fmap (map fix) idecls - SpliceDecl l spl -> SpliceDecl l $ fix spl - FunBind l matches -> FunBind l $ map fix matches - PatBind l p mt rhs bs -> PatBind l (fix p) mt (fix rhs) (fmap fix bs) - _ -> decl - where fix x = applyFixities fixs x - -appFixDecls :: [Fixity] -> [Decl SrcSpanInfo] -> [Decl SrcSpanInfo] -appFixDecls fixs decls = - let extraFixs = getFixities decls - in map (applyFixities (fixs++extraFixs)) decls - -getFixities = concatMap getFixity -getFixity (InfixDecl _ a mp ops) = let p = maybe 9 id mp in map (Fixity (nullAnn a) p) (map nullAnn ops) -getFixity _ = [] - -instance AppFixity ClassDecl where - applyFixities fixs (ClsDecl l decl) = ClsDecl l $ applyFixities fixs decl - applyFixities _ cdecl = cdecl - -instance AppFixity InstDecl where - applyFixities fixs (InsDecl l decl) = InsDecl l $ applyFixities fixs decl - applyFixities _ idecl = idecl - -instance AppFixity Match where - applyFixities fixs match = case match of - Match l n ps rhs bs -> Match l n (map fix ps) (fix rhs) (fmap fix bs) - InfixMatch l a n b rhs bs -> InfixMatch l (fix a) n (fix b) (fix rhs) (fmap fix bs) - where fix x = applyFixities fixs x - -instance AppFixity Rhs where - applyFixities fixs rhs = case rhs of - UnGuardedRhs l e -> UnGuardedRhs l $ fix e - GuardedRhss l grhss -> GuardedRhss l $ map fix grhss - where fix x = applyFixities fixs x - -instance AppFixity GuardedRhs where - applyFixities fixs (GuardedRhs l stmts e) = GuardedRhs l (map fix stmts) $ fix e - where fix x = applyFixities fixs x - -instance AppFixity Pat where - applyFixities fixs p = case p of - PNeg l p -> PNeg l $ fix p - PInfixApp l a op b -> PInfixApp l (fix a) op (fix b) - PApp l n ps -> PApp l n $ map fix ps - PTuple l ps -> PTuple l $ map fix ps - PList l ps -> PList l $ map fix ps - PParen l p -> PParen l $ fix p - PRec l n pfs -> PRec l n $ map fix pfs - PAsPat l n p -> PAsPat l n $ fix p - PIrrPat l p -> PIrrPat l $ fix p - PatTypeSig l p t -> PatTypeSig l (fix p) t - PViewPat l e p -> PViewPat l (fix e) (fix p) - PRPat l rps -> PRPat l $ map fix rps - PXTag l n ats mp ps -> PXTag l n (map fix ats) (fmap fix mp) (map fix ps) - PXETag l n ats mp -> PXETag l n (map fix ats) (fmap fix mp) - PXPatTag l p -> PXPatTag l $ fix p - PXRPats l rps -> PXRPats l $ map fix rps - PBangPat l p -> PBangPat l $ fix p - _ -> p - where fix x = applyFixities fixs x - -instance AppFixity PatField where - applyFixities fixs (PFieldPat l n p) = PFieldPat l n $ applyFixities fixs p - applyFixities _ pf = pf - -instance AppFixity RPat where - applyFixities fixs rp = case rp of - RPOp l rp op -> RPOp l (fix rp) op - RPEither l a b -> RPEither l (fix a) (fix b) - RPSeq l rps -> RPSeq l $ map fix rps - RPGuard l p stmts -> RPGuard l (fix p) $ map fix stmts - RPCAs l n rp -> RPCAs l n $ fix rp - RPAs l n rp -> RPAs l n $ fix rp - RPParen l rp -> RPParen l $ fix rp - RPPat l p -> RPPat l $ fix p - where fix x = applyFixities fixs x - -instance AppFixity PXAttr where - applyFixities fixs (PXAttr l n p) = PXAttr l n $ applyFixities fixs p - -instance AppFixity Stmt where - applyFixities fixs stmt = case stmt of - Generator l p e -> Generator l (fix p) (fix e) - Qualifier l e -> Qualifier l $ fix e - LetStmt l bs -> LetStmt l $ fix bs -- special behavior - RecStmt l stmts -> RecStmt l $ map fix stmts - where fix x = applyFixities fixs x - -instance AppFixity Binds where - applyFixities fixs bs = case bs of - BDecls l decls -> BDecls l $ appFixDecls fixs decls -- special behavior - IPBinds l ips -> IPBinds l $ map fix ips - where fix x = applyFixities fixs x - - -instance AppFixity IPBind where - applyFixities fixs (IPBind l n e) = IPBind l n $ applyFixities fixs e - -instance AppFixity FieldUpdate where - applyFixities fixs (FieldUpdate l n e) = FieldUpdate l n $ applyFixities fixs e - applyFixities _ fup = fup - -instance AppFixity Alt where - applyFixities fixs (Alt l p galts bs) = Alt l (fix p) (fix galts) (fmap fix bs) - where fix x = applyFixities fixs x - -instance AppFixity GuardedAlts where - applyFixities fixs galts = case galts of - UnGuardedAlt l e -> UnGuardedAlt l $ fix e - GuardedAlts l galts -> GuardedAlts l $ map fix galts - where fix x = applyFixities fixs x - -instance AppFixity GuardedAlt where - applyFixities fixs (GuardedAlt l stmts e) = GuardedAlt l (map fix stmts) (fix e) - where fix x = applyFixities fixs x - -instance AppFixity QualStmt where - applyFixities fixs qstmt = case qstmt of - QualStmt l s -> QualStmt l $ fix s - ThenTrans l e -> ThenTrans l $ fix e - ThenBy l e1 e2 -> ThenBy l (fix e1) (fix e2) - GroupBy l e -> GroupBy l (fix e) - GroupUsing l e -> GroupUsing l (fix e) - GroupByUsing l e1 e2 -> GroupByUsing l (fix e1) (fix e2) - where fix x = applyFixities fixs x - -instance AppFixity Bracket where - applyFixities fixs br = case br of - ExpBracket l e -> ExpBracket l $ fix e - PatBracket l p -> PatBracket l $ fix p - DeclBracket l ds -> DeclBracket l $ map fix ds - _ -> br - where fix x = applyFixities fixs x - -instance AppFixity Splice where - applyFixities fixs (ParenSplice l e) = ParenSplice l $ applyFixities fixs e - applyFixities _ s = s - -instance AppFixity XAttr where - applyFixities fixs (XAttr l n e) = XAttr l n $ applyFixities fixs e - - --- the boring boilerplate stuff for expressions too --- Recursively fixes the "leaves" of the infix chains, --- without yet touching the chain itself. We assume all chains are --- left-associate to begin with. -leafFix fixs e = case e of - InfixApp l e1 op e2 -> InfixApp l (leafFix fixs e1) op (fix e2) - App l e1 e2 -> App l (fix e1) (fix e2) - NegApp l e -> NegApp l $ fix e - Lambda l pats e -> Lambda l (map fix pats) $ fix e - Let l bs e -> Let l (fix bs) $ fix e - If l e a b -> If l (fix e) (fix a) (fix b) - Case l e alts -> Case l (fix e) $ map fix alts - Do l stmts -> Do l $ map fix stmts - MDo l stmts -> MDo l $ map fix stmts - Tuple l exps -> Tuple l $ map fix exps - List l exps -> List l $ map fix exps - Paren l e -> Paren l $ fix e - LeftSection l e op -> LeftSection l (fix e) op - RightSection l op e -> RightSection l op $ fix e - RecConstr l n fups -> RecConstr l n $ map fix fups - RecUpdate l e fups -> RecUpdate l (fix e) $ map fix fups - EnumFrom l e -> EnumFrom l $ fix e - EnumFromTo l e1 e2 -> EnumFromTo l (fix e1) (fix e2) - EnumFromThen l e1 e2 -> EnumFromThen l (fix e1) (fix e2) - EnumFromThenTo l e1 e2 e3 -> EnumFromThenTo l (fix e1) (fix e2) (fix e3) - ListComp l e quals -> ListComp l (fix e) $ map fix quals - ParComp l e qualss -> ParComp l (fix e) $ map (map fix) qualss - ExpTypeSig l e t -> ExpTypeSig l (fix e) t - BracketExp l b -> BracketExp l $ fix b - SpliceExp l s -> SpliceExp l $ fix s - XTag l n ats mexp cs -> XTag l n (map fix ats) (fmap fix mexp) (map fix cs) - XETag l n ats mexp -> XETag l n (map fix ats) (fmap fix mexp) - XExpTag l e -> XExpTag l $ fix e - Proc l p e -> Proc l (fix p) (fix e) - LeftArrApp l e1 e2 -> LeftArrApp l (fix e1) (fix e2) - RightArrApp l e1 e2 -> RightArrApp l (fix e1) (fix e2) - LeftArrHighApp l e1 e2 -> LeftArrHighApp l (fix e1) (fix e2) - RightArrHighApp l e1 e2 -> RightArrHighApp l (fix e1) (fix e2) - CorePragma l s e -> CorePragma l s (fix e) - SCCPragma l s e -> SCCPragma l s (fix e) - GenPragma l s ab cd e -> GenPragma l s ab cd (fix e) - - _ -> e - where - fix x = applyFixities fixs x
@@ -1,514 +0,0 @@------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.Annotated.Simplify --- Copyright : (c) Niklas Broberg 2009 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : experimental --- Portability : portable --- --- This module contains code for translating from the annotated --- complex AST in Language.Haskell.Exts.Annotated.Syntax --- to the simpler, sparsely annotated AST in Language.Haskell.Exts.Syntax. --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.Annotated.Simplify where - -import Language.Haskell.Exts.Annotated.Syntax -import qualified Language.Haskell.Exts.Syntax as S - -import Language.Haskell.Exts.SrcLoc - -sModuleName :: ModuleName l -> S.ModuleName -sModuleName (ModuleName _ str) = S.ModuleName str - -sSpecialCon :: SpecialCon l -> S.SpecialCon -sSpecialCon sc = case sc of - UnitCon _ -> S.UnitCon - ListCon _ -> S.ListCon - FunCon _ -> S.FunCon - TupleCon _ b k -> S.TupleCon b k - Cons _ -> S.Cons - UnboxedSingleCon _ -> S.UnboxedSingleCon - -sQName :: QName l -> S.QName -sQName qn = case qn of - Qual _ mn n -> S.Qual (sModuleName mn) (sName n) - UnQual _ n -> S.UnQual (sName n) - Special _ sc -> S.Special (sSpecialCon sc) - -sName :: Name l -> S.Name -sName (Ident _ str) = S.Ident str -sName (Symbol _ str) = S.Symbol str - -sIPName :: IPName l -> S.IPName -sIPName (IPDup _ str) = S.IPDup str -sIPName (IPLin _ str) = S.IPLin str - -sQOp :: QOp l -> S.QOp -sQOp (QVarOp _ qn) = S.QVarOp (sQName qn) -sQOp (QConOp _ qn) = S.QConOp (sQName qn) - -sOp :: Op l -> S.Op -sOp (VarOp _ n) = S.VarOp (sName n) -sOp (ConOp _ n) = S.ConOp (sName n) - -sCName :: CName l -> S.CName -sCName (VarName _ n) = S.VarName (sName n) -sCName (ConName _ n) = S.ConName (sName n) - -sModuleHead :: Maybe (ModuleHead l) -> (S.ModuleName, Maybe (S.WarningText), Maybe [S.ExportSpec]) -sModuleHead mmh = case mmh of - Nothing -> (S.main_mod, Nothing, Just [S.EVar (S.UnQual S.main_name)]) - Just (ModuleHead _ mn mwt mel) -> (sModuleName mn, fmap sWarningText mwt, fmap sExportSpecList mel) - --- | Translate an annotated AST node representing a Haskell module, into --- a simpler version that retains (almost) only abstract information. --- In particular, XML and hybrid XML pages enabled by the XmlSyntax extension --- are translated into standard Haskell modules with a @page@ function. -sModule :: SrcInfo loc => Module loc -> S.Module -sModule md = case md of - Module l mmh oss ids ds -> - let (mn, mwt, mes) = sModuleHead mmh - in S.Module (getPointLoc l) mn (map sOptionPragma oss) mwt mes (map sImportDecl ids) (map sDecl ds) - XmlPage l mn oss xn attrs mat es -> - let loc = getPointLoc l - in S.Module loc (sModuleName mn) (map sOptionPragma oss) - Nothing - (Just [S.EVar $ S.UnQual $ S.Ident "page"]) - [] - [pageFun loc $ S.XTag loc (sXName xn) (map sXAttr attrs) (fmap sExp mat) (map sExp es)] - XmlHybrid l mmh oss ids ds xn attrs mat es -> - let loc1 = getPointLoc l - loc2 = getPointLoc (ann xn) - (mn, mwt, mes) = sModuleHead mmh - in S.Module loc1 mn (map sOptionPragma oss) mwt mes (map sImportDecl ids) - (map sDecl ds ++ [pageFun loc2 $ S.XTag loc2 (sXName xn) (map sXAttr attrs) (fmap sExp mat) (map sExp es)]) - -pageFun :: SrcLoc -> S.Exp -> S.Decl -pageFun loc e = S.PatBind loc namePat Nothing rhs (S.BDecls []) - where namePat = S.PVar $ S.Ident "page" - rhs = S.UnGuardedRhs e - -sExportSpecList :: ExportSpecList l -> [S.ExportSpec] -sExportSpecList (ExportSpecList _ ess) = map sExportSpec ess - -sExportSpec :: ExportSpec l -> S.ExportSpec -sExportSpec es = case es of - EVar _ qn -> S.EVar (sQName qn) - EAbs _ qn -> S.EAbs (sQName qn) - EThingAll _ qn -> S.EThingAll (sQName qn) - EThingWith _ qn cns -> S.EThingWith (sQName qn) (map sCName cns) - EModuleContents _ mn -> S.EModuleContents (sModuleName mn) - -sImportDecl :: SrcInfo loc => ImportDecl loc -> S.ImportDecl -sImportDecl (ImportDecl l mn qu src mpkg as misl) = - S.ImportDecl (getPointLoc l) (sModuleName mn) qu src mpkg (fmap sModuleName as) (fmap sImportSpecList misl) - -sImportSpecList :: ImportSpecList l -> (Bool, [S.ImportSpec]) -sImportSpecList (ImportSpecList _ b iss) = (b, map sImportSpec iss) - -sImportSpec :: ImportSpec l -> S.ImportSpec -sImportSpec is = case is of - IVar _ n -> S.IVar (sName n) - IAbs _ n -> S.IAbs (sName n) - IThingAll _ n -> S.IThingAll (sName n) - IThingWith _ n cns -> S.IThingWith (sName n) (map sCName cns) - -sAssoc :: Assoc l -> S.Assoc -sAssoc a = case a of - AssocNone _ -> S.AssocNone - AssocLeft _ -> S.AssocLeft - AssocRight _ -> S.AssocRight - -sDeclHead :: DeclHead l -> (S.Name, [S.TyVarBind]) -sDeclHead dh = case dh of - DHead _ n tvs -> (sName n, map sTyVarBind tvs) - DHInfix _ tva n tvb -> (sName n, map sTyVarBind [tva,tvb]) - DHParen _ dh -> sDeclHead dh - -sInstHead :: InstHead l -> (S.QName, [S.Type]) -sInstHead ih = case ih of - IHead _ qn ts -> (sQName qn, map sType ts) - IHInfix _ ta qn tb -> (sQName qn, map sType [ta,tb]) - IHParen _ ih -> sInstHead ih - --- | Translate an annotated AST node representing a Haskell declaration --- into a simpler version. Note that in the simpler version, all declaration --- nodes are still annotated by 'SrcLoc's. -sDecl :: SrcInfo loc => Decl loc -> S.Decl -sDecl decl = case decl of - TypeDecl l dh t -> - let (n, tvs) = sDeclHead dh - in S.TypeDecl (getPointLoc l) n tvs (sType t) - TypeFamDecl l dh mk -> - let (n, tvs) = sDeclHead dh - in S.TypeFamDecl (getPointLoc l) n tvs (fmap sKind mk) - DataDecl l dn mctxt dh constrs mder -> - let (n, tvs) = sDeclHead dh - in S.DataDecl (getPointLoc l) (sDataOrNew dn) (maybe [] sContext mctxt) n tvs (map sQualConDecl constrs) (maybe [] sDeriving mder) - GDataDecl l dn mctxt dh mk gds mder -> - let (n, tvs) = sDeclHead dh - in S.GDataDecl (getPointLoc l) (sDataOrNew dn) (maybe [] sContext mctxt) n tvs (fmap sKind mk) (map sGadtDecl gds) (maybe [] sDeriving mder) - DataFamDecl l mctxt dh mk -> - let (n, tvs) = sDeclHead dh - in S.DataFamDecl (getPointLoc l) (maybe [] sContext mctxt) n tvs (fmap sKind mk) - TypeInsDecl l t1 t2 -> S.TypeInsDecl (getPointLoc l) (sType t1) (sType t2) - DataInsDecl l dn t constrs mder -> - S.DataInsDecl (getPointLoc l) (sDataOrNew dn) (sType t) (map sQualConDecl constrs) (maybe [] sDeriving mder) - GDataInsDecl l dn t mk gds mder -> - S.GDataInsDecl (getPointLoc l) (sDataOrNew dn) (sType t) (fmap sKind mk) (map sGadtDecl gds) (maybe [] sDeriving mder) - ClassDecl l mctxt dh fds mcds -> - let (n, tvs) = sDeclHead dh - in S.ClassDecl (getPointLoc l) (maybe [] sContext mctxt) n tvs (map sFunDep fds) (maybe [] (map sClassDecl) mcds) - InstDecl l mctxt ih mids -> - let (qn, ts) = sInstHead ih - in S.InstDecl (getPointLoc l) (maybe [] sContext mctxt) qn ts (maybe [] (map sInstDecl) mids) - DerivDecl l mctxt ih -> - let (qn, ts) = sInstHead ih - in S.DerivDecl (getPointLoc l) (maybe [] sContext mctxt) qn ts - InfixDecl l ass prec ops -> S.InfixDecl (getPointLoc l) (sAssoc ass) (maybe 9 id prec) (map sOp ops) - DefaultDecl l ts -> S.DefaultDecl (getPointLoc l) (map sType ts) - SpliceDecl l sp -> S.SpliceDecl (getPointLoc l) (sExp sp) - TypeSig l ns t -> S.TypeSig (getPointLoc l) (map sName ns) (sType t) - FunBind _ ms -> S.FunBind (map sMatch ms) - PatBind l p mt rhs mbs -> - S.PatBind (getPointLoc l) (sPat p) (fmap sType mt) (sRhs rhs) (maybe (S.BDecls []) sBinds mbs) - ForImp l cc msaf mstr n t -> - S.ForImp (getPointLoc l) (sCallConv cc) (maybe (S.PlaySafe False) sSafety msaf) (maybe "" id mstr) (sName n) (sType t) - ForExp l cc mstr n t -> - S.ForExp (getPointLoc l) (sCallConv cc) (maybe "" id mstr) (sName n) (sType t) - RulePragmaDecl l rs -> S.RulePragmaDecl (getPointLoc l) (map sRule rs) - DeprPragmaDecl l nsstrs -> S.DeprPragmaDecl (getPointLoc l) (map (\(ns, str) -> (map sName ns, str)) nsstrs) - WarnPragmaDecl l nsstrs -> S.WarnPragmaDecl (getPointLoc l) (map (\(ns, str) -> (map sName ns, str)) nsstrs) - InlineSig l b mact qn -> S.InlineSig (getPointLoc l) b (maybe S.AlwaysActive sActivation mact) (sQName qn) - SpecSig l qn ts -> S.SpecSig (getPointLoc l) (sQName qn) (map sType ts) - SpecInlineSig l b mact qn ts -> - S.SpecInlineSig (getPointLoc l) b (maybe S.AlwaysActive sActivation mact) (sQName qn) (map sType ts) - InstSig l mctxt ih -> - let (qn, ts) = sInstHead ih - in S.InstSig (getPointLoc l) (maybe [] sContext mctxt) qn ts - -sDataOrNew :: DataOrNew l -> S.DataOrNew -sDataOrNew (DataType _) = S.DataType -sDataOrNew (NewType _) = S.NewType - -sDeriving :: (Deriving l) -> [(S.QName, [S.Type])] -sDeriving (Deriving _ ihs) = map sInstHead ihs - -sBinds :: SrcInfo loc => Binds loc -> S.Binds -sBinds bs = case bs of - BDecls _ decls -> S.BDecls (map sDecl decls) - IPBinds _ ipbds -> S.IPBinds (map sIPBind ipbds) - -sIPBind :: SrcInfo loc => IPBind loc -> S.IPBind -sIPBind (IPBind l ipn e) = S.IPBind (getPointLoc l) (sIPName ipn) (sExp e) - -sMatch :: SrcInfo loc => Match loc -> S.Match -sMatch (Match l n ps rhs mwhere) = - S.Match (getPointLoc l) (sName n) (map sPat ps) Nothing (sRhs rhs) (maybe (S.BDecls []) sBinds mwhere) -sMatch (InfixMatch l pa n pb rhs mwhere) = - S.Match (getPointLoc l) (sName n) (map sPat [pa,pb]) Nothing (sRhs rhs) (maybe (S.BDecls []) sBinds mwhere) - -sQualConDecl :: SrcInfo loc => QualConDecl loc -> S.QualConDecl -sQualConDecl (QualConDecl l mtvs mctxt cd) = - S.QualConDecl (getPointLoc l) (maybe [] (map sTyVarBind) mtvs) (maybe [] sContext mctxt) (sConDecl cd) - -sConDecl :: ConDecl l -> S.ConDecl -sConDecl cd = case cd of - ConDecl _ n bts -> S.ConDecl (sName n) (map sBangType bts) - InfixConDecl _ bta n btb -> S.InfixConDecl (sBangType bta) (sName n) (sBangType btb) - RecDecl _ n fds -> S.RecDecl (sName n) (map sFieldDecl fds) - -sFieldDecl :: FieldDecl l -> ([S.Name], S.BangType) -sFieldDecl (FieldDecl _ ns bt) = (map sName ns, sBangType bt) - -sGadtDecl :: SrcInfo loc => GadtDecl loc -> S.GadtDecl -sGadtDecl (GadtDecl l n t) = S.GadtDecl (getPointLoc l) (sName n) (sType t) - -sClassDecl :: SrcInfo loc => ClassDecl loc -> S.ClassDecl -sClassDecl cd = case cd of - ClsDecl _ d -> S.ClsDecl (sDecl d) - ClsDataFam l mctxt dh mk -> - let (n, tvs) = sDeclHead dh - in S.ClsDataFam (getPointLoc l) (maybe [] sContext mctxt) n tvs (fmap sKind mk) - ClsTyFam l dh mk -> - let (n, tvs) = sDeclHead dh - in S.ClsTyFam (getPointLoc l) n tvs (fmap sKind mk) - ClsTyDef l t1 t2 -> - S.ClsTyDef (getPointLoc l) (sType t1) (sType t2) - -sInstDecl :: SrcInfo loc => InstDecl loc -> S.InstDecl -sInstDecl id = case id of - InsDecl _ d -> S.InsDecl (sDecl d) - InsType l t1 t2 -> S.InsType (getPointLoc l) (sType t1) (sType t2) - InsData l dn t constrs mder -> - S.InsData (getPointLoc l) (sDataOrNew dn) (sType t) (map sQualConDecl constrs) (maybe [] sDeriving mder) - InsGData l dn t mk gds mder -> - S.InsGData (getPointLoc l) (sDataOrNew dn) (sType t) (fmap sKind mk) (map sGadtDecl gds) (maybe [] sDeriving mder) - InsInline l b mact qn -> S.InsInline (getPointLoc l) b (maybe S.AlwaysActive sActivation mact) (sQName qn) - -sBangType :: BangType l -> S.BangType -sBangType bt = case bt of - BangedTy _ t -> S.BangedTy (sType t) - UnBangedTy _ t -> S.UnBangedTy (sType t) - UnpackedTy _ t -> S.UnpackedTy (sType t) - -sRhs :: SrcInfo loc => Rhs loc -> S.Rhs -sRhs (UnGuardedRhs _ e) = S.UnGuardedRhs (sExp e) -sRhs (GuardedRhss _ grhss) = S.GuardedRhss (map sGuardedRhs grhss) - -sGuardedRhs :: SrcInfo loc => GuardedRhs loc -> S.GuardedRhs -sGuardedRhs (GuardedRhs l ss e) = S.GuardedRhs (getPointLoc l) (map sStmt ss) (sExp e) - --- | Translate an annotated AST node representing a Haskell type into a simpler --- unannotated form. -sType :: Type l -> S.Type -sType t = case t of - TyForall _ mtvs mctxt t -> S.TyForall (fmap (map sTyVarBind) mtvs) (maybe [] sContext mctxt) (sType t) - TyFun _ t1 t2 -> S.TyFun (sType t1) (sType t2) - TyTuple _ bx ts -> S.TyTuple bx (map sType ts) - TyList _ t -> S.TyList (sType t) - TyApp _ t1 t2 -> S.TyApp (sType t1) (sType t2) - TyVar _ n -> S.TyVar (sName n) - TyCon _ qn -> S.TyCon (sQName qn) - TyParen _ t -> S.TyParen (sType t) - TyInfix _ ta qn tb -> S.TyInfix (sType ta) (sQName qn) (sType tb) - TyKind _ t k -> S.TyKind (sType t) (sKind k) - -sTyVarBind :: TyVarBind l -> S.TyVarBind -sTyVarBind (KindedVar _ n k) = S.KindedVar (sName n) (sKind k) -sTyVarBind (UnkindedVar _ n) = S.UnkindedVar (sName n) - -sKind :: Kind l -> S.Kind -sKind k = case k of - KindStar _ -> S.KindStar - KindBang _ -> S.KindBang - KindFn _ k1 k2 -> S.KindFn (sKind k1) (sKind k2) - KindParen _ k -> S.KindParen (sKind k) - KindVar _ n -> S.KindVar (sName n) - -sFunDep :: FunDep l -> S.FunDep -sFunDep (FunDep _ as bs) = S.FunDep (map sName as) (map sName bs) - -sContext :: Context l -> S.Context -sContext ctxt = case ctxt of - CxSingle _ asst -> [sAsst asst] - CxTuple _ assts -> map sAsst assts - CxParen _ ct -> sContext ct - CxEmpty _ -> [] - -sAsst :: Asst l -> S.Asst -sAsst asst = case asst of - ClassA _ qn ts -> S.ClassA (sQName qn) (map sType ts) - InfixA _ ta qn tb -> S.InfixA (sType ta) (sQName qn) (sType tb) - IParam _ ipn t -> S.IParam (sIPName ipn) (sType t) - EqualP _ t1 t2 -> S.EqualP (sType t1) (sType t2) - -sLiteral :: Literal l -> S.Literal -sLiteral lit = case lit of - Char _ c _ -> S.Char c - String _ s _ -> S.String s - Int _ i _ -> S.Int i - Frac _ r _ -> S.Frac r - PrimInt _ i _ -> S.PrimInt i - PrimWord _ i _ -> S.PrimWord i - PrimFloat _ r _ -> S.PrimFloat r - PrimDouble _ r _ -> S.PrimDouble r - PrimChar _ c _ -> S.PrimChar c - PrimString _ s _ -> S.PrimString s - --- | Translate an annotated AST node representing a Haskell expression --- into a simpler unannotated form. -sExp :: SrcInfo loc => Exp loc -> S.Exp -sExp e = case e of - Var _ qn -> S.Var (sQName qn) - IPVar _ ipn -> S.IPVar (sIPName ipn) - Con _ qn -> S.Con (sQName qn) - Lit _ lit -> S.Lit (sLiteral lit) - InfixApp _ e1 op e2 -> S.InfixApp (sExp e1) (sQOp op) (sExp e2) - App _ e1 e2 -> S.App (sExp e1) (sExp e2) - NegApp _ e -> S.NegApp (sExp e) - Lambda l ps e -> S.Lambda (getPointLoc l) (map sPat ps) (sExp e) - Let _ bs e -> S.Let (sBinds bs) (sExp e) - If _ e1 e2 e3 -> S.If (sExp e1) (sExp e2) (sExp e3) - Case _ e alts -> S.Case (sExp e) (map sAlt alts) - Do _ ss -> S.Do (map sStmt ss) - MDo _ ss -> S.MDo (map sStmt ss) - Tuple _ es -> S.Tuple (map sExp es) - TupleSection _ mes -> S.TupleSection (map (fmap sExp) mes) - List _ es -> S.List (map sExp es) - Paren _ e -> S.Paren (sExp e) - LeftSection _ e op -> S.LeftSection (sExp e) (sQOp op) - RightSection _ op e -> S.RightSection (sQOp op) (sExp e) - RecConstr _ qn fups -> S.RecConstr (sQName qn) (map sFieldUpdate fups) - RecUpdate _ e fups -> S.RecUpdate (sExp e) (map sFieldUpdate fups) - EnumFrom _ e -> S.EnumFrom (sExp e) - EnumFromTo _ e1 e2 -> S.EnumFromTo (sExp e1) (sExp e2) - EnumFromThen _ e1 e2 -> S.EnumFromThen (sExp e1) (sExp e2) - EnumFromThenTo _ e1 e2 e3 -> S.EnumFromThenTo (sExp e1) (sExp e2) (sExp e3) - ListComp _ e qss -> S.ListComp (sExp e) (map sQualStmt qss) - ParComp _ e qsss -> S.ParComp (sExp e) (map (map sQualStmt) qsss) - ExpTypeSig l e t -> S.ExpTypeSig (getPointLoc l) (sExp e) (sType t) - VarQuote _ qn -> S.VarQuote (sQName qn) - TypQuote _ qn -> S.TypQuote (sQName qn) - BracketExp _ br -> S.BracketExp (sBracket br) - SpliceExp _ sp -> S.SpliceExp (sSplice sp) - QuasiQuote _ nm qt -> S.QuasiQuote nm qt - XTag l xn attrs mat es -> S.XTag (getPointLoc l) (sXName xn) (map sXAttr attrs) (fmap sExp mat) (map sExp es) - XETag l xn attrs mat -> S.XETag (getPointLoc l) (sXName xn) (map sXAttr attrs) (fmap sExp mat) - XPcdata _ str -> S.XPcdata str - XExpTag _ e -> S.XExpTag (sExp e) - CorePragma _ str e -> S.CorePragma str (sExp e) - SCCPragma _ str e -> S.SCCPragma str (sExp e) - GenPragma _ str i12 i34 e -> S.GenPragma str i12 i34 (sExp e) - Proc _ p e -> S.Proc (sPat p) (sExp e) - LeftArrApp _ e1 e2 -> S.LeftArrApp (sExp e1) (sExp e2) - RightArrApp _ e1 e2 -> S.RightArrApp (sExp e1) (sExp e2) - LeftArrHighApp _ e1 e2 -> S.LeftArrHighApp (sExp e1) (sExp e2) - RightArrHighApp _ e1 e2 -> S.RightArrHighApp (sExp e1) (sExp e2) - - -sXName :: XName l -> S.XName -sXName (XName _ str) = S.XName str -sXName (XDomName _ dom str) = S.XDomName dom str - -sXAttr :: SrcInfo loc => XAttr loc -> S.XAttr -sXAttr (XAttr _ xn e) = S.XAttr (sXName xn) (sExp e) - -sBracket:: SrcInfo loc => Bracket loc -> S.Bracket -sBracket br = case br of - ExpBracket _ e -> S.ExpBracket (sExp e) - PatBracket _ p -> S.PatBracket (sPat p) - TypeBracket _ t -> S.TypeBracket (sType t) - DeclBracket _ ds -> S.DeclBracket (map sDecl ds) - -sSplice :: SrcInfo loc => Splice loc -> S.Splice -sSplice (IdSplice _ str) = S.IdSplice str -sSplice (ParenSplice _ e) = S.ParenSplice (sExp e) - -sSafety :: Safety l -> S.Safety -sSafety (PlayRisky _) = S.PlayRisky -sSafety (PlaySafe _ b) = S.PlaySafe b - -sCallConv :: CallConv l -> S.CallConv -sCallConv (StdCall _) = S.StdCall -sCallConv (CCall _) = S.CCall - --- | Translate an annotated AST node representing a top-level Options pragma --- into a simpler unannotated form. -sOptionPragma :: SrcInfo loc => OptionPragma loc -> S.OptionPragma -sOptionPragma pr = case pr of - LanguagePragma l ns -> S.LanguagePragma (getPointLoc l) (map sName ns) - IncludePragma l str -> S.IncludePragma (getPointLoc l) str - CFilesPragma l str -> S.CFilesPragma (getPointLoc l) str - OptionsPragma l mt str -> S.OptionsPragma (getPointLoc l) mt str - -sActivation :: Activation l -> S.Activation -sActivation act = case act of - ActiveFrom _ k -> S.ActiveFrom k - ActiveUntil _ k -> S.ActiveUntil k - -sRule :: SrcInfo loc => Rule loc -> S.Rule -sRule (Rule _ str mact mrvs e1 e2) = - S.Rule str (maybe S.AlwaysActive sActivation mact) (fmap (map sRuleVar) mrvs) (sExp e1) (sExp e2) - -sRuleVar :: RuleVar l -> S.RuleVar -sRuleVar (RuleVar _ n) = S.RuleVar (sName n) -sRuleVar (TypedRuleVar _ n t) = S.TypedRuleVar (sName n) (sType t) - -sWarningText :: WarningText l -> S.WarningText -sWarningText (DeprText _ str) = S.DeprText str -sWarningText (WarnText _ str) = S.WarnText str - --- | Translate an annotated AST node representing a Haskell pattern --- into a simpler unannotated form. -sPat :: SrcInfo loc => Pat loc -> S.Pat -sPat pat = case pat of - PVar _ n -> S.PVar (sName n) - PLit _ lit -> S.PLit (sLiteral lit) - PNeg _ p -> S.PNeg (sPat p) - PNPlusK _ n k -> S.PNPlusK (sName n) k - PInfixApp _ pa qn pb -> S.PInfixApp (sPat pa) (sQName qn) (sPat pb) - PApp _ qn ps -> S.PApp (sQName qn) (map sPat ps) - PTuple _ ps -> S.PTuple (map sPat ps) - PList _ ps -> S.PList (map sPat ps) - PParen _ p -> S.PParen (sPat p) - PRec _ qn pfs -> S.PRec (sQName qn) (map sPatField pfs) - PAsPat _ n p -> S.PAsPat (sName n) (sPat p) - PWildCard _ -> S.PWildCard - PIrrPat _ p -> S.PIrrPat (sPat p) - PatTypeSig l p t -> S.PatTypeSig (getPointLoc l) (sPat p) (sType t) - PViewPat _ e p -> S.PViewPat (sExp e) (sPat p) - PRPat _ rps -> S.PRPat (map sRPat rps) - PXTag l xn attrs mat ps -> S.PXTag (getPointLoc l) (sXName xn) (map sPXAttr attrs) (fmap sPat mat) (map sPat ps) - PXETag l xn attrs mat -> S.PXETag (getPointLoc l) (sXName xn) (map sPXAttr attrs) (fmap sPat mat) - PXPcdata _ str -> S.PXPcdata str - PXPatTag _ p -> S.PXPatTag (sPat p) - PXRPats _ rps -> S.PXRPats (map sRPat rps) - PExplTypeArg _ qn t -> S.PExplTypeArg (sQName qn) (sType t) - PQuasiQuote _ nm qt -> S.PQuasiQuote nm qt - PBangPat _ p -> S.PBangPat (sPat p) - -sPXAttr :: SrcInfo loc => PXAttr loc -> S.PXAttr -sPXAttr (PXAttr _ xn p) = S.PXAttr (sXName xn) (sPat p) - -sRPatOp :: RPatOp l -> S.RPatOp -sRPatOp rpop = case rpop of - RPStar _ -> S.RPStar - RPStarG _ -> S.RPStarG - RPPlus _ -> S.RPPlus - RPPlusG _ -> S.RPPlusG - RPOpt _ -> S.RPOpt - RPOptG _ -> S.RPOptG - -sRPat :: SrcInfo loc => RPat loc -> S.RPat -sRPat rp = case rp of - RPOp _ rp rop -> S.RPOp (sRPat rp) (sRPatOp rop) - RPEither _ rp1 rp2 -> S.RPEither (sRPat rp1) (sRPat rp2) - RPSeq _ rps -> S.RPSeq (map sRPat rps) - RPGuard _ p ss -> S.RPGuard (sPat p) (map sStmt ss) - RPCAs _ n rp -> S.RPCAs (sName n) (sRPat rp) - RPAs _ n rp -> S.RPAs (sName n) (sRPat rp) - RPParen _ rp -> S.RPParen (sRPat rp) - RPPat _ p -> S.RPPat (sPat p) - -sPatField :: SrcInfo loc => PatField loc -> S.PatField -sPatField pf = case pf of - PFieldPat _ qn p -> S.PFieldPat (sQName qn) (sPat p) - PFieldPun _ n -> S.PFieldPun (sName n) - PFieldWildcard _ -> S.PFieldWildcard - -sStmt :: SrcInfo loc => Stmt loc -> S.Stmt -sStmt stmt = case stmt of - Generator l p e -> S.Generator (getPointLoc l) (sPat p) (sExp e) - Qualifier _ e -> S.Qualifier (sExp e) - LetStmt _ bs -> S.LetStmt (sBinds bs) - RecStmt _ ss -> S.RecStmt (map sStmt ss) - -sQualStmt :: SrcInfo loc => QualStmt loc -> S.QualStmt -sQualStmt qs = case qs of - QualStmt _ stmt -> S.QualStmt (sStmt stmt) - ThenTrans _ e -> S.ThenTrans (sExp e) - ThenBy _ e1 e2 -> S.ThenBy (sExp e1) (sExp e2) - GroupBy _ e -> S.GroupBy (sExp e) - GroupUsing _ e -> S.GroupUsing (sExp e) - GroupByUsing _ e1 e2 -> S.GroupByUsing (sExp e1) (sExp e2) - -sFieldUpdate :: SrcInfo loc => FieldUpdate loc -> S.FieldUpdate -sFieldUpdate fu = case fu of - FieldUpdate _ qn e -> S.FieldUpdate (sQName qn) (sExp e) - FieldPun _ n -> S.FieldPun (sName n) - FieldWildcard _ -> S.FieldWildcard - -sAlt :: SrcInfo loc => Alt loc -> S.Alt -sAlt (Alt l p galts mbs) = S.Alt (getPointLoc l) (sPat p) (sGuardedAlts galts) (maybe (S.BDecls []) sBinds mbs) - -sGuardedAlts :: SrcInfo loc => GuardedAlts loc -> S.GuardedAlts -sGuardedAlts galts = case galts of - UnGuardedAlt _ e -> S.UnGuardedAlt (sExp e) - GuardedAlts _ gs -> S.GuardedAlts (map sGuardedAlt gs) - -sGuardedAlt :: SrcInfo loc => GuardedAlt loc -> S.GuardedAlt -sGuardedAlt (GuardedAlt l ss e) = S.GuardedAlt (getPointLoc l) (map sStmt ss) (sExp e)
@@ -1,2196 +0,0 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-}--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Exts.Annotated.Syntax--- Copyright : (c) Niklas Broberg 2004-2009,--- (c) The GHC Team, 1997-2000--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@chalmers.se--- Stability : stable--- Portability : portable------ A suite of datatypes describing the (semi-concrete) abstract syntax of Haskell 98--- <http://www.haskell.org/onlinereport/> plus registered extensions, including:------ * multi-parameter type classes with functional dependencies (MultiParamTypeClasses, FunctionalDependencies)------ * parameters of type class assertions are unrestricted (FlexibleContexts)------ * 'forall' types as universal and existential quantification (RankNTypes, ExistentialQuantification, etc)------ * pattern guards (PatternGuards)------ * implicit parameters (ImplicitParameters)------ * generalised algebraic data types (GADTs)------ * template haskell (TemplateHaskell)------ * empty data type declarations (EmptyDataDecls)------ * unboxed tuples (UnboxedTuples)------ * regular patterns (RegularPatterns)------ * HSP-style XML expressions and patterns (XmlSyntax)------ All nodes in the syntax tree are annotated with something of a user-definable data type.--- When parsing, this annotation will contain information about the source location that the--- particular node comes from.-----------------------------------------------------------------------------------module Language.Haskell.Exts.Annotated.Syntax (- -- * Modules- Module(..), ModuleHead(..), WarningText(..), ExportSpecList(..), ExportSpec(..),- ImportDecl(..), ImportSpecList(..), ImportSpec(..), Assoc(..),- -- * Declarations- Decl(..), DeclHead(..), InstHead(..), Binds(..), IPBind(..),- -- ** Type classes and instances- ClassDecl(..), InstDecl(..), Deriving(..),- -- ** Data type declarations- DataOrNew(..), ConDecl(..), FieldDecl(..), QualConDecl(..), GadtDecl(..), BangType(..),- -- ** Function bindings- Match(..), Rhs(..), GuardedRhs(..),- -- * Class Assertions and Contexts- Context(..), FunDep(..), Asst(..),- -- * Types- Type(..), Boxed(..), Kind(..), TyVarBind(..),- -- * Expressions- Exp(..), Stmt(..), QualStmt(..), FieldUpdate(..),- Alt(..), GuardedAlts(..), GuardedAlt(..), XAttr(..),- -- * Patterns- Pat(..), PatField(..), PXAttr(..), RPat(..), RPatOp(..),- -- * Literals- Literal(..),- -- * Variables, Constructors and Operators- ModuleName(..), QName(..), Name(..), QOp(..), Op(..),- SpecialCon(..), CName(..), IPName(..), XName(..),-- -- * Template Haskell- Bracket(..), Splice(..),-- -- * FFI- Safety(..), CallConv(..),-- -- * Pragmas- OptionPragma(..), Tool(..),- Rule(..), RuleVar(..), Activation(..),-- -- * Builtin names-- -- ** Modules- prelude_mod, main_mod,- -- ** Main function of a program- main_name,- -- ** Constructors- unit_con_name, tuple_con_name, list_cons_name, unboxed_singleton_con_name,- unit_con, tuple_con, unboxed_singleton_con,- -- ** Special identifiers- as_name, qualified_name, hiding_name, minus_name, bang_name, dot_name, star_name,- export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name,- -- ** Type constructors- unit_tycon_name, fun_tycon_name, list_tycon_name, tuple_tycon_name, unboxed_singleton_tycon_name,- unit_tycon, fun_tycon, list_tycon, tuple_tycon, unboxed_singleton_tycon,-- -- * Source coordinates- -- SrcLoc(..),-- -- * Annotated trees- Annotated(..), (=~=),- ) where---#ifdef __GLASGOW_HASKELL__-#ifdef BASE4-import Data.Data-#else-import Data.Generics (Data(..),Typeable(..))-#endif-#endif---- import Language.Haskell.Exts.SrcLoc--- import Control.Monad.Instances -- just for Functor (,) a--{-- | A position in the source.-data SrcLoc = SrcLoc {- srcFilename :: String,- srcLine :: Int,- srcColumn :: Int- }-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif--}---- | The name of a Haskell module.-data ModuleName l = ModuleName l String-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Constructors with special syntax.--- These names are never qualified, and always refer to builtin type or--- data constructors.--data SpecialCon l- = UnitCon l -- ^ unit type and data constructor @()@- | ListCon l -- ^ list type constructor @[]@- | FunCon l -- ^ function type constructor @->@- | TupleCon l Boxed Int -- ^ /n/-ary tuple type and data- -- constructors @(,)@ etc, possibly boxed @(\#,\#)@- | Cons l -- ^ list data constructor @(:)@- | UnboxedSingleCon l -- ^ unboxed singleton tuple constructor @(\# \#)@-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | This type is used to represent qualified variables, and also--- qualified constructors.-data QName l- = Qual l (ModuleName l) (Name l) -- ^ name qualified with a module name- | UnQual l (Name l) -- ^ unqualified local name- | Special l (SpecialCon l) -- ^ built-in constructor with special syntax-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | This type is used to represent variables, and also constructors.-data Name l- = Ident l String -- ^ /varid/ or /conid/.- | Symbol l String -- ^ /varsym/ or /consym/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An implicit parameter name.-data IPName l- = IPDup l String -- ^ ?/ident/, non-linear implicit parameter- | IPLin l String -- ^ %/ident/, linear implicit parameter-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Possibly qualified infix operators (/qop/), appearing in expressions.-data QOp l- = QVarOp l (QName l) -- ^ variable operator (/qvarop/)- | QConOp l (QName l) -- ^ constructor operator (/qconop/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Operators appearing in @infix@ declarations are never qualified.-data Op l- = VarOp l (Name l) -- ^ variable operator (/varop/)- | ConOp l (Name l) -- ^ constructor operator (/conop/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A name (/cname/) of a component of a class or data type in an @import@--- or export specification.-data CName l- = VarName l (Name l) -- ^ name of a method or field- | ConName l (Name l) -- ^ name of a data constructor-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A complete Haskell source module.-data Module l- = Module l (Maybe (ModuleHead l)) [OptionPragma l] [ImportDecl l] [Decl l]- -- ^ an ordinary Haskell module- | XmlPage l (ModuleName l) [OptionPragma l] (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]- -- ^ a module consisting of a single XML document. The ModuleName never appears in the source- -- but is needed for semantic purposes, it will be the same as the file name.- | XmlHybrid l (Maybe (ModuleHead l)) [OptionPragma l] [ImportDecl l] [Decl l]- (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]- -- ^ a hybrid module combining an XML document with an ordinary module-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The head of a module, including the name and export specification.-data ModuleHead l = ModuleHead l (ModuleName l) (Maybe (WarningText l)) (Maybe (ExportSpecList l))-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An explicit export specification.-data ExportSpecList l- = ExportSpecList l [ExportSpec l]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An item in a module's export specification.-data ExportSpec l- = EVar l (QName l) -- ^ variable- | EAbs l (QName l) -- ^ @T@:- -- a class or datatype exported abstractly,- -- or a type synonym.- | EThingAll l (QName l) -- ^ @T(..)@:- -- a class exported with all of its methods, or- -- a datatype exported with all of its constructors.- | EThingWith l (QName l) [CName l] -- ^ @T(C_1,...,C_n)@:- -- a class exported with some of its methods, or- -- a datatype exported with some of its constructors.- | EModuleContents l (ModuleName l) -- ^ @module M@:- -- re-export a module.-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An import declaration.-data ImportDecl l = ImportDecl- { importAnn :: l -- ^ annotation, used by parser for position of the @import@ keyword.- , importModule :: (ModuleName l) -- ^ name of the module imported.- , importQualified :: Bool -- ^ imported @qualified@?- , importSrc :: Bool -- ^ imported with @{-\# SOURCE \#-}@?- , importPkg :: Maybe String -- ^ imported with explicit package name- , importAs :: Maybe (ModuleName l) -- ^ optional alias name in an @as@ clause.- , importSpecs :: Maybe (ImportSpecList l)- -- ^ optional list of import specifications.- }-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An explicit import specification list.-data ImportSpecList l- = ImportSpecList l Bool [ImportSpec l]- -- A list of import specifications.- -- The 'Bool' is 'True' if the names are excluded- -- by @hiding@.-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An import specification, representing a single explicit item imported--- (or hidden) from a module.-data ImportSpec l- = IVar l (Name l) -- ^ variable- | IAbs l (Name l) -- ^ @T@:- -- the name of a class, datatype or type synonym.- | IThingAll l (Name l) -- ^ @T(..)@:- -- a class imported with all of its methods, or- -- a datatype imported with all of its constructors.- | IThingWith l (Name l) [CName l] -- ^ @T(C_1,...,C_n)@:- -- a class imported with some of its methods, or- -- a datatype imported with some of its constructors.-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Associativity of an operator.-data Assoc l- = AssocNone l -- ^ non-associative operator (declared with @infix@)- | AssocLeft l -- ^ left-associative operator (declared with @infixl@).- | AssocRight l -- ^ right-associative operator (declared with @infixr@)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A top-level declaration.-data Decl l- = TypeDecl l (DeclHead l) (Type l)- -- ^ A type declaration- | TypeFamDecl l (DeclHead l) (Maybe (Kind l))- -- ^ A type family declaration- | DataDecl l (DataOrNew l) (Maybe (Context l)) (DeclHead l) [QualConDecl l] (Maybe (Deriving l))- -- ^ A data OR newtype declaration- | GDataDecl l (DataOrNew l) (Maybe (Context l)) (DeclHead l) (Maybe (Kind l)) [GadtDecl l] (Maybe (Deriving l))- -- ^ A data OR newtype declaration, GADT style- | DataFamDecl l {-data-} (Maybe (Context l)) (DeclHead l) (Maybe (Kind l))- -- ^ A data family declaration- | TypeInsDecl l (Type l) (Type l)- -- ^ A type family instance declaration- | DataInsDecl l (DataOrNew l) (Type l) [QualConDecl l] (Maybe (Deriving l))- -- ^ A data family instance declaration- | GDataInsDecl l (DataOrNew l) (Type l) (Maybe (Kind l)) [GadtDecl l] (Maybe (Deriving l))- -- ^ A data family instance declaration, GADT style- | ClassDecl l (Maybe (Context l)) (DeclHead l) [FunDep l] (Maybe [ClassDecl l])- -- ^ A declaration of a type class- | InstDecl l (Maybe (Context l)) (InstHead l) (Maybe [InstDecl l])- -- ^ An declaration of a type class instance- | DerivDecl l (Maybe (Context l)) (InstHead l)- -- ^ A standalone deriving declaration- | InfixDecl l (Assoc l) (Maybe Int) [Op l]- -- ^ A declaration of operator fixity- | DefaultDecl l [Type l]- -- ^ A declaration of default types- | SpliceDecl l (Exp l)- -- ^ A Template Haskell splicing declaration- | TypeSig l [Name l] (Type l)- -- ^ A type signature declaration- | FunBind l [Match l]- -- ^ A set of function binding clauses- | PatBind l (Pat l) (Maybe (Type l)) (Rhs l) {-where-} (Maybe (Binds l))- -- ^ A pattern binding- | ForImp l (CallConv l) (Maybe (Safety l)) (Maybe String) (Name l) (Type l)- -- ^ A foreign import declaration- | ForExp l (CallConv l) (Maybe String) (Name l) (Type l)- -- ^ A foreign export declaration-- | RulePragmaDecl l [Rule l]- -- ^ A RULES pragma- | DeprPragmaDecl l [([Name l], String)]- -- ^ A DEPRECATED pragma- | WarnPragmaDecl l [([Name l], String)]- -- ^ A WARNING pragma- | InlineSig l Bool (Maybe (Activation l)) (QName l)- -- ^ An INLINE pragma- | SpecSig l (QName l) [Type l]- -- ^ A SPECIALISE pragma- | SpecInlineSig l Bool (Maybe (Activation l)) (QName l) [Type l]- -- ^ A SPECIALISE INLINE pragma- | InstSig l (Maybe (Context l)) (InstHead l)- -- ^ A SPECIALISE instance pragma-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A flag stating whether a declaration is a data or newtype declaration.-data DataOrNew l = DataType l | NewType l-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The head of a type or class declaration.-data DeclHead l- = DHead l (Name l) [TyVarBind l]- | DHInfix l (TyVarBind l) (Name l) (TyVarBind l)- | DHParen l (DeclHead l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The head of an instance declaration.-data InstHead l- = IHead l (QName l) [Type l]- | IHInfix l (Type l) (QName l) (Type l)- | IHParen l (InstHead l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A deriving clause following a data type declaration.-data Deriving l = Deriving l [InstHead l]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A binding group inside a @let@ or @where@ clause.-data Binds l- = BDecls l [Decl l] -- ^ An ordinary binding group- | IPBinds l [IPBind l] -- ^ A binding group for implicit parameters-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A binding of an implicit parameter.-data IPBind l = IPBind l (IPName l) (Exp l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Clauses of a function binding.-data Match l- = Match l (Name l) [Pat l] (Rhs l) {-where-} (Maybe (Binds l))- | InfixMatch l (Pat l) (Name l) (Pat l) (Rhs l) {-where-} (Maybe (Binds l))-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A single constructor declaration within a data type declaration,--- which may have an existential quantification binding.-data QualConDecl l- = QualConDecl l- {-forall-} (Maybe [TyVarBind l]) {- . -} (Maybe (Context l))- {- => -} (ConDecl l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Declaration of an ordinary data constructor.-data ConDecl l- = ConDecl l (Name l) [BangType l]- -- ^ ordinary data constructor- | InfixConDecl l (BangType l) (Name l) (BangType l)- -- ^ infix data constructor- | RecDecl l (Name l) [FieldDecl l]- -- ^ record constructor-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Declaration of a (list of) named field(s).-data FieldDecl l = FieldDecl l [Name l] (BangType l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif----- | A single constructor declaration in a GADT data type declaration.-data GadtDecl l- = GadtDecl l (Name l) (Type l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Declarations inside a class declaration.-data ClassDecl l- = ClsDecl l (Decl l)- -- ^ ordinary declaration- | ClsDataFam l (Maybe (Context l)) (DeclHead l) (Maybe (Kind l))- -- ^ declaration of an associated data type- | ClsTyFam l (DeclHead l) (Maybe (Kind l))- -- ^ declaration of an associated type synonym- | ClsTyDef l (Type l) (Type l)- -- ^ default choice for an associated type synonym-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Declarations inside an instance declaration.-data InstDecl l- = InsDecl l (Decl l)- -- ^ ordinary declaration- | InsType l (Type l) (Type l)- -- ^ an associated type definition- | InsData l (DataOrNew l) (Type l) [QualConDecl l] (Maybe (Deriving l))- -- ^ an associated data type implementation- | InsGData l (DataOrNew l) (Type l) (Maybe (Kind l)) [GadtDecl l] (Maybe (Deriving l))- -- ^ an associated data type implemented using GADT style- | InsInline l Bool (Maybe (Activation l)) (QName l)- -- ^ an INLINE pragma-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The type of a constructor argument or field, optionally including--- a strictness annotation.-data BangType l- = BangedTy l (Type l) -- ^ strict component, marked with \"@!@\"- | UnBangedTy l (Type l) -- ^ non-strict component- | UnpackedTy l (Type l) -- ^ unboxed component, marked with an UNPACK pragma-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The right hand side of a function or pattern binding.-data Rhs l- = UnGuardedRhs l (Exp l) -- ^ unguarded right hand side (/exp/)- | GuardedRhss l [GuardedRhs l]- -- ^ guarded right hand side (/gdrhs/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A guarded right hand side @|@ /stmts/ @=@ /exp/.--- The guard is a series of statements when using pattern guards,--- otherwise it will be a single qualifier expression.-data GuardedRhs l- = GuardedRhs l [Stmt l] (Exp l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A type qualified with a context.--- An unqualified type has an empty context.-data Type l- = TyForall l- (Maybe [TyVarBind l])- (Maybe (Context l))- (Type l) -- ^ qualified type- | TyFun l (Type l) (Type l) -- ^ function type- | TyTuple l Boxed [Type l] -- ^ tuple type, possibly boxed- | TyList l (Type l) -- ^ list syntax, e.g. [a], as opposed to [] a- | TyApp l (Type l) (Type l) -- ^ application of a type constructor- | TyVar l (Name l) -- ^ type variable- | TyCon l (QName l) -- ^ named type or type constructor- | TyParen l (Type l) -- ^ type surrounded by parentheses- | TyInfix l (Type l) (QName l) (Type l) -- ^ infix type constructor- | TyKind l (Type l) (Kind l) -- ^ type with explicit kind signature-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Flag denoting whether a tuple is boxed or unboxed.-data Boxed = Boxed | Unboxed-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A type variable declaration, optionally with an explicit kind annotation.-data TyVarBind l- = KindedVar l (Name l) (Kind l) -- ^ variable binding with kind annotation- | UnkindedVar l (Name l) -- ^ ordinary variable binding-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An explicit kind annotation.-data Kind l- = KindStar l -- ^ @*@, the kind of types- | KindBang l -- ^ @!@, the kind of unboxed types- | KindFn l (Kind l) (Kind l) -- ^ @->@, the kind of a type constructor- | KindParen l (Kind l) -- ^ a parenthesised kind- | KindVar l (Name l) -- ^ a kind variable (as-of-yet unsupported by compilers)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif----- | A functional dependency, given on the form--- l1 l2 ... ln -> r2 r3 .. rn-data FunDep l- = FunDep l [Name l] [Name l]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A context is a set of assertions-data Context l- = CxSingle l (Asst l)- | CxTuple l [Asst l]- | CxParen l (Context l)- | CxEmpty l-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Class assertions.--- In Haskell 98, the argument would be a /tyvar/, but this definition--- allows multiple parameters, and allows them to be /type/s.--- Also extended with support for implicit parameters and equality constraints.-data Asst l- = ClassA l (QName l) [Type l] -- ^ ordinary class assertion- | InfixA l (Type l) (QName l) (Type l) -- ^ class assertion where the class name is given infix- | IParam l (IPName l) (Type l) -- ^ implicit parameter assertion- | EqualP l (Type l) (Type l) -- ^ type equality constraint-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | /literal/--- Values of this type hold the abstract value of the literal, not the--- precise string representation used. For example, @10@, @0o12@ and @0xa@--- have the same representation.-data Literal l- = Char l Char String -- ^ character literal- | String l String String -- ^ string literal- | Int l Integer String -- ^ integer literal- | Frac l Rational String -- ^ floating point literal- | PrimInt l Integer String -- ^ unboxed integer literal- | PrimWord l Integer String -- ^ unboxed word literal- | PrimFloat l Rational String -- ^ unboxed float literal- | PrimDouble l Rational String -- ^ unboxed double literal- | PrimChar l Char String -- ^ unboxed character literal- | PrimString l String String -- ^ unboxed string literal-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Haskell expressions.-data Exp l- = Var l (QName l) -- ^ variable- | IPVar l (IPName l) -- ^ implicit parameter variable- | Con l (QName l) -- ^ data constructor- | Lit l (Literal l) -- ^ literal constant- | InfixApp l (Exp l) (QOp l) (Exp l) -- ^ infix application- | App l (Exp l) (Exp l) -- ^ ordinary application- | NegApp l (Exp l) -- ^ negation expression @-/exp/@ (unary minus)- | Lambda l [Pat l] (Exp l) -- ^ lambda expression- | Let l (Binds l) (Exp l) -- ^ local declarations with @let@ ... @in@ ...- | If l (Exp l) (Exp l) (Exp l) -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/- | Case l (Exp l) [Alt l] -- ^ @case@ /exp/ @of@ /alts/- | Do l [Stmt l] -- ^ @do@-expression:- -- the last statement in the list- -- should be an expression.- | MDo l [Stmt l] -- ^ @mdo@-expression- | Tuple l [Exp l] -- ^ tuple expression- | TupleSection l [Maybe (Exp l)] -- ^ tuple section expression, e.g. @(,,3)@- | List l [Exp l] -- ^ list expression- | Paren l (Exp l) -- ^ parenthesised expression- | LeftSection l (Exp l) (QOp l) -- ^ left section @(@/exp/ /qop/@)@- | RightSection l (QOp l) (Exp l) -- ^ right section @(@/qop/ /exp/@)@- | RecConstr l (QName l) [FieldUpdate l]- -- ^ record construction expression- | RecUpdate l (Exp l) [FieldUpdate l]- -- ^ record update expression- | EnumFrom l (Exp l) -- ^ unbounded arithmetic sequence,- -- incrementing by 1: @[from ..]@- | EnumFromTo l (Exp l) (Exp l) -- ^ bounded arithmetic sequence,- -- incrementing by 1 @[from .. to]@- | EnumFromThen l (Exp l) (Exp l) -- ^ unbounded arithmetic sequence,- -- with first two elements given @[from, then ..]@- | EnumFromThenTo l (Exp l) (Exp l) (Exp l)- -- ^ bounded arithmetic sequence,- -- with first two elements given @[from, then .. to]@- | ListComp l (Exp l) [QualStmt l] -- ^ ordinary list comprehension- | ParComp l (Exp l) [[QualStmt l]] -- ^ parallel list comprehension- | ExpTypeSig l (Exp l) (Type l)- -- ^ expression with explicit type signature-- | VarQuote l (QName l) -- ^ @'x@ for template haskell reifying of expressions- | TypQuote l (QName l) -- ^ @''T@ for template haskell reifying of types- | BracketExp l (Bracket l) -- ^ template haskell bracket expression- | SpliceExp l (Splice l) -- ^ template haskell splice expression- | QuasiQuote l String String -- ^ quasi-quotaion: @[$/name/| /string/ |]@---- Hsx- | XTag l (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]- -- ^ xml element, with attributes and children- | XETag l (XName l) [XAttr l] (Maybe (Exp l))- -- ^ empty xml element, with attributes- | XPcdata l String -- ^ PCDATA child element- | XExpTag l (Exp l) -- ^ escaped haskell expression inside xml---- Pragmas- | CorePragma l String (Exp l) -- ^ CORE pragma- | SCCPragma l String (Exp l) -- ^ SCC pragma- | GenPragma l String (Int, Int) (Int, Int) (Exp l)- -- ^ GENERATED pragma---- Arrows- | Proc l (Pat l) (Exp l) -- ^ arrows proc: @proc@ /pat/ @->@ /exp/- | LeftArrApp l (Exp l) (Exp l) -- ^ arrow application (from left): /exp/ @-<@ /exp/- | RightArrApp l (Exp l) (Exp l) -- ^ arrow application (from right): /exp/ @>-@ /exp/- | LeftArrHighApp l (Exp l) (Exp l) -- ^ higher-order arrow application (from left): /exp/ @-<<@ /exp/- | RightArrHighApp l (Exp l) (Exp l) -- ^ higher-order arrow application (from right): /exp/ @>>-@ /exp/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The name of an xml element or attribute,--- possibly qualified with a namespace.-data XName l- = XName l String -- <name ...- | XDomName l String String -- <dom:name ...-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An xml attribute, which is a name-expression pair.-data XAttr l = XAttr l (XName l) (Exp l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A template haskell bracket expression.-data Bracket l- = ExpBracket l (Exp l) -- ^ expression bracket: @[| ... |]@- | PatBracket l (Pat l) -- ^ pattern bracket: @[p| ... |]@- | TypeBracket l (Type l) -- ^ type bracket: @[t| ... |]@- | DeclBracket l [Decl l] -- ^ declaration bracket: @[d| ... |]@-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A template haskell splice expression-data Splice l- = IdSplice l String -- ^ variable splice: @$var@- | ParenSplice l (Exp l) -- ^ parenthesised expression splice: @$(/exp/)@-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The safety of a foreign function call.-data Safety l- = PlayRisky l -- ^ unsafe- | PlaySafe l Bool -- ^ safe ('False') or threadsafe ('True')-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The calling convention of a foreign function call.-data CallConv l- = StdCall l- | CCall l-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A top level options pragma, preceding the module header.-data OptionPragma l- = LanguagePragma l [Name l] -- ^ LANGUAGE pragma- | IncludePragma l String -- ^ INCLUDE pragma- | CFilesPragma l String -- ^ CFILES pragma- | OptionsPragma l (Maybe Tool) String- -- ^ OPTIONS pragma, possibly qualified with a tool, e.g. OPTIONS_GHC-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Recognised tools for OPTIONS pragmas.-data Tool = GHC | HUGS | NHC98 | YHC | HADDOCK | UnknownTool String-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Activation clause of a RULES pragma.-data Activation l- = ActiveFrom l Int- | ActiveUntil l Int-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The body of a RULES pragma.-data Rule l- = Rule l String (Maybe (Activation l)) (Maybe [RuleVar l]) (Exp l) (Exp l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Variables used in a RULES pragma, optionally annotated with types-data RuleVar l- = RuleVar l (Name l)- | TypedRuleVar l (Name l) (Type l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Warning text to optionally use in the module header of e.g.--- a deprecated module.-data WarningText l- = DeprText l String- | WarnText l String-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif----- | A pattern, to be matched against a value.-data Pat l- = PVar l (Name l) -- ^ variable- | PLit l (Literal l) -- ^ literal constant- | PNeg l (Pat l) -- ^ negated pattern- | PNPlusK l (Name l) Integer -- ^ n+k pattern- | PInfixApp l (Pat l) (QName l) (Pat l)- -- ^ pattern with an infix data constructor- | PApp l (QName l) [Pat l] -- ^ data constructor and argument patterns- | PTuple l [Pat l] -- ^ tuple pattern- | PList l [Pat l] -- ^ list pattern- | PParen l (Pat l) -- ^ parenthesized pattern- | PRec l (QName l) [PatField l] -- ^ labelled pattern, record style- | PAsPat l (Name l) (Pat l) -- ^ @\@@-pattern- | PWildCard l -- ^ wildcard pattern: @_@- | PIrrPat l (Pat l) -- ^ irrefutable pattern: @~/pat/@- | PatTypeSig l (Pat l) (Type l) -- ^ pattern with type signature- | PViewPat l (Exp l) (Pat l) -- ^ view patterns of the form @(/exp/ -> /pat/)@-- | PRPat l [RPat l] -- ^ regular list pattern-- | PXTag l (XName l) [PXAttr l] (Maybe (Pat l)) [Pat l]- -- ^ XML element pattern- | PXETag l (XName l) [PXAttr l] (Maybe (Pat l))- -- ^ XML singleton element pattern- | PXPcdata l String -- ^ XML PCDATA pattern- | PXPatTag l (Pat l) -- ^ XML embedded pattern- | PXRPats l [RPat l] -- ^ XML regular list pattern- | PExplTypeArg l (QName l) (Type l) -- ^ Explicit generics style type argument e.g. @f {| Int |} x = ...@-- | PQuasiQuote l String String -- ^ quasi quote pattern: @[$/name/| /string/ |]@-- | PBangPat l (Pat l) -- ^ strict (bang) pattern: @f !x = ...@--#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An XML attribute in a pattern.-data PXAttr l = PXAttr l (XName l) (Pat l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A regular pattern operator.-data RPatOp l- = RPStar l -- ^ @*@ = 0 or more- | RPStarG l -- ^ @*!@ = 0 or more, greedy- | RPPlus l -- ^ @+@ = 1 or more- | RPPlusG l -- ^ @+!@ = 1 or more, greedy- | RPOpt l -- ^ @?@ = 0 or 1- | RPOptG l -- ^ @?!@ = 0 or 1, greedy-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An entity in a regular pattern.-data RPat l- = RPOp l (RPat l) (RPatOp l)- | RPEither l (RPat l) (RPat l)- | RPSeq l [RPat l]- | RPGuard l (Pat l) [Stmt l]- | RPCAs l (Name l) (RPat l)- | RPAs l (Name l) (RPat l)- | RPParen l (RPat l)- | RPPat l (Pat l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An /fpat/ in a labeled record pattern.-data PatField l- = PFieldPat l (QName l) (Pat l) -- ^ ordinary label-pattern pair- | PFieldPun l (Name l) -- ^ record field pun- | PFieldWildcard l -- ^ record field wildcard-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A statement, representing both a /stmt/ in a @do@-expression,--- an ordinary /qual/ in a list comprehension, as well as a /stmt/--- in a pattern guard.-data Stmt l- = Generator l (Pat l) (Exp l)- -- ^ a generator: /pat/ @<-@ /exp/- | Qualifier l (Exp l) -- ^ an /exp/ by itself: in a @do@-expression,- -- an action whose result is discarded;- -- in a list comprehension and pattern guard,- -- a guard expression- | LetStmt l (Binds l) -- ^ local bindings- | RecStmt l [Stmt l] -- ^ a recursive binding group for arrows-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A general /transqual/ in a list comprehension,--- which could potentially be a transform of the kind--- enabled by TransformListComp.-data QualStmt l- = QualStmt l (Stmt l) -- ^ an ordinary statement- | ThenTrans l (Exp l) -- ^ @then@ /exp/- | ThenBy l (Exp l) (Exp l) -- ^ @then@ /exp/ @by@ /exp/- | GroupBy l (Exp l) -- ^ @then@ @group@ @by@ /exp/- | GroupUsing l (Exp l) -- ^ @then@ @group@ @using@ /exp/- | GroupByUsing l (Exp l) (Exp l) -- ^ @then@ @group@ @by@ /exp/ @using@ /exp/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An /fbind/ in a labeled construction or update expression.-data FieldUpdate l- = FieldUpdate l (QName l) (Exp l) -- ^ ordinary label-expresion pair- | FieldPun l (Name l) -- ^ record field pun- | FieldWildcard l -- ^ record field wildcard-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An /alt/ alternative in a @case@ expression.-data Alt l- = Alt l (Pat l) (GuardedAlts l) (Maybe (Binds l))-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The right-hand sides of a @case@ alternative,--- which may be a single right-hand side or a--- set of guarded ones.-data GuardedAlts l- = UnGuardedAlt l (Exp l) -- ^ @->@ /exp/- | GuardedAlts l [GuardedAlt l] -- ^ /gdpat/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A guarded case alternative @|@ /stmts/ @->@ /exp/.-data GuardedAlt l- = GuardedAlt l [Stmt l] (Exp l)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---------------------------------------------------------------------------------- Builtin names.--prelude_mod, main_mod :: l -> ModuleName l-prelude_mod l = ModuleName l "Prelude"-main_mod l = ModuleName l "Main"--main_name :: l -> Name l-main_name l = Ident l "main"--unit_con_name :: l -> QName l-unit_con_name l = Special l (UnitCon l)--tuple_con_name :: l -> Boxed -> Int -> QName l-tuple_con_name l b i = Special l (TupleCon l b (i+1))--list_cons_name :: l -> QName l-list_cons_name l = Special l (Cons l)--unboxed_singleton_con_name :: l -> QName l-unboxed_singleton_con_name l = Special l (UnboxedSingleCon l)--unit_con :: l -> Exp l-unit_con l = Con l $ unit_con_name l--tuple_con :: l -> Boxed -> Int -> Exp l-tuple_con l b i = Con l (tuple_con_name l b i)--unboxed_singleton_con :: l -> Exp l-unboxed_singleton_con l = Con l (unboxed_singleton_con_name l)--as_name, qualified_name, hiding_name, minus_name, bang_name, dot_name, star_name :: l -> Name l-as_name l = Ident l "as"-qualified_name l = Ident l "qualified"-hiding_name l = Ident l "hiding"-minus_name l = Symbol l "-"-bang_name l = Symbol l "!"-dot_name l = Symbol l "."-star_name l = Symbol l "*"--export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name :: l -> Name l-export_name l = Ident l "export"-safe_name l = Ident l "safe"-unsafe_name l = Ident l "unsafe"-threadsafe_name l = Ident l "threadsafe"-stdcall_name l = Ident l "stdcall"-ccall_name l = Ident l "ccall"--unit_tycon_name, fun_tycon_name, list_tycon_name, unboxed_singleton_tycon_name :: l -> QName l-unit_tycon_name l = unit_con_name l-fun_tycon_name l = Special l (FunCon l)-list_tycon_name l = Special l (ListCon l)-unboxed_singleton_tycon_name l = Special l (UnboxedSingleCon l)--tuple_tycon_name :: l -> Boxed -> Int -> QName l-tuple_tycon_name l b i = tuple_con_name l b i--unit_tycon, fun_tycon, list_tycon, unboxed_singleton_tycon :: l -> Type l-unit_tycon l = TyCon l $ unit_tycon_name l-fun_tycon l = TyCon l $ fun_tycon_name l-list_tycon l = TyCon l $ list_tycon_name l-unboxed_singleton_tycon l = TyCon l $ unboxed_singleton_tycon_name l--tuple_tycon :: l -> Boxed -> Int -> Type l-tuple_tycon l b i = TyCon l (tuple_tycon_name l b i)---------------------------------------------------------------------------------- AST traversal, boiler-plate style--(=~=) :: (Functor a, Eq (a ())) => a l1 -> a l2 -> Bool-a =~= b = fmap (const ()) a == fmap (const ()) b--instance Functor ModuleName where- fmap f (ModuleName l s) = ModuleName (f l) s--instance Functor SpecialCon where- fmap f sc = case sc of- UnitCon l -> UnitCon (f l)- ListCon l -> ListCon (f l)- FunCon l -> FunCon (f l)- TupleCon l b n -> TupleCon (f l) b n- Cons l -> Cons (f l)- UnboxedSingleCon l -> UnboxedSingleCon (f l)--instance Functor QName where- fmap f qn = case qn of- Qual l mn n -> Qual (f l) (fmap f mn) (fmap f n)- UnQual l n -> UnQual (f l) (fmap f n)- Special l sc -> Special (f l) (fmap f sc)--instance Functor Name where- fmap f (Ident l s) = Ident (f l) s- fmap f (Symbol l s) = Symbol (f l) s--instance Functor IPName where- fmap f (IPDup l s) = IPDup (f l) s- fmap f (IPLin l s) = IPLin (f l) s--instance Functor QOp where- fmap f (QVarOp l qn) = QVarOp (f l) (fmap f qn)- fmap f (QConOp l qn) = QConOp (f l) (fmap f qn)--instance Functor Op where- fmap f (VarOp l n) = VarOp (f l) (fmap f n)- fmap f (ConOp l n) = ConOp (f l) (fmap f n)--instance Functor CName where- fmap f (VarName l n) = VarName (f l) (fmap f n)- fmap f (ConName l n) = ConName (f l) (fmap f n)--instance Functor Module where- fmap f (Module l mmh ops iss dcls) =- Module (f l) (fmap (fmap f) mmh) (map (fmap f) ops) (map (fmap f) iss) (map (fmap f) dcls)- fmap f (XmlPage l mn os xn xas me es) =- XmlPage (f l) (fmap f mn) (map (fmap f) os) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es)- fmap f (XmlHybrid l mmh ops iss dcls xn xas me es) =- XmlHybrid (f l) (fmap (fmap f) mmh) (map (fmap f) ops) (map (fmap f) iss) (map (fmap f) dcls)- (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es)--instance Functor ModuleHead where- fmap f (ModuleHead l mn mwt mexpl) =- ModuleHead (f l) (fmap f mn) (fmap (fmap f) mwt) (fmap (fmap f) mexpl)--instance Functor ExportSpecList where- fmap f (ExportSpecList l ess) = ExportSpecList (f l) (map (fmap f) ess)--instance Functor ExportSpec where- fmap f es = case es of- EVar l qn -> EVar (f l) (fmap f qn)- EAbs l qn -> EAbs (f l) (fmap f qn)- EThingAll l qn -> EThingAll (f l) (fmap f qn)- EThingWith l qn cns -> EThingWith (f l) (fmap f qn) (map (fmap f) cns)- EModuleContents l mn -> EModuleContents (f l) (fmap f mn)--instance Functor ImportDecl where- fmap f (ImportDecl l mn qual src pkg mmn mis) =- ImportDecl (f l) (fmap f mn) qual src pkg (fmap (fmap f) mmn) (fmap (fmap f) mis)--instance Functor ImportSpecList where- fmap f (ImportSpecList l b iss) = ImportSpecList (f l) b (map (fmap f) iss)--instance Functor ImportSpec where- fmap f is = case is of- IVar l n -> IVar (f l) (fmap f n)- IAbs l n -> IAbs (f l) (fmap f n)- IThingAll l n -> IThingAll (f l) (fmap f n)- IThingWith l n cns -> IThingWith (f l) (fmap f n) (map (fmap f) cns)--instance Functor Assoc where- fmap f (AssocNone l) = AssocNone (f l)- fmap f (AssocLeft l) = AssocLeft (f l)- fmap f (AssocRight l) = AssocRight (f l)--instance Functor Decl where- fmap f decl = case decl of- TypeDecl l dh t -> TypeDecl (f l) (fmap f dh) (fmap f t)- TypeFamDecl l dh mk -> TypeFamDecl (f l) (fmap f dh) (fmap (fmap f) mk)- DataDecl l dn mcx dh cds ders ->- DataDecl (f l) (fmap f dn) (fmap (fmap f) mcx) (fmap f dh) (map (fmap f) cds) (fmap (fmap f) ders)- GDataDecl l dn mcx dh mk gds ders ->- GDataDecl (f l) (fmap f dn) (fmap (fmap f) mcx) (fmap f dh) (fmap (fmap f) mk) (map (fmap f) gds) (fmap (fmap f) ders)- DataFamDecl l mcx dh mk -> DataFamDecl (f l) (fmap (fmap f) mcx) (fmap f dh) (fmap (fmap f) mk)- TypeInsDecl l t1 t2 -> TypeInsDecl (f l) (fmap f t1) (fmap f t2)- DataInsDecl l dn t cds ders -> DataInsDecl (f l) (fmap f dn) (fmap f t) (map (fmap f) cds) (fmap (fmap f) ders)- GDataInsDecl l dn t mk gds ders -> GDataInsDecl (f l) (fmap f dn) (fmap f t) (fmap (fmap f) mk) (map (fmap f) gds) (fmap (fmap f) ders)- ClassDecl l mcx dh fds mcds -> ClassDecl (f l) (fmap (fmap f) mcx) (fmap f dh) (map (fmap f) fds) (fmap (map (fmap f)) mcds)- InstDecl l mcx ih mids -> InstDecl (f l) (fmap (fmap f) mcx) (fmap f ih) (fmap (map (fmap f)) mids)- DerivDecl l mcx ih -> DerivDecl (f l) (fmap (fmap f) mcx) (fmap f ih)- InfixDecl l a k ops -> InfixDecl (f l) (fmap f a) k (map (fmap f) ops)- DefaultDecl l ts -> DefaultDecl (f l) (map (fmap f) ts)- SpliceDecl l sp -> SpliceDecl (f l) (fmap f sp)- TypeSig l ns t -> TypeSig (f l) (map (fmap f) ns) (fmap f t)- FunBind l ms -> FunBind (f l) (map (fmap f) ms)- PatBind l p mt rhs bs -> PatBind (f l) (fmap f p) (fmap (fmap f) mt) (fmap f rhs) (fmap (fmap f) bs)- ForImp l cc msf s n t -> ForImp (f l) (fmap f cc) (fmap (fmap f) msf) s (fmap f n) (fmap f t)- ForExp l cc s n t -> ForExp (f l) (fmap f cc) s (fmap f n) (fmap f t)- RulePragmaDecl l rs -> RulePragmaDecl (f l) (map (fmap f) rs)- DeprPragmaDecl l nss -> DeprPragmaDecl (f l) (map (wp f) nss)- WarnPragmaDecl l nss -> WarnPragmaDecl (f l) (map (wp f) nss)- InlineSig l b mact qn -> InlineSig (f l) b (fmap (fmap f) mact) (fmap f qn)- SpecInlineSig l b mact qn ts -> SpecInlineSig (f l) b (fmap (fmap f) mact) (fmap f qn) (map (fmap f) ts)- SpecSig l qn ts -> SpecSig (f l) (fmap f qn) (map (fmap f) ts)- InstSig l mcx ih -> InstSig (f l) (fmap (fmap f) mcx) (fmap f ih)- where wp f (ns, s) = (map (fmap f) ns, s)--instance Functor DataOrNew where- fmap f (DataType l) = DataType (f l)- fmap f (NewType l) = NewType (f l)--instance Functor DeclHead where- fmap f (DHead l n tvs) = DHead (f l) (fmap f n) (map (fmap f) tvs)- fmap f (DHInfix l tva n tvb) = DHInfix (f l) (fmap f tva) (fmap f n) (fmap f tvb)- fmap f (DHParen l dh) = DHParen (f l) (fmap f dh)--instance Functor InstHead where- fmap f (IHead l qn ts) = IHead (f l) (fmap f qn) (map (fmap f) ts)- fmap f (IHInfix l ta qn tb) = IHInfix (f l) (fmap f ta) (fmap f qn) (fmap f tb)- fmap f (IHParen l ih) = IHParen (f l) (fmap f ih)--instance Functor Deriving where- fmap f (Deriving l ihs) = Deriving (f l) (map (fmap f) ihs)--instance Functor Binds where- fmap f (BDecls l decls) = BDecls (f l) (map (fmap f) decls)- fmap f (IPBinds l ibs) = IPBinds (f l) (map (fmap f) ibs)--instance Functor IPBind where- fmap f (IPBind l ipn e) = IPBind (f l) (fmap f ipn) (fmap f e)--instance Functor Match where- fmap f (Match l n ps rhs bs) =- Match (f l) (fmap f n) (map (fmap f) ps) (fmap f rhs) (fmap (fmap f) bs)- fmap f (InfixMatch l a n b rhs bs) =- InfixMatch (f l) (fmap f a) (fmap f n) (fmap f b) (fmap f rhs) (fmap (fmap f) bs)--instance Functor QualConDecl where- fmap f (QualConDecl l mtvs mcx cd) = QualConDecl (f l) (fmap (map (fmap f)) mtvs) (fmap (fmap f) mcx) (fmap f cd)--instance Functor ConDecl where- fmap f (ConDecl l n bts) = ConDecl (f l) (fmap f n) (map (fmap f) bts)- fmap f (InfixConDecl l ta n tb) = InfixConDecl (f l) (fmap f ta) (fmap f n) (fmap f tb)- fmap f (RecDecl l n fds) = RecDecl (f l) (fmap f n) (map (fmap f) fds)--instance Functor FieldDecl where- fmap f (FieldDecl l ns t) = FieldDecl (f l) (map (fmap f) ns) (fmap f t)--instance Functor GadtDecl where- fmap f (GadtDecl l n t) = GadtDecl (f l) (fmap f n) (fmap f t)--instance Functor ClassDecl where- fmap f (ClsDecl l d) = ClsDecl (f l) (fmap f d)- fmap f (ClsDataFam l mcx dh mk) = ClsDataFam (f l) (fmap (fmap f) mcx) (fmap f dh) (fmap (fmap f) mk)- fmap f (ClsTyFam l dh mk) = ClsTyFam (f l) (fmap f dh) (fmap (fmap f) mk)- fmap f (ClsTyDef l t1 t2) = ClsTyDef (f l) (fmap f t1) (fmap f t2)--instance Functor InstDecl where- fmap f id = case id of- InsDecl l d -> InsDecl (f l) (fmap f d)- InsType l t1 t2 -> InsType (f l) (fmap f t1) (fmap f t2)- InsData l dn t cds ders- -> InsData (f l) (fmap f dn) (fmap f t) (map (fmap f) cds) (fmap (fmap f) ders)- InsGData l dn t mk gds ders- -> InsGData (f l) (fmap f dn) (fmap f t) (fmap (fmap f) mk) (map (fmap f) gds) (fmap (fmap f) ders)- InsInline l b mact qn -> InsInline (f l) b (fmap (fmap f) mact) (fmap f qn)--instance Functor BangType where- fmap f (BangedTy l t) = BangedTy (f l) (fmap f t)- fmap f (UnBangedTy l t) = UnBangedTy (f l) (fmap f t)- fmap f (UnpackedTy l t) = UnpackedTy (f l) (fmap f t)--instance Functor Rhs where- fmap f (UnGuardedRhs l e) = UnGuardedRhs (f l) (fmap f e)- fmap f (GuardedRhss l grhss) = GuardedRhss (f l) (map (fmap f) grhss)--instance Functor GuardedRhs where- fmap f (GuardedRhs l ss e) = GuardedRhs (f l) (map (fmap f) ss) (fmap f e)--instance Functor Type where- fmap f t = case t of- TyForall l mtvs mcx t -> TyForall (f l) (fmap (map (fmap f)) mtvs) (fmap (fmap f) mcx) (fmap f t)- TyFun l t1 t2 -> TyFun (f l) (fmap f t1) (fmap f t2)- TyTuple l b ts -> TyTuple (f l) b (map (fmap f) ts)- TyList l t -> TyList (f l) (fmap f t)- TyApp l t1 t2 -> TyApp (f l) (fmap f t1) (fmap f t2)- TyVar l n -> TyVar (f l) (fmap f n)- TyCon l qn -> TyCon (f l) (fmap f qn)- TyParen l t -> TyParen (f l) (fmap f t)- TyInfix l ta qn tb -> TyInfix (f l) (fmap f ta) (fmap f qn) (fmap f tb)- TyKind l t k -> TyKind (f l) (fmap f t) (fmap f k)--instance Functor TyVarBind where- fmap f (KindedVar l n k) = KindedVar (f l) (fmap f n) (fmap f k)- fmap f (UnkindedVar l n) = UnkindedVar (f l) (fmap f n)--instance Functor Kind where- fmap f (KindStar l) = KindStar (f l)- fmap f (KindBang l) = KindBang (f l)- fmap f (KindFn l k1 k2) = KindFn (f l) (fmap f k1) (fmap f k2)- fmap f (KindParen l k) = KindParen (f l) (fmap f k)- fmap f (KindVar l n) = KindVar (f l) (fmap f n)--instance Functor FunDep where- fmap f (FunDep l ns1 ns2) = FunDep (f l) (map (fmap f) ns1) (map (fmap f) ns2)--instance Functor Context where- fmap f (CxSingle l asst) = CxSingle (f l) (fmap f asst)- fmap f (CxTuple l assts) = CxTuple (f l) (map (fmap f) assts)- fmap f (CxParen l ctxt) = CxParen (f l) (fmap f ctxt)- fmap f (CxEmpty l) = CxEmpty (f l)--instance Functor Asst where- fmap f asst = case asst of- ClassA l qn ts -> ClassA (f l) (fmap f qn) (map (fmap f) ts)- InfixA l ta qn tb -> InfixA (f l) (fmap f ta) (fmap f qn) (fmap f tb)- IParam l ipn t -> IParam (f l) (fmap f ipn) (fmap f t)- EqualP l t1 t2 -> EqualP (f l) (fmap f t1) (fmap f t2)--instance Functor Literal where- fmap f lit = case lit of- Char l c rw -> Char (f l) c rw- String l s rw -> String (f l) s rw- Int l i rw -> Int (f l) i rw- Frac l r rw -> Frac (f l) r rw- PrimInt l i rw -> PrimInt (f l) i rw- PrimWord l i rw -> PrimWord (f l) i rw- PrimFloat l r rw -> PrimFloat (f l) r rw- PrimDouble l r rw -> PrimDouble (f l) r rw- PrimChar l c rw -> PrimChar (f l) c rw- PrimString l s rw -> PrimString (f l) s rw--instance Functor Exp where- fmap f e = case e of- Var l qn -> Var (f l) (fmap f qn)- IPVar l ipn -> IPVar (f l) (fmap f ipn)- Con l qn -> Con (f l) (fmap f qn)- Lit l lit -> Lit (f l) (fmap f lit)- InfixApp l e1 qop e2 -> InfixApp (f l) (fmap f e1) (fmap f qop) (fmap f e2)- App l e1 e2 -> App (f l) (fmap f e1) (fmap f e2)- NegApp l e -> NegApp (f l) (fmap f e)- Lambda l ps e -> Lambda (f l) (map (fmap f) ps) (fmap f e)- Let l bs e -> Let (f l) (fmap f bs) (fmap f e)- If l ec et ee -> If (f l) (fmap f ec) (fmap f et) (fmap f ee)- Case l e alts -> Case (f l) (fmap f e) (map (fmap f) alts)- Do l ss -> Do (f l) (map (fmap f) ss)- MDo l ss -> MDo (f l) (map (fmap f) ss)- Tuple l es -> Tuple (f l) (map (fmap f) es)- TupleSection l mes -> TupleSection (f l) (map (fmap (fmap f)) mes)- List l es -> List (f l) (map (fmap f) es)- Paren l e -> Paren (f l) (fmap f e)- LeftSection l e qop -> LeftSection (f l) (fmap f e) (fmap f qop)- RightSection l qop e -> RightSection (f l) (fmap f qop) (fmap f e)- RecConstr l qn fups -> RecConstr (f l) (fmap f qn) (map (fmap f) fups)- RecUpdate l e fups -> RecUpdate (f l) (fmap f e) (map (fmap f) fups)- EnumFrom l e -> EnumFrom (f l) (fmap f e)- EnumFromTo l ef et -> EnumFromTo (f l) (fmap f ef) (fmap f et)- EnumFromThen l ef et -> EnumFromThen (f l) (fmap f ef) (fmap f et)- EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) (fmap f ef) (fmap f eth) (fmap f eto)- ListComp l e qss -> ListComp (f l) (fmap f e) (map (fmap f) qss)- ParComp l e qsss -> ParComp (f l) (fmap f e) (map (map (fmap f)) qsss)- ExpTypeSig l e t -> ExpTypeSig (f l) (fmap f e) (fmap f t)- VarQuote l qn -> VarQuote (f l) (fmap f qn)- TypQuote l qn -> TypQuote (f l) (fmap f qn)- BracketExp l br -> BracketExp (f l) (fmap f br)- SpliceExp l sp -> SpliceExp (f l) (fmap f sp)- QuasiQuote l sn se -> QuasiQuote (f l) sn se-- XTag l xn xas me es -> XTag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es)- XETag l xn xas me -> XETag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me)- XPcdata l s -> XPcdata (f l) s- XExpTag l e -> XExpTag (f l) (fmap f e)-- CorePragma l s e -> CorePragma (f l) s (fmap f e)- SCCPragma l s e -> SCCPragma (f l) s (fmap f e)- GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 (fmap f e)-- Proc l p e -> Proc (f l) (fmap f p) (fmap f e)- LeftArrApp l e1 e2 -> LeftArrApp (f l) (fmap f e1) (fmap f e2)- RightArrApp l e1 e2 -> RightArrApp (f l) (fmap f e1) (fmap f e2)- LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) (fmap f e1) (fmap f e2)- RightArrHighApp l e1 e2 -> RightArrHighApp (f l) (fmap f e1) (fmap f e2)--instance Functor XName where- fmap f (XName l s) = XName (f l) s- fmap f (XDomName l sd sn) = XDomName (f l) sd sn--instance Functor XAttr where- fmap f (XAttr l xn e) = XAttr (f l) (fmap f xn) (fmap f e)--instance Functor Bracket where- fmap f (ExpBracket l e) = ExpBracket (f l) (fmap f e)- fmap f (PatBracket l p) = PatBracket (f l) (fmap f p)- fmap f (TypeBracket l t) = TypeBracket (f l) (fmap f t)- fmap f (DeclBracket l ds) = DeclBracket (f l) (map (fmap f) ds)--instance Functor Splice where- fmap f (IdSplice l s) = IdSplice (f l) s- fmap f (ParenSplice l e) = ParenSplice (f l) (fmap f e)--instance Functor Safety where- fmap f (PlayRisky l) = PlayRisky (f l)- fmap f (PlaySafe l b) = PlaySafe (f l) b--instance Functor CallConv where- fmap f (StdCall l) = StdCall (f l)- fmap f (CCall l) = CCall (f l)--instance Functor OptionPragma where- fmap f (LanguagePragma l ns) = LanguagePragma (f l) (map (fmap f) ns)- fmap f (IncludePragma l s) = IncludePragma (f l) s- fmap f (CFilesPragma l s) = CFilesPragma (f l) s- fmap f (OptionsPragma l mt s) = OptionsPragma (f l) mt s--instance Functor Activation where- fmap f (ActiveFrom l k) = ActiveFrom (f l) k- fmap f (ActiveUntil l k) = ActiveUntil (f l) k--instance Functor Rule where- fmap f (Rule l s mact mrvs e1 e2) =- Rule (f l) s (fmap (fmap f) mact) (fmap (map (fmap f)) mrvs) (fmap f e1) (fmap f e2)--instance Functor RuleVar where- fmap f (RuleVar l n) = RuleVar (f l) (fmap f n)- fmap f (TypedRuleVar l n t) = TypedRuleVar (f l) (fmap f n) (fmap f t)--instance Functor WarningText where- fmap f (DeprText l s) = DeprText (f l) s- fmap f (WarnText l s) = WarnText (f l) s--instance Functor Pat where- fmap f p = case p of- PVar l n -> PVar (f l) (fmap f n)- PLit l lit -> PLit (f l) (fmap f lit)- PNeg l p -> PNeg (f l) (fmap f p)- PNPlusK l n k -> PNPlusK (f l) (fmap f n) k- PInfixApp l pa qn pb -> PInfixApp (f l) (fmap f pa) (fmap f qn) (fmap f pb)- PApp l qn ps -> PApp (f l) (fmap f qn) (map (fmap f) ps)- PTuple l ps -> PTuple (f l) (map (fmap f) ps)- PList l ps -> PList (f l) (map (fmap f) ps)- PParen l p -> PParen (f l) (fmap f p)- PRec l qn pfs -> PRec (f l) (fmap f qn) (map (fmap f) pfs)- PAsPat l n p -> PAsPat (f l) (fmap f n) (fmap f p)- PWildCard l -> PWildCard (f l)- PIrrPat l p -> PIrrPat (f l) (fmap f p)- PatTypeSig l p t -> PatTypeSig (f l) (fmap f p) (fmap f t)- PViewPat l e p -> PViewPat (f l) (fmap f e) (fmap f p)- PRPat l rps -> PRPat (f l) (map (fmap f) rps)- PXTag l xn pxas mp ps -> PXTag (f l) (fmap f xn) (map (fmap f) pxas) (fmap (fmap f) mp) (map (fmap f) ps)- PXETag l xn pxas mp -> PXETag (f l) (fmap f xn) (map (fmap f) pxas) (fmap (fmap f) mp)- PXPcdata l s -> PXPcdata (f l) s- PXPatTag l p -> PXPatTag (f l) (fmap f p)- PXRPats l rps -> PXRPats (f l) (map (fmap f) rps)- PExplTypeArg l qn t -> PExplTypeArg (f l) (fmap f qn) (fmap f t)- PQuasiQuote l sn st -> PQuasiQuote (f l) sn st- PBangPat l p -> PBangPat (f l) (fmap f p)--instance Functor PXAttr where- fmap f (PXAttr l xn p) = PXAttr (f l) (fmap f xn) (fmap f p)--instance Functor RPatOp where- fmap f (RPStar l) = RPStar (f l)- fmap f (RPStarG l) = RPStarG (f l)- fmap f (RPPlus l) = RPPlus (f l)- fmap f (RPPlusG l) = RPPlusG (f l)- fmap f (RPOpt l) = RPOpt (f l)- fmap f (RPOptG l) = RPOptG (f l)--instance Functor RPat where- fmap f rp = case rp of- RPOp l rp rop -> RPOp (f l) (fmap f rp) (fmap f rop)- RPEither l rp1 rp2 -> RPEither (f l) (fmap f rp1) (fmap f rp2)- RPSeq l rps -> RPSeq (f l) (map (fmap f) rps)- RPGuard l p ss -> RPGuard (f l) (fmap f p) (map (fmap f) ss)- RPCAs l n rp -> RPCAs (f l) (fmap f n) (fmap f rp)- RPAs l n rp -> RPAs (f l) (fmap f n) (fmap f rp)- RPParen l rp -> RPParen (f l) (fmap f rp)- RPPat l p -> RPPat (f l) (fmap f p)--instance Functor PatField where- fmap f (PFieldPat l qn p) = PFieldPat (f l) (fmap f qn) (fmap f p)- fmap f (PFieldPun l n) = PFieldPun (f l) (fmap f n)- fmap f (PFieldWildcard l) = PFieldWildcard (f l)--instance Functor Stmt where- fmap f (Generator l p e) = Generator (f l) (fmap f p) (fmap f e)- fmap f (Qualifier l e) = Qualifier (f l) (fmap f e)- fmap f (LetStmt l bs) = LetStmt (f l) (fmap f bs)- fmap f (RecStmt l ss) = RecStmt (f l) (map (fmap f) ss)--instance Functor QualStmt where- fmap f (QualStmt l s) = QualStmt (f l) (fmap f s)- fmap f (ThenTrans l e) = ThenTrans (f l) (fmap f e)- fmap f (ThenBy l e1 e2) = ThenBy (f l) (fmap f e1) (fmap f e2)- fmap f (GroupBy l e) = GroupBy (f l) (fmap f e)- fmap f (GroupUsing l e) = GroupUsing (f l) (fmap f e)- fmap f (GroupByUsing l e1 e2) = GroupByUsing (f l) (fmap f e1) (fmap f e2)--instance Functor FieldUpdate where- fmap f (FieldUpdate l qn e) = FieldUpdate (f l) (fmap f qn) (fmap f e)- fmap f (FieldPun l n) = FieldPun (f l) (fmap f n)- fmap f (FieldWildcard l) = FieldWildcard (f l)--instance Functor Alt where- fmap f (Alt l p gs bs) = Alt (f l) (fmap f p) (fmap f gs) (fmap (fmap f) bs)--instance Functor GuardedAlts where- fmap f (UnGuardedAlt l e) = UnGuardedAlt (f l) (fmap f e)- fmap f (GuardedAlts l galts) = GuardedAlts (f l) (map (fmap f) galts)--instance Functor GuardedAlt where- fmap f (GuardedAlt l ss e) = GuardedAlt (f l) (map (fmap f) ss) (fmap f e)---------------------------------------------------------------------------------- Reading annotations--class Functor ast => Annotated ast where- ann :: ast l -> l- amap :: (l -> l) -> ast l -> ast l--instance Annotated ModuleName where- ann (ModuleName l _) = l- amap f (ModuleName l n) = ModuleName (f l) n--instance Annotated SpecialCon where- ann sc = case sc of- UnitCon l -> l- ListCon l -> l- FunCon l -> l- TupleCon l _ _ -> l- Cons l -> l- UnboxedSingleCon l -> l- amap = fmap--instance Annotated QName where- ann qn = case qn of- Qual l mn n -> l- UnQual l n -> l- Special l sc -> l- amap f qn = case qn of- Qual l mn n -> Qual (f l) mn n- UnQual l n -> UnQual (f l) n- Special l sc -> Special (f l) sc--instance Annotated Name where- ann (Ident l s) = l- ann (Symbol l s) = l- amap = fmap--instance Annotated IPName where- ann (IPDup l s) = l- ann (IPLin l s) = l- amap = fmap--instance Annotated QOp where- ann (QVarOp l qn) = l- ann (QConOp l qn) = l- amap f (QVarOp l qn) = QVarOp (f l) qn- amap f (QConOp l qn) = QConOp (f l) qn--instance Annotated Op where- ann (VarOp l n) = l- ann (ConOp l n) = l- amap f (VarOp l n) = VarOp (f l) n- amap f (ConOp l n) = ConOp (f l) n--instance Annotated CName where- ann (VarName l n) = l- ann (ConName l n) = l- amap f (VarName l n) = VarName (f l) n- amap f (ConName l n) = ConName (f l) n--instance Annotated Module where- ann (Module l mmh ops iss dcls) = l- ann (XmlPage l mn os xn xas me es) = l- ann (XmlHybrid l mmh ops iss dcls xn xas me es) = l-- amap f (Module l mmh ops iss dcls) =- Module (f l) mmh ops iss dcls- amap f (XmlPage l mn os xn xas me es) =- XmlPage (f l) mn os xn xas me es- amap f (XmlHybrid l mmh ops iss dcls xn xas me es) =- XmlHybrid (f l) mmh ops iss dcls xn xas me es--instance Annotated ModuleHead where- ann (ModuleHead l n mwt mesl) = l- amap f (ModuleHead l n mwt mesl) = ModuleHead (f l) n mwt mesl--instance Annotated ExportSpecList where- ann (ExportSpecList l ess) = l- amap f (ExportSpecList l ess) = ExportSpecList (f l) ess--instance Annotated ExportSpec where- ann es = case es of- EVar l qn -> l- EAbs l qn -> l- EThingAll l qn -> l- EThingWith l qn cns -> l- EModuleContents l mn -> l- amap f es = case es of- EVar l qn -> EVar (f l) qn- EAbs l qn -> EAbs (f l) qn- EThingAll l qn -> EThingAll (f l) qn- EThingWith l qn cns -> EThingWith (f l) qn cns- EModuleContents l mn -> EModuleContents (f l) mn--instance Annotated ImportDecl where- ann (ImportDecl l mn qual src pkg mmn mis) = l- amap f (ImportDecl l mn qual src pkg mmn mis) =- ImportDecl (f l) mn qual src pkg mmn mis--instance Annotated ImportSpecList where- ann (ImportSpecList l b iss) = l- amap f (ImportSpecList l b iss) = ImportSpecList (f l) b iss--instance Annotated ImportSpec where- ann is = case is of- IVar l n -> l- IAbs l n -> l- IThingAll l n -> l- IThingWith l n cns -> l- amap f is = case is of- IVar l n -> IVar (f l) n- IAbs l n -> IAbs (f l) n- IThingAll l n -> IThingAll (f l) n- IThingWith l n cns -> IThingWith (f l) n cns--instance Annotated Assoc where- ann (AssocNone l) = l- ann (AssocLeft l) = l- ann (AssocRight l) = l- amap = fmap--instance Annotated Deriving where- ann (Deriving l ihs) = l- amap f (Deriving l ihs) = Deriving (f l) ihs--instance Annotated Decl where- ann decl = case decl of- TypeDecl l dh t -> l- TypeFamDecl l dh mk -> l- DataDecl l dn cx dh cds ders -> l- GDataDecl l dn cx dh mk gds ders -> l- DataFamDecl l cx dh mk -> l- TypeInsDecl l t1 t2 -> l- DataInsDecl l dn t cds ders -> l- GDataInsDecl l dn t mk gds ders -> l- ClassDecl l cx dh fds cds -> l- InstDecl l cx ih ids -> l- DerivDecl l cx ih -> l- InfixDecl l a k ops -> l- DefaultDecl l ts -> l- SpliceDecl l sp -> l- TypeSig l ns t -> l- FunBind l ms -> l- PatBind l p mt rhs bs -> l- ForImp l cc msf s n t -> l- ForExp l cc s n t -> l- RulePragmaDecl l rs -> l- DeprPragmaDecl l nss -> l- WarnPragmaDecl l nss -> l- InlineSig l b act qn -> l- SpecSig l qn ts -> l- SpecInlineSig l b act qn ts -> l- InstSig l cx ih -> l- amap f decl = case decl of- TypeDecl l dh t -> TypeDecl (f l) dh t- TypeFamDecl l dh mk -> TypeFamDecl (f l) dh mk- DataDecl l dn mcx dh cds ders ->- DataDecl (f l) dn mcx dh cds ders- GDataDecl l dn mcx dh mk gds ders ->- GDataDecl (f l) dn mcx dh mk gds ders- DataFamDecl l mcx dh mk -> DataFamDecl (f l) mcx dh mk- TypeInsDecl l t1 t2 -> TypeInsDecl (f l) t1 t2- DataInsDecl l dn t cds ders -> DataInsDecl (f l) dn t cds ders- GDataInsDecl l dn t mk gds ders -> GDataInsDecl (f l) dn t mk gds ders- ClassDecl l mcx dh fds cds -> ClassDecl (f l) mcx dh fds cds- InstDecl l mcx ih ids -> InstDecl (f l) mcx ih ids- DerivDecl l mcx ih -> DerivDecl (f l) mcx ih- InfixDecl l a k ops -> InfixDecl (f l) a k ops- DefaultDecl l ts -> DefaultDecl (f l) ts- SpliceDecl l sp -> SpliceDecl (f l) sp- TypeSig l ns t -> TypeSig (f l) ns t- FunBind l ms -> FunBind (f l) ms- PatBind l p mt rhs bs -> PatBind (f l) p mt rhs bs- ForImp l cc msf s n t -> ForImp (f l) cc msf s n t- ForExp l cc s n t -> ForExp (f l) cc s n t- RulePragmaDecl l rs -> RulePragmaDecl (f l) rs- DeprPragmaDecl l nss -> DeprPragmaDecl (f l) nss- WarnPragmaDecl l nss -> WarnPragmaDecl (f l) nss- InlineSig l b act qn -> InlineSig (f l) b act qn- SpecSig l qn ts -> SpecSig (f l) qn ts- SpecInlineSig l b act qn ts -> SpecInlineSig (f l) b act qn ts- InstSig l mcx ih -> InstSig (f l) mcx ih--instance Annotated DataOrNew where- ann (DataType l) = l- ann (NewType l) = l- amap = fmap--instance Annotated DeclHead where- ann (DHead l n tvs) = l- ann (DHInfix l tva n tvb) = l- ann (DHParen l dh) = l- amap f (DHead l n tvs) = DHead (f l) n tvs- amap f (DHInfix l tva n tvb) = DHInfix (f l) tva n tvb- amap f (DHParen l dh) = DHParen (f l) dh--instance Annotated InstHead where- ann (IHead l qn ts) = l- ann (IHInfix l ta qn tb) = l- ann (IHParen l ih) = l- amap f (IHead l qn ts) = IHead (f l) qn ts- amap f (IHInfix l ta qn tb) = IHInfix (f l) ta qn tb- amap f (IHParen l ih) = IHParen (f l) ih--instance Annotated Binds where- ann (BDecls l decls) = l- ann (IPBinds l ibs) = l- amap f (BDecls l decls) = BDecls (f l) decls- amap f (IPBinds l ibs) = IPBinds (f l) ibs--instance Annotated IPBind where- ann (IPBind l ipn e) = l- amap f (IPBind l ipn e) = IPBind (f l) ipn e--instance Annotated Match where- ann (Match l n ps rhs bs) = l- ann (InfixMatch l a n b rhs bs) = l- amap f (Match l n ps rhs bs) = Match (f l) n ps rhs bs- amap f (InfixMatch l a n b rhs bs) = InfixMatch (f l) a n b rhs bs--instance Annotated QualConDecl where- ann (QualConDecl l tvs cx cd) = l- amap f (QualConDecl l tvs cx cd) = QualConDecl (f l) tvs cx cd--instance Annotated ConDecl where- ann (ConDecl l n bts) = l- ann (InfixConDecl l ta n tb) = l- ann (RecDecl l n nsbts) = l- amap f (ConDecl l n bts) = ConDecl (f l) n bts- amap f (InfixConDecl l ta n tb) = InfixConDecl (f l) ta n tb- amap f (RecDecl l n fds) = RecDecl (f l) n fds--instance Annotated FieldDecl where- ann (FieldDecl l ns t) = l- amap f (FieldDecl l ns t) = FieldDecl (f l) ns t--instance Annotated GadtDecl where- ann (GadtDecl l n t) = l- amap f (GadtDecl l n t) = GadtDecl (f l) n t--instance Annotated ClassDecl where- ann (ClsDecl l d) = l- ann (ClsDataFam l cx dh mk) = l- ann (ClsTyFam l dh mk) = l- ann (ClsTyDef l t1 t2) = l- amap f (ClsDecl l d) = ClsDecl (f l) d- amap f (ClsDataFam l mcx dh mk) = ClsDataFam (f l) mcx dh mk- amap f (ClsTyFam l dh mk) = ClsTyFam (f l) dh mk- amap f (ClsTyDef l t1 t2) = ClsTyDef (f l) t1 t2--instance Annotated InstDecl where- ann id = case id of- InsDecl l d -> l- InsType l t1 t2 -> l- InsData l dn t cds ders -> l- InsGData l dn t mk gds ders -> l- InsInline l b act qn -> l- amap f id = case id of- InsDecl l d -> InsDecl (f l) d- InsType l t1 t2 -> InsType (f l) t1 t2- InsData l dn t cds ders -> InsData (f l) dn t cds ders- InsGData l dn t mk gds ders -> InsGData (f l) dn t mk gds ders- InsInline l b act qn -> InsInline (f l) b act qn--instance Annotated BangType where- ann (BangedTy l t) = l- ann (UnBangedTy l t) = l- ann (UnpackedTy l t) = l- amap f (BangedTy l t) = BangedTy (f l) t- amap f (UnBangedTy l t) = UnBangedTy (f l) t- amap f (UnpackedTy l t) = UnpackedTy (f l) t--instance Annotated Rhs where- ann (UnGuardedRhs l e) = l- ann (GuardedRhss l grhss) = l- amap f (UnGuardedRhs l e) = UnGuardedRhs (f l) e- amap f (GuardedRhss l grhss) = GuardedRhss (f l) grhss--instance Annotated GuardedRhs where- ann (GuardedRhs l ss e) = l- amap f (GuardedRhs l ss e) = GuardedRhs (f l) ss e--instance Annotated Type where- ann t = case t of- TyForall l mtvs cx t -> l- TyFun l t1 t2 -> l- TyTuple l b ts -> l- TyList l t -> l- TyApp l t1 t2 -> l- TyVar l n -> l- TyCon l qn -> l- TyParen l t -> l- TyInfix l ta qn tb -> l- TyKind l t k -> l- amap f t = case t of- TyForall l mtvs mcx t -> TyForall (f l) mtvs mcx t- TyFun l t1 t2 -> TyFun (f l) t1 t2- TyTuple l b ts -> TyTuple (f l) b ts- TyList l t -> TyList (f l) t- TyApp l t1 t2 -> TyApp (f l) t1 t2- TyVar l n -> TyVar (f l) n- TyCon l qn -> TyCon (f l) qn- TyParen l t -> TyParen (f l) t- TyInfix l ta qn tb -> TyInfix (f l) ta qn tb- TyKind l t k -> TyKind (f l) t k--instance Annotated TyVarBind where- ann (KindedVar l n k) = l- ann (UnkindedVar l n) = l- amap f (KindedVar l n k) = KindedVar (f l) n k- amap f (UnkindedVar l n) = UnkindedVar (f l) n--instance Annotated Kind where- ann (KindStar l) = l- ann (KindBang l) = l- ann (KindFn l k1 k2) = l- ann (KindParen l k) = l- ann (KindVar l v) = l- amap f (KindStar l) = KindStar (f l)- amap f (KindBang l) = KindBang (f l)- amap f (KindFn l k1 k2) = KindFn (f l) k1 k2- amap f (KindParen l k) = KindParen (f l) k- amap f (KindVar l n) = KindVar (f l) n--instance Annotated FunDep where- ann (FunDep l ns1 ns2) = l- amap f (FunDep l ns1 ns2) = FunDep (f l) ns1 ns2--instance Annotated Context where- ann (CxSingle l asst ) = l- ann (CxTuple l assts) = l- ann (CxParen l ctxt ) = l- ann (CxEmpty l) = l- amap f (CxSingle l asst ) = CxSingle (f l) asst- amap f (CxTuple l assts) = CxTuple (f l) assts- amap f (CxParen l ctxt ) = CxParen (f l) ctxt- amap f (CxEmpty l) = CxEmpty (f l)--instance Annotated Asst where- ann asst = case asst of- ClassA l qn ts -> l- InfixA l ta qn tb -> l- IParam l ipn t -> l- EqualP l t1 t2 -> l- amap f asst = case asst of- ClassA l qn ts -> ClassA (f l) qn ts- InfixA l ta qn tb -> InfixA (f l) ta qn tb- IParam l ipn t -> IParam (f l) ipn t- EqualP l t1 t2 -> EqualP (f l) t1 t2--instance Annotated Literal where- ann lit = case lit of- Char l c rw -> l- String l s rw -> l- Int l i rw -> l- Frac l r rw -> l- PrimInt l i rw -> l- PrimWord l i rw -> l- PrimFloat l r rw -> l- PrimDouble l r rw -> l- PrimChar l c rw -> l- PrimString l s rw -> l- amap = fmap--instance Annotated Exp where- ann e = case e of- Var l qn -> l- IPVar l ipn -> l- Con l qn -> l- Lit l lit -> l- InfixApp l e1 qop e2 -> l- App l e1 e2 -> l- NegApp l e -> l- Lambda l ps e -> l- Let l bs e -> l- If l ec et ee -> l- Case l e alts -> l- Do l ss -> l- MDo l ss -> l- Tuple l es -> l- TupleSection l mes -> l- List l es -> l- Paren l e -> l- LeftSection l e qop -> l- RightSection l qop e -> l- RecConstr l qn fups -> l- RecUpdate l e fups -> l- EnumFrom l e -> l- EnumFromTo l ef et -> l- EnumFromThen l ef et -> l- EnumFromThenTo l ef eth eto -> l- ListComp l e qss -> l- ParComp l e qsss -> l- ExpTypeSig l e t -> l- VarQuote l qn -> l- TypQuote l qn -> l- BracketExp l br -> l- SpliceExp l sp -> l- QuasiQuote l sn se -> l-- XTag l xn xas me es -> l- XETag l xn xas me -> l- XPcdata l s -> l- XExpTag l e -> l-- CorePragma l s e -> l- SCCPragma l s e -> l- GenPragma l s n12 n34 e -> l-- Proc l p e -> l- LeftArrApp l e1 e2 -> l- RightArrApp l e1 e2 -> l- LeftArrHighApp l e1 e2 -> l- RightArrHighApp l e1 e2 -> l-- amap f e = case e of- Var l qn -> Var (f l) qn- IPVar l ipn -> IPVar (f l) ipn- Con l qn -> Con (f l) qn- Lit l lit -> Lit (f l) lit- InfixApp l e1 qop e2 -> InfixApp (f l) e1 qop e2- App l e1 e2 -> App (f l) e1 e2- NegApp l e -> NegApp (f l) e- Lambda l ps e -> Lambda (f l) ps e- Let l bs e -> Let (f l) bs e- If l ec et ee -> If (f l) ec et ee- Case l e alts -> Case (f l) e alts- Do l ss -> Do (f l) ss- MDo l ss -> MDo (f l) ss- Tuple l es -> Tuple (f l) es- TupleSection l mes -> TupleSection (f l) mes- List l es -> List (f l) es- Paren l e -> Paren (f l) e- LeftSection l e qop -> LeftSection (f l) e qop- RightSection l qop e -> RightSection (f l) qop e- RecConstr l qn fups -> RecConstr (f l) qn fups- RecUpdate l e fups -> RecUpdate (f l) e fups- EnumFrom l e -> EnumFrom (f l) e- EnumFromTo l ef et -> EnumFromTo (f l) ef et- EnumFromThen l ef et -> EnumFromThen (f l) ef et- EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) ef eth eto- ListComp l e qss -> ListComp (f l) e qss- ParComp l e qsss -> ParComp (f l) e qsss- ExpTypeSig l e t -> ExpTypeSig (f l) e t- VarQuote l qn -> VarQuote (f l) qn- TypQuote l qn -> TypQuote (f l) qn- BracketExp l br -> BracketExp (f l) br- SpliceExp l sp -> SpliceExp (f l) sp- QuasiQuote l sn se -> QuasiQuote (f l) sn se-- XTag l xn xas me es -> XTag (f l) xn xas me es- XETag l xn xas me -> XETag (f l) xn xas me- XPcdata l s -> XPcdata (f l) s- XExpTag l e -> XExpTag (f l) e-- CorePragma l s e -> CorePragma (f l) s e- SCCPragma l s e -> SCCPragma (f l) s e- GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 e-- Proc l p e -> Proc (f l) p e- LeftArrApp l e1 e2 -> LeftArrApp (f l) e1 e2- RightArrApp l e1 e2 -> RightArrApp (f l) e1 e2- LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) e1 e2- RightArrHighApp l e1 e2 -> RightArrHighApp (f l) e1 e2---instance Annotated XName where- ann (XName l s) = l- ann (XDomName l sd sn) = l- amap = fmap--instance Annotated XAttr where- ann (XAttr l xn e) = l- amap f (XAttr l xn e) = XAttr (f l) xn e--instance Annotated Bracket where- ann (ExpBracket l e) = l- ann (PatBracket l p) = l- ann (TypeBracket l t) = l- ann (DeclBracket l ds) = l- amap f (ExpBracket l e) = ExpBracket (f l) e- amap f (PatBracket l p) = PatBracket (f l) p- amap f (TypeBracket l t) = TypeBracket (f l) t- amap f (DeclBracket l ds) = DeclBracket (f l) ds--instance Annotated Splice where- ann (IdSplice l s) = l- ann (ParenSplice l e) = l- amap f (IdSplice l s) = IdSplice (f l) s- amap f (ParenSplice l e) = ParenSplice (f l) e--instance Annotated Safety where- ann (PlayRisky l) = l- ann (PlaySafe l b) = l- amap = fmap--instance Annotated CallConv where- ann (StdCall l) = l- ann (CCall l) = l- amap = fmap--instance Annotated OptionPragma where- ann (LanguagePragma l ns) = l- ann (IncludePragma l s) = l- ann (CFilesPragma l s) = l- ann (OptionsPragma l mt s) = l- amap f (LanguagePragma l ns) = LanguagePragma (f l) ns- amap f p = fmap f p--instance Annotated Activation where- ann (ActiveFrom l k) = l- ann (ActiveUntil l k) = l- amap = fmap--instance Annotated Rule where- ann (Rule l s act mrvs e1 e2) = l- amap f (Rule l s act mrvs e1 e2) = Rule (f l) s act mrvs e1 e2--instance Annotated RuleVar where- ann (RuleVar l n) = l- ann (TypedRuleVar l n t) = l- amap f (RuleVar l n) = RuleVar (f l) n- amap f (TypedRuleVar l n t) = TypedRuleVar (f l) n t--instance Annotated WarningText where- ann (DeprText l s) = l- ann (WarnText l s) = l- amap = fmap--instance Annotated Pat where- ann p = case p of- PVar l n -> l- PLit l lit -> l- PNeg l p -> l- PNPlusK l n k -> l- PInfixApp l pa qn pb -> l- PApp l qn ps -> l- PTuple l ps -> l- PList l ps -> l- PParen l p -> l- PRec l qn pfs -> l- PAsPat l n p -> l- PWildCard l -> l- PIrrPat l p -> l- PatTypeSig l p t -> l- PViewPat l e p -> l- PRPat l rps -> l- PXTag l xn pxas mp ps -> l- PXETag l xn pxas mp -> l- PXPcdata l s -> l- PXPatTag l p -> l- PXRPats l rps -> l- PExplTypeArg l qn t -> l- PQuasiQuote l sn st -> l- PBangPat l p -> l- amap f p = case p of- PVar l n -> PVar (f l) n- PLit l lit -> PLit (f l) lit- PNeg l p -> PNeg (f l) p- PNPlusK l n k -> PNPlusK (f l) n k- PInfixApp l pa qn pb -> PInfixApp (f l) pa qn pb- PApp l qn ps -> PApp (f l) qn ps- PTuple l ps -> PTuple (f l) ps- PList l ps -> PList (f l) ps- PParen l p -> PParen (f l) p- PRec l qn pfs -> PRec (f l) qn pfs- PAsPat l n p -> PAsPat (f l) n p- PWildCard l -> PWildCard (f l)- PIrrPat l p -> PIrrPat (f l) p- PatTypeSig l p t -> PatTypeSig (f l) p t- PViewPat l e p -> PViewPat (f l) e p- PRPat l rps -> PRPat (f l) rps- PXTag l xn pxas mp ps -> PXTag (f l) xn pxas mp ps- PXETag l xn pxas mp -> PXETag (f l) xn pxas mp- PXPcdata l s -> PXPcdata (f l) s- PXPatTag l p -> PXPatTag (f l) p- PXRPats l rps -> PXRPats (f l) rps- PExplTypeArg l qn t -> PExplTypeArg (f l) qn t- PQuasiQuote l sn st -> PQuasiQuote (f l) sn st- PBangPat l p -> PBangPat (f l) p--instance Annotated PXAttr where- ann (PXAttr l xn p) = l- amap f (PXAttr l xn p) = PXAttr (f l) xn p--instance Annotated RPatOp where- ann (RPStar l) = l- ann (RPStarG l) = l- ann (RPPlus l) = l- ann (RPPlusG l) = l- ann (RPOpt l) = l- ann (RPOptG l) = l- amap = fmap--instance Annotated RPat where- ann rp = case rp of- RPOp l rp rop -> l- RPEither l rp1 rp2 -> l- RPSeq l rps -> l- RPGuard l p ss -> l- RPCAs l n rp -> l- RPAs l n rp -> l- RPParen l rp -> l- RPPat l p -> l- amap f rp = case rp of- RPOp l rp rop -> RPOp (f l) rp rop- RPEither l rp1 rp2 -> RPEither (f l) rp1 rp2- RPSeq l rps -> RPSeq (f l) rps- RPGuard l p ss -> RPGuard (f l) p ss- RPCAs l n rp -> RPCAs (f l) n rp- RPAs l n rp -> RPAs (f l) n rp- RPParen l rp -> RPParen (f l) rp- RPPat l p -> RPPat (f l) p--instance Annotated PatField where- ann (PFieldPat l qn p) = l- ann (PFieldPun l n) = l- ann (PFieldWildcard l) = l- amap f (PFieldPat l qn p) = PFieldPat (f l) qn p- amap f (PFieldPun l n) = PFieldPun (f l) n- amap f (PFieldWildcard l) = PFieldWildcard (f l)--instance Annotated Stmt where- ann (Generator l p e) = l- ann (Qualifier l e) = l- ann (LetStmt l bs) = l- ann (RecStmt l ss) = l- amap f (Generator l p e) = Generator (f l) p e- amap f (Qualifier l e) = Qualifier (f l) e- amap f (LetStmt l bs) = LetStmt (f l) bs- amap f (RecStmt l ss) = RecStmt (f l) ss--instance Annotated QualStmt where- ann (QualStmt l s) = l- ann (ThenTrans l e) = l- ann (ThenBy l e1 e2) = l- ann (GroupBy l e) = l- ann (GroupUsing l e) = l- ann (GroupByUsing l e1 e2) = l- amap f (QualStmt l s) = QualStmt (f l) s- amap f (ThenTrans l e) = ThenTrans (f l) e- amap f (ThenBy l e1 e2) = ThenBy (f l) e1 e2- amap f (GroupBy l e) = GroupBy (f l) e- amap f (GroupUsing l e) = GroupUsing (f l) e- amap f (GroupByUsing l e1 e2) = GroupByUsing (f l) e1 e2--instance Annotated FieldUpdate where- ann (FieldUpdate l qn e) = l- ann (FieldPun l n) = l- ann (FieldWildcard l) = l- amap f (FieldUpdate l qn e) = FieldUpdate (f l) qn e- amap f (FieldPun l n) = FieldPun (f l) n- amap f (FieldWildcard l) = FieldWildcard (f l)--instance Annotated Alt where- ann (Alt l p gs bs) = l- amap f (Alt l p gs bs) = Alt (f l) p gs bs--instance Annotated GuardedAlts where- ann (UnGuardedAlt l e) = l- ann (GuardedAlts l galts) = l- amap f (UnGuardedAlt l e) = UnGuardedAlt (f l) e- amap f (GuardedAlts l galts) = GuardedAlts (f l) galts--instance Annotated GuardedAlt where- ann (GuardedAlt l ss e) = l- amap f (GuardedAlt l ss e) = GuardedAlt (f l) ss e
@@ -1,3 +1,5 @@+{-# LANGUAGE Safe #-}+ ----------------------------------------------------------------------------- -- | -- Module : Language.Haskell.Exts.Build@@ -20,54 +22,54 @@ module Language.Haskell.Exts.Build ( -- * Syntax building functions- name, -- :: String -> Name- sym, -- :: String -> Name- var, -- :: Name -> Exp- op, -- :: Name -> QOp- qvar, -- :: Module -> Name -> Exp- pvar, -- :: Name -> Pat- app, -- :: Exp -> Exp -> Exp- infixApp, -- :: Exp -> QOp -> Exp -> Exp- appFun, -- :: Exp -> [Exp] -> Exp- pApp, -- :: Name -> [Pat] -> Pat- tuple, -- :: [Exp] -> Exp- pTuple, -- :: [Pat] -> Pat- varTuple, -- :: [Name] -> Exp- pvarTuple, -- :: [Name] -> Pat- function, -- :: String -> Exp- strE, -- :: String -> Exp- charE, -- :: Char -> Exp- intE, -- :: Integer -> Exp- strP, -- :: String -> Pat- charP, -- :: Char -> Pat- intP, -- :: Integer -> Pat- doE, -- :: [Stmt] -> Exp- lamE, -- :: SrcLoc -> [Pat] -> Exp -> Exp- letE, -- :: [Decl] -> Exp -> Exp- caseE, -- :: Exp -> [Alt] -> Exp- alt, -- :: SrcLoc -> Pat -> Exp -> Alt- altGW, -- :: SrcLoc -> Pat -> [Stmt] -> Exp -> Binds -> Alt- listE, -- :: [Exp] -> Exp- eList, -- :: Exp- peList, -- :: Pat- paren, -- :: Exp -> Exp- pParen, -- :: Pat -> Pat- qualStmt, -- :: Exp -> Stmt- genStmt, -- :: SrcLoc -> Pat -> Exp -> Stmt+ name, -- :: String -> Name ()+ sym, -- :: String -> Name ()+ var, -- :: Name () -> Exp ()+ op, -- :: Name () -> QOp+ qvar, -- :: Module -> Name () -> Exp ()+ pvar, -- :: Name () -> Pat ()+ app, -- :: Exp () -> Exp () -> Exp ()+ infixApp, -- :: Exp () -> QOp -> Exp () -> Exp ()+ appFun, -- :: Exp () -> [Exp] -> Exp ()+ pApp, -- :: Name () -> [Pat] -> Pat ()+ tuple, -- :: [Exp] -> Exp ()+ pTuple, -- :: [Pat] -> Pat ()+ varTuple, -- :: [Name] -> Exp ()+ pvarTuple, -- :: [Name] -> Pat ()+ function, -- :: String -> Exp ()+ strE, -- :: String -> Exp ()+ charE, -- :: Char -> Exp ()+ intE, -- :: Integer -> Exp ()+ strP, -- :: String -> Pat ()+ charP, -- :: Char -> Pat ()+ intP, -- :: Integer -> Pat ()+ doE, -- :: [Stmt] -> Exp ()+ lamE, -- :: SrcLoc -> [Pat] -> Exp () -> Exp ()+ letE, -- :: [Decl] -> Exp () -> Exp ()+ caseE, -- :: Exp () -> [Alt] -> Exp ()+ alt, -- :: SrcLoc -> Pat () -> Exp () -> Alt+ altGW, -- :: SrcLoc -> Pat () -> [Stmt] -> Exp () -> Binds -> Alt+ listE, -- :: [Exp] -> Exp ()+ eList, -- :: Exp ()+ peList, -- :: Pat ()+ paren, -- :: Exp () -> Exp ()+ pParen, -- :: Pat () -> Pat ()+ qualStmt, -- :: Exp () -> Stmt+ genStmt, -- :: SrcLoc -> Pat () -> Exp () -> Stmt letStmt, -- :: [Decl] -> Stmt binds, -- :: [Decl] -> Binds noBinds, -- :: Binds- wildcard, -- :: Pat+ wildcard, -- :: Pat () genNames, -- :: String -> Int -> [Name] -- * More advanced building- sfun, -- :: SrcLoc -> Name -> [Name] -> Rhs -> Binds -> Decl- simpleFun, -- :: SrcLoc -> Name -> Name -> Exp -> Decl- patBind, -- :: SrcLoc -> Pat -> Exp -> Decl- patBindWhere, -- :: SrcLoc -> Pat -> Exp -> [Decl] -> Decl- nameBind, -- :: SrcLoc -> Name -> Exp -> Decl- metaFunction, -- :: String -> [Exp] -> Exp- metaConPat -- :: String -> [Pat] -> Pat+ sfun, -- :: SrcLoc -> Name () -> [Name] -> Rhs -> Binds -> Decl ()+ simpleFun, -- :: SrcLoc -> Name () -> Name () -> Exp () -> Decl ()+ patBind, -- :: SrcLoc -> Pat () -> Exp () -> Decl ()+ patBindWhere, -- :: SrcLoc -> Pat () -> Exp () -> [Decl] -> Decl ()+ nameBind, -- :: SrcLoc -> Name () -> Exp () -> Decl ()+ metaFunction, -- :: String -> [Exp] -> Exp ()+ metaConPat -- :: String -> [Pat] -> Pat () ) where import Language.Haskell.Exts.Syntax@@ -77,214 +79,216 @@ -- | An identifier with the given string as its name. -- The string should be a valid Haskell identifier.-name :: String -> Name-name = Ident+name :: String -> Name ()+name = Ident () -- | A symbol identifier. The string should be a valid -- Haskell symbol identifier.-sym :: String -> Name-sym = Symbol+sym :: String -> Name ()+sym = Symbol () -- | A local variable as expression.-var :: Name -> Exp-var = Var . UnQual+var :: Name () -> Exp ()+var = Var () . UnQual () -- | Use the given identifier as an operator.-op :: Name -> QOp-op = QVarOp . UnQual+op :: Name () -> QOp ()+op = QVarOp () . UnQual () -- | A qualified variable as expression.-qvar :: ModuleName -> Name -> Exp-qvar m n = Var $ Qual m n+qvar :: ModuleName () -> Name () -> Exp ()+qvar m n = Var () $ Qual () m n -- | A pattern variable.-pvar :: Name -> Pat-pvar = PVar+pvar :: Name () -> Pat ()+pvar = PVar () -- | Application of expressions by juxtaposition.-app :: Exp -> Exp -> Exp-app = App+app :: Exp () -> Exp () -> Exp ()+app = App () -- | Apply an operator infix.-infixApp :: Exp -> QOp -> Exp -> Exp-infixApp = InfixApp+infixApp :: Exp () -> QOp () -> Exp () -> Exp ()+infixApp = InfixApp () -- | Apply a function to a list of arguments.-appFun :: Exp -> [Exp] -> Exp+appFun :: Exp () -> [Exp ()] -> Exp () appFun f [] = f appFun f (a:as) = appFun (app f a) as -- | A constructor pattern, with argument patterns.-pApp :: Name -> [Pat] -> Pat-pApp n ps = PApp (UnQual n) ps+pApp :: Name () -> [Pat ()] -> Pat ()+pApp n ps = PApp () (UnQual () n) ps -- | A tuple expression.-tuple :: [Exp] -> Exp-tuple = Tuple+tuple :: [Exp ()] -> Exp ()+tuple = Tuple () Boxed -- | A tuple pattern.-pTuple :: [Pat] -> Pat-pTuple = PTuple+pTuple :: [Pat ()] -> Pat ()+pTuple = PTuple () Boxed -- | A tuple expression consisting of variables only.-varTuple :: [Name] -> Exp+varTuple :: [Name ()] -> Exp () varTuple ns = tuple $ map var ns -- | A tuple pattern consisting of variables only.-pvarTuple :: [Name] -> Pat+pvarTuple :: [Name ()] -> Pat () pvarTuple ns = pTuple $ map pvar ns -- | A function with a given name.-function :: String -> Exp-function = var . Ident+function :: String -> Exp ()+function = var . Ident () -- | A literal string expression.-strE :: String -> Exp-strE = Lit . String+strE :: String -> Exp ()+strE s = Lit () (String () s s) -- | A literal character expression.-charE :: Char -> Exp-charE = Lit . Char+charE :: Char -> Exp ()+charE c = Lit () (Char () c [c]) -- | A literal integer expression.-intE :: Integer -> Exp-intE = Lit . Int+intE :: Integer -> Exp ()+intE n = Lit () (Int () n (show n)) -- | A literal string pattern.-strP :: String -> Pat-strP = PLit . String+strP :: String -> Pat ()+strP s = PLit () (Signless ()) (String () s s) -- | A literal character pattern.-charP :: Char -> Pat-charP = PLit . Char+charP :: Char -> Pat ()+charP x = PLit () (Signless ()) (Char () x [x]) -- | A literal integer pattern.-intP :: Integer -> Pat-intP = PLit . Int+intP :: Integer -> Pat ()+intP x = PLit ()+ (if x >= 0 then Signless () else Negative ())+ (Int () (abs x) (show x)) -- | A do block formed by the given statements. -- The last statement in the list should be -- a 'Qualifier' expression.-doE :: [Stmt] -> Exp-doE = Do+doE :: [Stmt ()] -> Exp ()+doE = Do () -- | Lambda abstraction, given a list of argument -- patterns and an expression body.-lamE :: SrcLoc -> [Pat] -> Exp -> Exp-lamE = Lambda+lamE :: [Pat ()] -> Exp () -> Exp ()+lamE = Lambda () -- | A @let@ ... @in@ block.-letE :: [Decl] -> Exp -> Exp-letE ds e = Let (binds ds) e+letE :: [Decl ()] -> Exp () -> Exp ()+letE ds e = Let () (binds ds) e -- | A @case@ expression.-caseE :: Exp -> [Alt] -> Exp-caseE = Case+caseE :: Exp () -> [Alt ()] -> Exp ()+caseE = Case () -- | An unguarded alternative in a @case@ expression.-alt :: SrcLoc -> Pat -> Exp -> Alt-alt s p e = Alt s p (unGAlt e) noBinds+alt :: Pat () -> Exp () -> Alt ()+alt p e = Alt () p (unGAlt e) noBinds -- | An alternative with a single guard in a @case@ expression.-altGW :: SrcLoc -> Pat -> [Stmt] -> Exp -> Binds -> Alt-altGW s p gs e w = Alt s p (gAlt s gs e) w+altGW :: Pat () -> [Stmt ()] -> Exp () -> Binds () -> Alt ()+altGW p gs e w = Alt () p (gAlt gs e) (Just w) -- | An unguarded righthand side of a @case@ alternative.-unGAlt :: Exp -> GuardedAlts-unGAlt = UnGuardedAlt+unGAlt :: Exp () -> Rhs ()+unGAlt = UnGuardedRhs () -- | An list of guarded righthand sides for a @case@ alternative.-gAlts :: SrcLoc -> [([Stmt],Exp)] -> GuardedAlts-gAlts s as = GuardedAlts $ map (\(gs,e) -> GuardedAlt s gs e) as+gAlts :: [([Stmt ()],Exp ())] -> Rhs ()+gAlts as = GuardedRhss () $ map (\(gs,e) -> GuardedRhs () gs e) as -- | A single guarded righthand side for a @case@ alternative.-gAlt :: SrcLoc -> [Stmt] -> Exp -> GuardedAlts-gAlt s gs e = gAlts s [(gs,e)]+gAlt :: [Stmt ()] -> Exp () -> Rhs ()+gAlt gs e = gAlts [(gs,e)] -- | A list expression.-listE :: [Exp] -> Exp-listE = List+listE :: [Exp ()] -> Exp ()+listE = List () -- | The empty list expression.-eList :: Exp-eList = List []+eList :: Exp ()+eList = List () [] -- | The empty list pattern.-peList :: Pat-peList = PList []+peList :: Pat ()+peList = PList () [] -- | Put parentheses around an expression.-paren :: Exp -> Exp-paren = Paren+paren :: Exp () -> Exp ()+paren = Paren () -- | Put parentheses around a pattern.-pParen :: Pat -> Pat-pParen = PParen+pParen :: Pat () -> Pat ()+pParen = PParen () -- | A qualifier expression statement.-qualStmt :: Exp -> Stmt-qualStmt = Qualifier+qualStmt :: Exp () -> Stmt ()+qualStmt = Qualifier () -- | A generator statement: /pat/ @<-@ /exp/-genStmt :: SrcLoc -> Pat -> Exp -> Stmt-genStmt = Generator+genStmt :: Pat () -> Exp () -> Stmt ()+genStmt = Generator () -- | A @let@ binding group as a statement.-letStmt :: [Decl] -> Stmt-letStmt ds = LetStmt $ binds ds+letStmt :: [Decl ()] -> Stmt ()+letStmt ds = LetStmt () $ binds ds -- | Hoist a set of declarations to a binding group.-binds :: [Decl] -> Binds-binds = BDecls+binds :: [Decl ()] -> Binds ()+binds = BDecls () -- | An empty binding group.-noBinds :: Binds-noBinds = binds []+noBinds :: Maybe (Binds ())+noBinds = Nothing -- | The wildcard pattern: @_@-wildcard :: Pat-wildcard = PWildCard+wildcard :: Pat ()+wildcard = PWildCard () -- | Generate k names by appending numbers 1 through k to a given string.-genNames :: String -> Int -> [Name]-genNames s k = [ Ident $ s ++ show i | i <- [1..k] ]+genNames :: String -> Int -> [Name ()]+genNames s k = [ Ident () $ s ++ show i | i <- [1..k] ] ------------------------------------------------------------------------------- -- Some more specialised help functions -- | A function with a single clause-sfun :: SrcLoc -> Name -> [Name] -> Rhs -> Binds -> Decl-sfun s f pvs rhs bs = FunBind [Match s f (map pvar pvs) Nothing rhs bs]+sfun :: Name () -> [Name ()] -> (Rhs ()) -> Maybe (Binds ()) -> Decl ()+sfun f pvs rhs bs = FunBind () [Match () f (map pvar pvs) rhs bs] -- | A function with a single clause, a single argument, no guards -- and no where declarations-simpleFun :: SrcLoc -> Name -> Name -> Exp -> Decl-simpleFun s f a e = let rhs = UnGuardedRhs e- in sfun s f [a] rhs noBinds+simpleFun :: Name () -> Name () -> Exp () -> Decl ()+simpleFun f a e = let rhs = UnGuardedRhs () e+ in sfun f [a] rhs noBinds -- | A pattern bind where the pattern is a variable, and where -- there are no guards and no 'where' clause.-patBind :: SrcLoc -> Pat -> Exp -> Decl-patBind s p e = let rhs = UnGuardedRhs e- in PatBind s p Nothing rhs noBinds+patBind :: Pat () -> Exp () -> Decl ()+patBind p e = let rhs = UnGuardedRhs () e+ in PatBind () p rhs noBinds -- | A pattern bind where the pattern is a variable, and where -- there are no guards, but with a 'where' clause.-patBindWhere :: SrcLoc -> Pat -> Exp -> [Decl] -> Decl-patBindWhere s p e ds = let rhs = UnGuardedRhs e- in PatBind s p Nothing rhs (binds ds)+patBindWhere :: Pat () -> Exp () -> [Decl ()] -> Decl ()+patBindWhere p e ds = let rhs = UnGuardedRhs () e+ in PatBind () p rhs (if null ds then Nothing else Just (binds ds)) -- | Bind an identifier to an expression.-nameBind :: SrcLoc -> Name -> Exp -> Decl-nameBind s n e = patBind s (pvar n) e+nameBind :: Name () -> Exp () -> Decl ()+nameBind n e = patBind (pvar n) e -- | Apply function of a given name to a list of arguments.-metaFunction :: String -> [Exp] -> Exp-metaFunction s es = mf s (reverse es)+metaFunction :: String -> [Exp ()] -> Exp ()+metaFunction s' es' = mf s' (reverse es') where mf s [] = var $ name s mf s (e:es) = app (mf s es) e -- | Apply a constructor of a given name to a list of pattern -- arguments, forming a constructor pattern.-metaConPat :: String -> [Pat] -> Pat+metaConPat :: String -> [Pat ()] -> Pat () metaConPat s ps = pApp (name s) ps
@@ -1,19 +1,189 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-} -module Language.Haskell.Exts.Comments where - -import Language.Haskell.Exts.SrcLoc - -#ifdef __GLASGOW_HASKELL__ -#ifdef BASE4 -import Data.Data -#else -import Data.Generics (Data(..),Typeable(..)) -#endif -#endif - -data Comment = Comment Bool SrcSpan String -#ifdef __GLASGOW_HASKELL__ - deriving (Eq,Show,Typeable,Data) -#else - deriving (Eq,Show) -#endif +{-# LANGUAGE DeriveDataTypeable, Safe #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Comments+-- Copyright : (c) JP Moresmau 2015+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : experimental+-- Portability : portable+--+-- This module processes comments along with an annotated AST,+-- to be able to associate Haddock comments with the actual item+-- they refer to.+--+-- Example:+--+-- @+-- let+-- parse1Result :: ParseResult (Module SrcSpanInfo,[Comment])+-- parse1Result =+-- parseFileContentsWithComments+-- (defaultParseMode { parseFilename = file })+-- contents+-- withC :: ParseResult (Module (SrcSpanInfo,[Comment]))+-- withC = case parse1Result of+-- ParseOk res -> ParseOk $ associateHaddock res+-- ParseFailed sloc msg -> ParseFailed sloc msg+-- @+--+-- In this code sample, parse1Result is what you get when you parse a file:+-- a 'Module' annotated wth 'SrcSpanInfo', and a list of comments+-- After passing the result to 'associateHaddock', you get a 'Module'+-- annotated with both a 'SrcSpanInfo' and the list of 'Comment' related to the+-- specific AST node.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.Comments+ ( associateHaddock+ , Comment(..), UnknownPragma(..)+ ) where++import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.SrcLoc++import Data.Char (isSpace)+import Data.Traversable+import Data.Data+++-- | A Haskell comment. The 'Bool' is 'True' if the comment is multi-line, i.e. @{- -}@.+data Comment = Comment Bool SrcSpan String+ deriving (Eq,Show,Typeable,Data)++-- | An unknown pragma.+data UnknownPragma = UnknownPragma SrcSpan String+ deriving (Eq,Show,Typeable,Data)+++-- | Associates an AST with Source Span Information+-- with relevant Haddock comments+associateHaddock+ ::(Annotated ast,Traversable ast)+ => (ast SrcSpanInfo,[Comment])+ -> ast (SrcSpanInfo,[Comment])+associateHaddock (ast,[]) = fmap (\src->(src,[])) ast+associateHaddock (ast,comments) =+ let+ (ca,assocs1) = mapAccumL associate1 (newAccumulator comments) ast+ in snd $ mapAccumL merge (lastPost ca) assocs1+++-- | Merge existing association with post comment associations+merge+ :: [(SrcSpanInfo,[Comment])]+ -> (SrcSpanInfo,[Comment])+ -> ([(SrcSpanInfo,[Comment])], (SrcSpanInfo,[Comment]))+merge [] ret = ([],ret)+merge (x:xs) (src,cmts) =+ if fst x == src+ then (xs,(src,cmts ++ snd x))+ else (x:xs,(src,cmts))+++-- | Ensure that if file ends with comment we process it+lastPost :: CommentAccumulator -> [(SrcSpanInfo, [Comment])]+lastPost (CommentAccumulator (Post cmt : rest) past assocs) =+ let (toMerge, _) = span isNone rest+ psrc = matchPreviousSrc past+ in (assocs ++ [(psrc, cmt : map hcComment toMerge)])+lastPost (CommentAccumulator _ _ assocs) = assocs+++-- | Accumulate comments mappings, either directly with the source+-- or in another association list for later processing+associate1+ :: CommentAccumulator+ -> SrcSpanInfo+ -> (CommentAccumulator,(SrcSpanInfo,[Comment]))+associate1 ca@(CommentAccumulator [] _ _) src = (ca,(src,[]))+associate1 (CommentAccumulator (hc@(Pre cmt):rest) _ assocs) src =+ if isBefore hc src+ then+ let (toMerge,next) = getToMerge src rest+ newAssoc = (src,cmt : map hcComment toMerge)+ in (CommentAccumulator next [] assocs,newAssoc)+ else (CommentAccumulator (hc:rest) [] assocs,(src,[]))+associate1 (CommentAccumulator (hc@(Post cmt):rest) past assocs) src =+ if isBefore hc src+ then+ let (toMerge,next) = getToMerge src rest+ newAssocs =+ if null past+ then assocs+ else assocs++[(matchPreviousSrc past,cmt : map hcComment toMerge)]+ in associate1 (CommentAccumulator next [] newAssocs) src+ else (CommentAccumulator (hc:rest) (src:past) assocs,(src,[]))+associate1 (CommentAccumulator (_:rest) past assocs) src =+ (CommentAccumulator rest (src:past) assocs,(src,[]))+++-- | The comment accumulator+data CommentAccumulator = CommentAccumulator+ [HaddockComment] -- The Haddock comments to process+ [SrcSpanInfo] -- The past src infos to resolve post comments+ [(SrcSpanInfo,[Comment])] -- The additional associations between src and comments+++-- | Create a new accumulator+newAccumulator :: [Comment] -> CommentAccumulator+newAccumulator comments = CommentAccumulator (commentsToHaddock comments) [] []++-- | Get comments to merge+getToMerge+ :: SrcSpanInfo -- ^ Stop before src+ -> [HaddockComment] -- ^ All remaining comments+ -> ([HaddockComment],[HaddockComment]) -- ^ Comments to merge, left overs+getToMerge src = span (\hc-> isNone hc && isBefore hc src)+++-- | Get the biggest src that ends where the first one does+matchPreviousSrc :: [SrcSpanInfo] -> SrcSpanInfo+matchPreviousSrc [] =+ error "Language.Haskell.Exts.Annotated.Comments.matchPreviousSrc: empty list"+matchPreviousSrc srcs =+ let end = srcSpanEnd $ srcInfoSpan $ head srcs+ in last $ filter ((end ==) . srcSpanEnd . srcInfoSpan) srcs++-- | Is a Haddock comment before a given location+isBefore :: HaddockComment -> SrcSpanInfo -> Bool+isBefore hc src=+ let+ (Comment _ csrc _) = hcComment hc+ in csrc < srcInfoSpan src++-- | Represents a Haddock Comment+data HaddockComment =+ -- | Comment before declaration+ Pre+ {+ hcComment::Comment+ }+ -- | Comment after declaration+ | Post {+ hcComment::Comment+ }+ -- | Non Haddock comment+ | None {+ hcComment::Comment+ }++-- | Is a comment not haddock?+isNone :: HaddockComment -> Bool+isNone (None _) = True+isNone _ = False+++-- | Comments to Haddock Comments+commentsToHaddock :: [Comment] -> [HaddockComment]+commentsToHaddock = map commentToHaddock++-- | Comment to Haddock Comment+commentToHaddock :: Comment -> HaddockComment+commentToHaddock c@(Comment _ _ txt) =+ case dropWhile isSpace txt of+ ('|':_) -> Pre c+ ('^':_) -> Post c+ _ -> None c
@@ -0,0 +1,2219 @@+{-# LANGUAGE CPP, DeriveFunctor, Safe #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Annotated.ExactPrint+-- Copyright : (c) Niklas Broberg 2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Exact-printer for Haskell abstract syntax. The input is a (semi-concrete)+-- abstract syntax tree, annotated with exact source information to enable+-- printing the tree exactly as it was parsed.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.ExactPrint+ ( exactPrint+ , ExactP+ ) where++import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.SrcLoc+import Language.Haskell.Exts.Comments++import Control.Monad (when, liftM, ap, unless)+import qualified Control.Monad.Fail as Fail+#if __GLASGOW_HASKELL__ < 710+import Control.Applicative (Applicative(..))+#endif+import Control.Arrow ((***), (&&&))+import Prelude hiding (exp)+import Data.List (intersperse)++------------------------------------------------------+-- The EP monad and basic combinators++type Pos = (Int,Int)++pos :: (SrcInfo loc) => loc -> Pos+pos ss = (startLine ss, startColumn ss)++newtype EP x = EP (Pos -> [Comment] -> (x, Pos, [Comment], ShowS))++instance Functor EP where+ fmap = liftM++instance Applicative EP where+ pure x = EP $ \l cs -> (x, l, cs, id)+ (<*>) = ap++instance Monad EP where++ EP m >>= k = EP $ \l0 c0 -> let+ (a, l1, c1, s1) = m l0 c0+ EP f = k a+ (b, l2, c2, s2) = f l1 c1+ in (b, l2, c2, s1 . s2)++instance Fail.MonadFail EP where+ fail = error++runEP :: EP () -> [Comment] -> String+runEP (EP f) cs = let (_,_,_,s) = f (1,1) cs in s ""++getPos :: EP Pos+getPos = EP (\l cs -> (l,l,cs,id))++setPos :: Pos -> EP ()+setPos l = EP (\_ cs -> ((),l,cs,id))++printString :: String -> EP ()+printString str =+ EP (\(l,c) cs -> let (l', c') = foldl go (l, c) str+ go (cl, _) '\n' = (cl + 1, 1)+ go (cl, cc) _ = (cl, cc + 1)+ in ((), (l', c'), cs, showString str))+++getComment :: EP (Maybe Comment)+getComment = EP $ \l cs ->+ let x = case cs of+ c:_ -> Just c+ _ -> Nothing+ in (x, l, cs, id)++dropComment :: EP ()+dropComment = EP $ \l cs ->+ let cs' = case cs of+ (_:cs1) -> cs1+ _ -> cs+ in ((), l, cs', id)++newLine :: EP ()+newLine = do+ (l,_) <- getPos+ printString "\n"+ setPos (l+1,1)++padUntil :: Pos -> EP ()+padUntil (l,c) = do+ (l1,c1) <- getPos+ case {- trace (show ((l,c), (l1,c1))) -} () of+ _ {-()-} | l1 >= l && c1 <= c -> printString $ replicate (c - c1) ' '+ | l1 < l -> newLine >> padUntil (l,c)+ | otherwise -> return ()+++mPrintComments :: Pos -> EP ()+mPrintComments p = do+ mc <- getComment+ case mc of+ Nothing -> return ()+ Just (Comment multi s str) ->+ when (pos s < p) $ do+ dropComment+ padUntil (pos s)+ printComment multi str+ setPos (srcSpanEndLine s, srcSpanEndColumn s)+ mPrintComments p++printComment :: Bool -> String -> EP ()+printComment b str+ | b = printString $ "{-" ++ str ++ "-}"+ | otherwise = printString $ "--" ++ str++printWhitespace :: Pos -> EP ()+printWhitespace p = mPrintComments p >> padUntil p++printStringAt :: Pos -> String -> EP ()+printStringAt p str = printWhitespace p >> printString str++errorEP :: String -> EP a+errorEP = fail++------------------------------------------------------------------------------+-- Printing of source elements++-- | Print an AST exactly as specified by the annotations on the nodes in the tree.+exactPrint :: (ExactP ast) => ast SrcSpanInfo -> [Comment] -> String+exactPrint ast = runEP (exactPC ast)++exactPC :: (ExactP ast) => ast SrcSpanInfo -> EP ()+exactPC ast = let p = pos (ann ast) in mPrintComments p >> padUntil p >> exactP ast++printSeq :: [(Pos, EP ())] -> EP ()+printSeq [] = return ()+printSeq ((p,pr):xs) = printWhitespace p >> pr >> printSeq xs++printStrs :: SrcInfo loc => [(loc, String)] -> EP ()+printStrs = printSeq . map (pos *** printString)++printPoints :: SrcSpanInfo -> [String] -> EP ()+printPoints l = printStrs . zip (srcInfoPoints l)++printInterleaved, printInterleaved' :: (ExactP ast, SrcInfo loc) => [(loc, String)] -> [ast SrcSpanInfo] -> EP ()+printInterleaved sistrs asts = printSeq $+ interleave (map (pos *** printString ) sistrs)+ (map (pos . ann &&& exactP) asts)++printInterleaved' sistrs (a:asts) = exactPC a >> printInterleaved sistrs asts+printInterleaved' _ _ = internalError "printInterleaved'"++printStreams :: [(Pos, EP ())] -> [(Pos, EP ())] -> EP ()+printStreams [] ys = printSeq ys+printStreams xs [] = printSeq xs+printStreams (x@(p1,ep1):xs) (y@(p2,ep2):ys)+ | p1 <= p2 = printWhitespace p1 >> ep1 >> printStreams xs (y:ys)+ | otherwise = printWhitespace p2 >> ep2 >> printStreams (x:xs) ys+++interleave :: [a] -> [a] -> [a]+interleave [] ys = ys+interleave xs [] = xs+interleave (x:xs) (y:ys) = x:y: interleave xs ys++maybeEP :: (a -> EP ()) -> Maybe a -> EP ()+maybeEP = maybe (return ())++bracketList :: (ExactP ast) => (String, String, String) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()+bracketList (a,b,c) poss asts = printInterleaved (pList poss (a,b,c)) asts++pList :: [a] -> (b, b, b) -> [(a, b)]+pList (p:ps) (a,b,c) = (p,a) : pList' ps (b,c)+pList _ _ = internalError "pList"+pList' :: [a] -> (b, b) -> [(a, b)]+pList' [] _ = []+pList' [p] (_,c) = [(p,c)]+pList' (p:ps) (b,c) = (p, b) : pList' ps (b,c)++parenList, squareList, squareColonList, curlyList, parenHashList,+ unboxedSumTypeList :: (ExactP ast) => [SrcSpan] -> [ast SrcSpanInfo] -> EP ()+parenList = bracketList ("(",",",")")+squareList = bracketList ("[",",","]")+squareColonList = bracketList ("[:",",",":]")+curlyList = bracketList ("{",",","}")+parenHashList = bracketList ("(#",",","#)")+unboxedSumTypeList = bracketList ("(#", "|", "#)")++layoutList :: (ExactP ast) => [SrcSpan] -> [ast SrcSpanInfo] -> EP ()+layoutList poss asts = printStreams+ (map (pos *** printString) $ lList poss)+ (map (pos . ann &&& exactP) asts)++lList :: [SrcSpan] -> [(SrcSpan, String)]+lList (p:ps) = (if isNullSpan p then (p,"") else (p,"{")) : lList' ps+lList _ = internalError "lList"+lList' :: [SrcSpan] -> [(SrcSpan, String)]+lList' [] = []+lList' [p] = [if isNullSpan p then (p,"") else (p,"}")]+lList' (p:ps) = (if isNullSpan p then (p,"") else (p,";")) : lList' ps++printSemi :: SrcSpan -> EP ()+printSemi p = do+ printWhitespace (pos p)+ unless (isNullSpan p) $ printString ";"+++--------------------------------------------------+-- Exact printing++class Annotated ast => ExactP ast where+ exactP :: ast SrcSpanInfo -> EP ()++instance ExactP Literal where+ exactP lit = case lit of+ Char _ _ rw -> printString ('\'':rw ++ "\'")+ String _ _ rw -> printString ('\"':rw ++ "\"")+ Int _ _ rw -> printString rw+ Frac _ _ rw -> printString rw+ PrimInt _ _ rw -> printString (rw ++ "#" )+ PrimWord _ _ rw -> printString (rw ++ "##")+ PrimFloat _ _ rw -> printString (rw ++ "#" )+ PrimDouble _ _ rw -> printString (rw ++ "##")+ PrimChar _ _ rw -> printString ('\'':rw ++ "\'#" )+ PrimString _ _ rw -> printString ('\"':rw ++ "\"#" )++instance ExactP Sign where+ exactP sg = case sg of+ Signless _ -> return ()+ Negative l -> printStringAt (pos l) "-"++instance ExactP ModuleName where+ exactP (ModuleName _ str) = printString str++instance ExactP SpecialCon where+ exactP sc = case sc of+ UnitCon l -> printPoints l ["(",")"]+ ListCon l -> printPoints l ["[","]"]+ FunCon l -> case srcInfoPoints l of+ [_,b,_] -> printStringAt (pos b) "->"+ _ -> errorEP "ExactP: SpecialCon is given wrong number of srcInfoPoints"+ TupleCon l b n -> printPoints l $+ case b of+ Unboxed -> "(#": replicate (n-1) "," ++ ["#)"]+ _ -> "(" : replicate (n-1) "," ++ [")"]+ Cons _ -> printString ":"+ UnboxedSingleCon l -> printPoints l ["(#","#)"]+ ExprHole l -> printStringAt (pos l) "_"++isSymbolName :: Name l -> Bool+isSymbolName (Symbol _ _) = True+isSymbolName _ = False++isSymbolQName :: QName l -> Bool+isSymbolQName (UnQual _ n) = isSymbolName n+isSymbolQName (Qual _ _ n) = isSymbolName n+isSymbolQName (Special _ Cons{}) = True+isSymbolQName (Special _ FunCon{}) = True+isSymbolQName _ = False++instance ExactP QName where+ exactP qn+ | isSymbolQName qn =+ case srcInfoPoints (ann qn) of+ [_,b,c] -> do+ printString "("+ printWhitespace (pos b)+ epQName qn+ printStringAt (pos c) ")"+ _ -> errorEP "ExactP: QName is given wrong number of srcInfoPoints"+ | otherwise = epQName qn++epQName :: QName SrcSpanInfo -> EP ()+epQName qn = case qn of+ Qual _ mn n -> exactP mn >> printString "." >> exactP n+ UnQual _ n -> exactP n+ Special _ sc -> exactP sc++epInfixQName :: QName SrcSpanInfo -> EP ()+epInfixQName qn+ | isSymbolQName qn = printWhitespace (pos (ann qn)) >> epQName qn+ | otherwise =+ case srcInfoPoints (ann qn) of+ [a,b,c] -> do+ printStringAt (pos a) "`"+ printWhitespace (pos b)+ epQName qn+ printStringAt (pos c) "`"+ _ -> errorEP "ExactP: QName (epInfixName) is given wrong number of srcInfoPoints"++instance ExactP Name where+ exactP n = case n of+ Ident _ str -> printString str+ Symbol l str ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "("+ printWhitespace (pos b)+ printString str+ printStringAt (pos c) ")"+ [] -> printString str+ _ -> errorEP "ExactP: Name is given wrong number of srcInfoPoints"++epInfixName :: Name SrcSpanInfo -> EP ()+epInfixName n+ | isSymbolName n = printWhitespace (pos (ann n)) >> exactP n+ | otherwise =+ case srcInfoPoints (ann n) of+ [a,b,c] -> do+ printStringAt (pos a) "`"+ printWhitespace (pos b)+ exactP n+ printStringAt (pos c) "`"+ _ -> errorEP "ExactP: Name (epInfixName) is given wrong number of srcInfoPoints"++instance ExactP IPName where+ exactP ipn = case ipn of+ IPDup _ str -> printString $ '?':str+ IPLin _ str -> printString $ '%':str++instance ExactP QOp where+ exactP qop = case qop of+ QVarOp _ qn -> epInfixQName qn+ QConOp _ qn -> epInfixQName qn++instance ExactP Op where+ exactP op = case op of+ VarOp _ n -> epInfixName n+ ConOp _ n -> epInfixName n++++instance ExactP CName where+ exactP cn = case cn of+ VarName _ n -> exactP n+ ConName _ n -> exactP n++instance ExactP Namespace where+ exactP ns = case ns of+ NoNamespace _ -> return ()+ TypeNamespace l -> printStringAt (pos l) "type"+ PatternNamespace l -> printStringAt (pos l) "pattern"++instance ExactP ExportSpec where+ exactP espec = case espec of+ EVar _ qn -> exactPC qn+ EAbs _ ns qn -> exactP ns >> exactPC qn+ EThingWith l wc qn cns ->+ let names = case wc of+ NoWildcard {} -> cns+ EWildcard wcl n ->+ let (before,after) = splitAt n cns+ wildcardName = VarName wcl (Ident wcl "..")+ in before ++ [wildcardName] ++ after+ k = length (srcInfoPoints l)+ in exactP qn >> printInterleaved (zip (srcInfoPoints l) $ "(":replicate (k-2) "," ++ [")"]) names+ EModuleContents _ mn -> printString "module" >> exactPC mn++instance ExactP ExportSpecList where+ exactP (ExportSpecList l ess) =+ let k = length (srcInfoPoints l)+ in printInterleaved (zip (srcInfoPoints l) $ "(": replicate (k-2) "," ++ [")"]) ess++instance ExactP ImportSpecList where+ exactP (ImportSpecList l hid ispecs) = do+ let pts = srcInfoPoints l+ pts1 <- if hid then do+ let (x:pts') = pts+ printStringAt (pos x) "hiding"+ return pts'+ else return pts+ let k = length pts1+ printInterleaved (zip pts1 $ "(": replicate (k-2) "," ++ [")"]) ispecs++instance ExactP ImportSpec where+ exactP ispec = case ispec of+ IVar _ qn -> exactPC qn+ IAbs _ ns n -> exactP ns >> exactPC n+ IThingAll l n -> exactP n >> printPoints l ["(","..",")"]+ IThingWith l n cns ->+ let k = length (srcInfoPoints l)+ in exactP n >> printInterleaved (zip (srcInfoPoints l) $ "(":replicate (k-2) "," ++ [")"]) cns++instance ExactP ImportDecl where+ exactP (ImportDecl l mn qf src safe mpkg mas mispecs) = do+ printString "import"+ case srcInfoPoints l of+ (_:pts) -> do+ pts1 <- if src then+ case pts of+ x:y:pts' -> do+ printStringAt (pos x) "{-# SOURCE"+ printStringAt (pos y) "#-}"+ return pts'+ _ -> errorEP "ExactP: ImportDecl is given too few srcInfoPoints"+ else return pts+ pts2 <- if safe then+ case pts1 of+ x:pts' -> do+ printStringAt (pos x) "safe"+ return pts'+ _ -> errorEP "ExactP: ImportDecl is given too few srcInfoPoints"+ else return pts1++ -- Try to determine if qualified is post-positioned only if we have enough points+ let isPostQual = (qf && not (null pts2)) && safeIsPostQualified pts2++ pts3 <- if qf && not isPostQual then+ case pts2 of+ x:pts' -> do+ printStringAt (pos x) "qualified"+ return pts'+ _ -> errorEP "ExactP: ImportDecl is given too few srcInfoPoints"+ else return pts2++ pts4 <- case mpkg of+ Just pkg ->+ case pts3 of+ x:pts' -> do+ printStringAt (pos x) $ show pkg+ return pts'+ _ -> errorEP "ExactP: ImportDecl is given too few srcInfoPoints"+ _ -> return pts3++ exactPC mn++ -- Only try post-qualified if we determined it's actually post-qualified+ pts5 <- if qf && isPostQual then+ case pts4 of+ x:pts' -> do+ printStringAt (pos x) "qualified"+ return pts'+ _ -> errorEP "ExactP: ImportDecl is given too few srcInfoPoints"+ else return pts4++ _ <- case mas of+ Just as ->+ case pts5 of+ x:pts' -> do+ printStringAt (pos x) "as"+ exactPC as+ return pts'+ _ -> errorEP "ExactP: ImportDecl is given too few srcInfoPoints"+ _ -> return pts5++ case mispecs of+ Nothing -> return ()+ Just ispecs -> exactPC ispecs+ _ -> errorEP "ExactP: ImportDecl is given too few srcInfoPoints"+ where safeIsPostQualified pts =+ case pts of+ (p:_) ->+ let modSpan = srcInfoSpan (ann mn)+ -- Only consider it post-qualified if we have valid spans to compare+ in ((isValidSpan modSpan && isValidSpan p) &&+ (srcSpanEnd modSpan <= srcSpanStart p))+ _ -> False+ where+ isValidSpan s =+ srcSpanStartLine s > 0 && srcSpanEndLine s > 0 &&+ srcSpanStartColumn s >= 0 && srcSpanEndColumn s >= 0++instance ExactP Module where+ exactP mdl = case mdl of+ Module l mmh oss ids decls -> do+ let (oPts, pts) = splitAt (max (length oss + 1) 2) (srcInfoPoints l)+ layoutList oPts oss+ maybeEP exactPC mmh+ printStreams (map (pos *** printString) $ lList pts)+ (map (pos . ann &&& exactPC) ids ++ map (pos . ann &&& exactPC) (sepFunBinds decls))+ XmlPage l _mn oss xn attrs mat es -> do+ let (oPts, pPts) = splitAt (max (length oss + 1) 2) $ srcInfoPoints l+ case pPts of+ [a,b,c,d,e] -> do+ layoutList oPts oss+ printStringAt (pos a) "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) ">"+ mapM_ exactPC es+ printStringAt (pos c) "</"+ printWhitespace (pos d)+ exactP xn+ printStringAt (pos e) ">"+ _ -> errorEP "ExactP: Module: XmlPage is given wrong number of srcInfoPoints"+ XmlHybrid l mmh oss ids decls xn attrs mat es -> do+ let (oPts, pts) = splitAt (max (length oss + 1) 2) (srcInfoPoints l)+ layoutList oPts oss+ maybeEP exactPC mmh+ let (dPts, pPts) = splitAt (length pts - 5) pts+ case pPts of+ [a,b,c,d,e] -> do+ printStreams (map (\(p,s) -> (pos p, printString s)) $ lList dPts)+ (map (\i -> (pos $ ann i, exactPC i)) ids ++ map (\d' -> (pos $ ann d', exactPC d')) (sepFunBinds decls))++ printStringAt (pos a) "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) ">"+ mapM_ exactPC es+ printStringAt (pos c) "</"+ printWhitespace (pos d)+ exactP xn+ printStringAt (pos e) ">"+ _ -> errorEP "ExactP: Module: XmlHybrid is given wrong number of srcInfoPoints"++instance ExactP ModuleHead where+ exactP (ModuleHead l mn mwt mess) =+ case srcInfoPoints l of+ [a,b] -> do+ printStringAt (pos a) "module"+ exactPC mn+ maybeEP exactPC mwt+ maybeEP exactPC mess+ printStringAt (pos b) "where"+ _ -> errorEP "ExactP: ModuleHead is given wrong number of srcInfoPoints"++instance ExactP ModulePragma where+ exactP op = case op of+ LanguagePragma l ns ->+ let pts = srcInfoPoints l+ k = length ns - 1 -- number of commas+ m = length pts - k - 2 -- number of virtual semis, likely 0+ in printInterleaved (zip pts ("{-# LANGUAGE":replicate k "," ++ replicate m "" ++ ["#-}"])) ns+ OptionsPragma l mt str ->+ let k = length (srcInfoPoints l)+ -- We strip out a leading space in the lexer unless the pragma+ -- starts with a newline.+ addSpace xs@('\n':_) = xs+ addSpace xs = ' ':xs+ opstr = "{-# OPTIONS" ++ case mt of { Just t -> "_" ++ show t ; _ -> "" } ++ addSpace str+ in printPoints l $ opstr : replicate (k-2) "" ++ ["#-}"]+ AnnModulePragma l ann' ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "{-# ANN"+ exactPC ann'+ printStringAt (pos b) "#-}"+ _ -> errorEP "ExactP: ModulePragma: AnnPragma is given wrong number of srcInfoPoints"++instance ExactP WarningText where+ exactP (DeprText l str) = printPoints l ["{-# DEPRECATED", str, "#-}"]+ exactP (WarnText l str) = printPoints l ["{-# WARNING", str, "#-}"]++instance ExactP Assoc where+ exactP a = case a of+ AssocNone _ -> printString "infix"+ AssocLeft _ -> printString "infixl"+ AssocRight _ -> printString "infixr"++instance ExactP DataOrNew where+ exactP (DataType _) = printString "data"+ exactP (NewType _) = printString "newtype"++instance ExactP TypeEqn where+ exactP (TypeEqn l t1 t2) =+ case srcInfoPoints l of+ [a] -> do+ exactPC t1+ printStringAt (pos a) "="+ exactPC t2+ _ -> errorEP "ExactP: TypeEqn is given wrong number of srcInfoPoints"++instance ExactP InjectivityInfo where+ exactP (InjectivityInfo l to from) =+ case srcInfoPoints l of+ a:b:_ -> do+ printStringAt (pos a) "|"+ exactPC to+ printStringAt (pos b) "->"+ mapM_ exactPC from+ _ -> errorEP "ExactP: InjectivityInfo given wrong number of srcInfoPoints"++instance ExactP ResultSig where+ exactP (KindSig l k) =+ case srcInfoPoints l of+ a:_ -> do+ printStringAt (pos a) "::"+ exactPC k+ _ -> errorEP "ExactP: ResultSig given wrong number of srcInfoPoints"+ exactP (TyVarSig l tv) =+ case srcInfoPoints l of+ a:_ -> do+ printStringAt (pos a) "="+ exactPC tv+ _ -> errorEP "ExactP: ResultSig given wrong number of srcInfoPoints"+++instance ExactP Decl where+ exactP decl = case decl of+ TypeDecl l dh t ->+ case srcInfoPoints l of+ [a,b] -> do+ printStringAt (pos a) "type"+ exactPC dh+ printStringAt (pos b) "="+ exactPC t+ _ -> errorEP "ExactP: Decl: TypeDecl is given wrong number of srcInfoPoints"+ TypeFamDecl l dh mk mi ->+ case srcInfoPoints l of+ a:b:_ -> do+ printStringAt (pos a) "type"+ printStringAt (pos b) "family"+ exactPC dh+ maybeEP exactPC mk+ maybeEP exactPC mi+ _ -> errorEP "ExactP: Decl: TypeFamDecl is given wrong number of srcInfoPoints"+ ClosedTypeFamDecl l dh mk mi eqns ->+ case srcInfoPoints l of+ a:b:c:_ -> do+ printStringAt (pos a) "type"+ printStringAt (pos b) "family"+ exactPC dh+ maybeEP exactPC mk+ maybeEP exactPC mi+ printStringAt (pos c) "where"+ mapM_ exactP eqns+ _ -> errorEP "ExactP: Decl: ClosedTypeFamDecl is given wrong number of srcInfoPoints"+ DataDecl l dn mctxt dh constrs mder -> do+ exactP dn+ maybeEP exactPC mctxt+ exactPC dh+ -- the next line works for empty data types since the srcInfoPoints will be empty then+ printInterleaved (zip (srcInfoPoints l) ("=": repeat "|")) constrs+ mapM_ exactPC mder+ GDataDecl l dn mctxt dh mk gds mder -> do+ let pts = srcInfoPoints l+ exactP dn+ maybeEP exactPC mctxt+ exactPC dh+ pts1 <- case mk of+ Nothing -> return pts+ Just kd -> case pts of+ p:pts' -> do+ printStringAt (pos p) "::"+ exactPC kd+ return pts'+ _ -> errorEP "ExactP: Decl: GDataDecl is given too few srcInfoPoints"+ case pts1 of+ x:pts' -> do+ printStringAt (pos x) "where"+ layoutList pts' gds+ mapM_ exactPC mder+ _ -> errorEP "ExactP: Decl: GDataDecl is given too few srcInfoPoints"+ DataFamDecl l mctxt dh mk -> do+ printString "data"+ maybeEP exactPC mctxt+ exactPC dh+ maybeEP (\kd -> printStringAt (pos (head (srcInfoPoints l))) "::" >> exactPC kd) mk+ TypeInsDecl l t1 t2 ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "type"+ printStringAt (pos b) "instance"+ exactPC t1+ printStringAt (pos c) "="+ exactPC t2+ _ -> errorEP "ExactP: Decl: TypeInsDecl is given wrong number of srcInfoPoints"+ DataInsDecl l dn t constrs mder ->+ case srcInfoPoints l of+ p:pts -> do+ exactP dn+ printStringAt (pos p) "instance"+ exactPC t+ printInterleaved (zip pts ("=": repeat "|")) constrs+ mapM_ exactPC mder+ _ -> errorEP "ExactP: Decl: DataInsDecl is given too few srcInfoPoints"+ GDataInsDecl l dn t mk gds mder ->+ case srcInfoPoints l of+ p:pts -> do+ exactP dn+ printStringAt (pos p) "instance"+ exactPC t+ pts1 <- case mk of+ Nothing -> return pts+ Just kd -> case pts of+ p':pts' -> do+ printStringAt (pos p') "::"+ exactPC kd+ return pts'+ _ -> errorEP "ExactP: Decl: GDataInsDecl is given too few srcInfoPoints"+ case pts1 of+ x:pts' -> do+ printStringAt (pos x) "where"+ layoutList pts' gds+ mapM_ exactPC mder+ _ -> errorEP "ExactP: Decl: GDataInsDecl is given too few srcInfoPoints"+ _ -> errorEP "ExactP: Decl: GDataInsDecl is given too few srcInfoPoints"+ ClassDecl l mctxt dh fds mcds ->+ case srcInfoPoints l of+ _:pts -> do+ printString "class"+ maybeEP exactPC mctxt+ exactPC dh+ _ <- case fds of+ [] -> return pts+ _ -> do+ let (pts1, pts2) = splitAt (length fds) pts+ printInterleaved (zip pts1 ("|":repeat ",")) fds+ return pts2+ maybeEP (\cds ->+ case pts of+ p:pts' -> do+ printStringAt (pos p) "where"+ layoutList pts' $ sepClassFunBinds cds+ _ -> errorEP "ExactP: Decl: ClassDecl is given too few srcInfoPoints"+ ) mcds+ _ -> errorEP "ExactP: Decl: ClassDecl is given too few srcInfoPoints"+ InstDecl l movlp ih mids ->+ case srcInfoPoints l of+ _:pts -> do+ printString "instance"+ maybeEP exactPC movlp+ exactPC ih+ maybeEP (\ids -> do+ let (p:pts') = pts+ printStringAt (pos p) "where"+ layoutList pts' $ sepInstFunBinds ids+ ) mids+ _ -> errorEP "ExactP: Decl: InstDecl is given too few srcInfoPoints"+ DerivDecl l mds movlp ih ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "deriving"+ maybeEP exactPC mds+ printStringAt (pos b) "instance"+ maybeEP exactPC movlp+ exactPC ih+ _ -> errorEP "ExactP: Decl: DerivDecl is given wrong number of srcInfoPoints"+ InfixDecl l assoc mprec ops -> do+ let pts = srcInfoPoints l+ exactP assoc+ pts1 <- case mprec of+ Nothing -> return pts+ Just prec ->+ case pts of+ p:pts' -> do+ printStringAt (pos p) (show prec)+ return pts'+ _ -> errorEP "ExactP: Decl: InfixDecl is given too few srcInfoPoints"+ printInterleaved' (zip pts1 (repeat ",")) ops+ DefaultDecl l ts ->+ case srcInfoPoints l of+ _:pts -> do+ printString "default"+ printInterleaved (zip (init pts) ("(":repeat ",")) ts+ printStringAt (pos (last pts)) ")"+ _ -> errorEP "ExactP: Decl: DefaultDecl is given too few srcInfoPoints"+ SpliceDecl _ spl -> exactP spl+ TSpliceDecl _ spl -> exactP spl+ TypeSig l ns t -> do+ let pts = srcInfoPoints l+ printInterleaved' (zip pts (replicate (length pts - 1) "," ++ ["::"])) ns+ exactPC t+ PatSynSig l ns dh c1 _ c2 t -> do+ let (pat:pts) = srcInfoPoints l+ printStringAt (pos pat) "pattern"+ printInterleaved' (zip pts (replicate (length ns - 1) "," ++ ["::"])) ns+ case dh of+ Nothing -> return ()+ Just tvs ->+ -- (length ns - 1) commas + 1 for "::"+ case drop (length ns) pts of+ (a:b:_) -> do+ printStringAt (pos a) "forall"+ mapM_ exactPC tvs+ printStringAt (pos b) "."+ _ -> errorEP ("ExactP: Decl: PatSynSig: Forall: is given too few srcInfoPoints" ++ show pts ++ show (drop (length ns + 1) pts))+ maybeEP exactPC c1+ maybeEP exactPC c2+ exactPC t+ FunBind _ ms -> mapM_ exactPC ms+ PatBind l p rhs mbs -> do+ let pts = srcInfoPoints l+ exactP p+ exactPC rhs+ maybeEP (\bs -> printStringAt (pos (head pts)) "where" >> exactPC bs) mbs+ PatSyn l lhs rhs dir ->+ case srcInfoPoints l of+ [pat,sepPos] -> do+ let sep = case dir of+ ImplicitBidirectional -> "="+ ExplicitBidirectional _ _ -> "<-"+ Unidirectional -> "<-"+ printStringAt (pos pat) "pattern"+ exactPC lhs+ printStringAt (pos sepPos) sep+ exactPC rhs+ case dir of+ ExplicitBidirectional bl ds -> do+ case srcInfoPoints bl of+ (w:pts) -> do+ printStringAt (pos w) "where"+ layoutList pts ds+ _ -> errorEP "ExactP: Decl: PaySyn: ExplicitBidirectional is given too few srcInfoPoints"+ _ -> return ()+ _ -> errorEP "ExactP: Decl: PatSyn is given too few srcInfoPoints"+ ForImp l cc msf mstr n t ->+ case srcInfoPoints l of+ _:b:pts -> do+ printString "foreign"+ printStringAt (pos b) "import"+ exactPC cc+ maybeEP exactPC msf+ pts1 <- case mstr of+ Nothing -> return pts+ Just str -> case pts of+ x:pts' -> do+ printStringAt (pos x) (show str)+ return pts'+ _ -> errorEP "ExactP: Decl: ForImp is given too few srcInfoPoints"+ case pts1 of+ y:_ -> do+ exactPC n+ printStringAt (pos y) "::"+ exactPC t+ _ -> errorEP "ExactP: Decl: ForImp is given too few srcInfoPoints"+ _ -> errorEP "ExactP: Decl: ForImp is given too few srcInfoPoints"+ ForExp l cc mstr n t ->+ case srcInfoPoints l of+ _:b:pts -> do+ printString "foreign"+ printStringAt (pos b) "export"+ exactPC cc+ pts1 <- case mstr of+ Nothing -> return pts+ Just str -> case pts of+ x:pts' -> do+ printStringAt (pos x) (show str)+ return pts'+ _ -> errorEP "ExactP: Decl: ForExp is given too few srcInfoPoints"+ case pts1 of+ y:_ -> do+ exactPC n+ printStringAt (pos y) "::"+ exactPC t+ _ -> errorEP "ExactP: Decl: ForExp is given too few srcInfoPoints"+ _ -> errorEP "ExactP: Decl: ForExp is given too few srcInfoPoints"+ RulePragmaDecl l rs ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "{-# RULES"+ mapM_ exactPC rs+ printStringAt (pos b) "#-}"+ _ -> errorEP "ExactP: Decl: RulePragmaDecl is given too few srcInfoPoints"+ DeprPragmaDecl l nstrs ->+ case srcInfoPoints l of+ _:pts -> do+ printString "{-# DEPRECATED"+ printWarndeprs (map pos (init pts)) nstrs+ printStringAt (pos (last pts)) "#-}"+ _ -> errorEP "ExactP: Decl: DeprPragmaDecl is given too few srcInfoPoints"+ WarnPragmaDecl l nstrs ->+ case srcInfoPoints l of+ _:pts -> do+ printString "{-# WARNING"+ printWarndeprs (map pos (init pts)) nstrs+ printStringAt (pos (last pts)) "#-}"+ _ -> errorEP "ExactP: Decl: WarnPragmaDecl is given too few srcInfoPoints"+ InlineSig l inl mact qn ->+ case srcInfoPoints l of+ [_,b] -> do+ printString $ if inl then "{-# INLINE" else "{-# NOINLINE"+ maybeEP exactPC mact+ exactPC qn+ printStringAt (pos b) "#-}"+ _ -> errorEP "ExactP: Decl: InlineSig is given wrong number of srcInfoPoints"+ InlineConlikeSig l mact qn ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "{-# INLINE CONLIKE"+ maybeEP exactPC mact+ exactPC qn+ printStringAt (pos b) "#-}"+ _ -> errorEP "ExactP: Decl: InlineConlikeSig is given wrong number of srcInfoPoints"+ SpecSig l mact qn ts ->+ case srcInfoPoints l of+ _:pts -> do+ printString "{-# SPECIALISE"+ maybeEP exactPC mact+ exactPC qn+ printInterleaved (zip pts ("::" : replicate (length pts - 2) "," ++ ["#-}"])) ts+ _ -> errorEP "ExactP: Decl: SpecSig is given too few srcInfoPoints"+ SpecInlineSig l b mact qn ts ->+ case srcInfoPoints l of+ _:pts -> do+ printString $ "{-# SPECIALISE " ++ if b then "INLINE" else "NOINLINE"+ maybeEP exactPC mact+ exactPC qn+ printInterleaved (zip pts ("::" : replicate (length pts - 2) "," ++ ["#-}"])) ts+ _ -> errorEP "ExactP: Decl: SpecInlineSig is given too few srcInfoPoints"+ InstSig l ih ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "{-# SPECIALISE"+ printStringAt (pos b) "instance"+ exactPC ih+ printStringAt (pos c) "#-}"+ _ -> errorEP "ExactP: Decl: InstSig is given wrong number of srcInfoPoints"+ AnnPragma l ann' ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "{-# ANN"+ exactPC ann'+ printStringAt (pos b) "#-}"+ _ -> errorEP "ExactP: Decl: AnnPragma is given wrong number of srcInfoPoints"+ MinimalPragma l b ->+ case srcInfoPoints l of+ [_,b'] -> do+ printString "{-# MINIMAL"+ maybeEP exactPC b+ printStringAt (pos b') "#-}"+ _ -> errorEP "ExactP: Decl: MinimalPragma is given wrong number of srcInfoPoints"+ RoleAnnotDecl l ty roles ->+ case srcInfoPoints l of+ (t:r:_) -> do+ printStringAt (pos t) "type"+ printStringAt (pos r) "role"+ exactPC ty+ mapM_ exactPC roles+ _ -> errorEP "ExactP: Decl: RoleAnnotDecl is given wrong number of srcInfoPoints"+ CompletePragma l cls opt_ts ->+ case srcInfoPoints l of+ (t:rs) -> do+ let (cls_s, rs') = splitAt (length cls - 1) rs+ printStringAt (pos t)"{-# COMPLETE"+ printInterleaved' (zip cls_s (repeat ",")) cls+ case (rs', opt_ts) of+ ((opt_dcolon: end:_), Just tc) -> do+ printStringAt (pos opt_dcolon) "::"+ exactPC tc+ printStringAt (pos end) "#-}"+ ([end], Nothing) -> printStringAt (pos end) "#-}"+ _ -> errorEP "ExactP: Decl: CompletePragma is given wrong number of srcInfoPoints"+ _ -> errorEP "ExactP: Decl: CompletePragma is given wrong number of srcInfoPoints"+++instance ExactP Role where+ exactP r =+ case r of+ RoleWildcard l -> printStringAt (pos l) "_"+ Representational l -> printStringAt (pos l) "representational"+ Phantom l -> printStringAt (pos l) "phantom"+ Nominal l -> printStringAt (pos l) "nominal"+++instance ExactP Annotation where+ exactP ann' = case ann' of+ Ann _ n e -> do+ exactP n+ exactPC e+ TypeAnn _ n e -> do+ printString "type"+ exactPC n+ exactPC e+ ModuleAnn _ e -> do+ printString "module"+ exactPC e++instance ExactP BooleanFormula where+ exactP b' = case b' of+ VarFormula _ n -> exactPC n+ AndFormula l bs ->+ let pts = srcInfoPoints l+ in printStreams (zip (map pos pts) (repeat $ printString ",")) (map (pos . ann &&& exactPC) bs)+ OrFormula l bs ->+ let pts = srcInfoPoints l+ in printStreams (zip (map pos pts) (repeat $ printString "|")) (map (pos . ann &&& exactPC) bs)+ ParenFormula l b ->+ case srcInfoPoints l of+ [a'',b''] -> printStringAt (pos a'') "(" >> exactPC b >> printStringAt (pos b'') ")"+ _ -> errorEP "ExactP: BooleanFormula: ParenFormula is given wrong number of srcInfoPoints"++printWarndeprs :: [Pos] -> [([Name SrcSpanInfo], String)] -> EP ()+printWarndeprs _ [] = return ()+printWarndeprs ps' ((ns',str'):nsts') = printWd ps' ns' str' nsts'+ where printWd :: [Pos] -> [Name SrcSpanInfo] -> String -> [([Name SrcSpanInfo], String)] -> EP ()+ printWd (p:ps) [] str nsts = printStringAt p (show str) >> printWarndeprs ps nsts+ printWd ps [n] str nsts = exactPC n >> printWd ps [] str nsts+ printWd (p:ps) (n:ns) str nsts = exactPC n >> printStringAt p "," >> printWd ps ns str nsts+ printWd _ _ _ _ = internalError "printWd"+++sepFunBinds :: [Decl SrcSpanInfo] -> [Decl SrcSpanInfo]+sepFunBinds [] = []+sepFunBinds (FunBind _ ms:ds) = map (\m -> FunBind (ann m) [m]) ms ++ sepFunBinds ds+sepFunBinds (d:ds) = d : sepFunBinds ds++sepClassFunBinds :: [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]+sepClassFunBinds [] = []+sepClassFunBinds (ClsDecl _ (FunBind _ ms):ds) = map (\m -> ClsDecl (ann m) $ FunBind (ann m) [m]) ms ++ sepClassFunBinds ds+sepClassFunBinds (d:ds) = d : sepClassFunBinds ds++sepInstFunBinds :: [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]+sepInstFunBinds [] = []+sepInstFunBinds (InsDecl _ (FunBind _ ms):ds) = map (\m -> InsDecl (ann m) $ FunBind (ann m) [m]) ms ++ sepInstFunBinds ds+sepInstFunBinds (d:ds) = d : sepInstFunBinds ds++instance ExactP DeclHead where+ exactP dh' = case dh' of+ DHead _ n -> exactP n+ DHInfix _ tva n -> exactP tva >> epInfixName n+ DHParen l dh ->+ case srcInfoPoints l of+ [_,b] -> printString "(" >> exactPC dh >> printStringAt (pos b) ")"+ _ -> errorEP "ExactP: DeclHead: DeclParen is given wrong number of srcInfoPoints"+ DHApp _ dh t -> exactP dh >> exactPC t++instance ExactP InstRule where+ exactP ih' = case ih' of+ IRule l mtvs mctxt qn -> do+ let pts = srcInfoPoints l+ _ <- case mtvs of+ Nothing -> return pts+ Just tvs ->+ case pts of+ [a,b] -> do+ printStringAt (pos a) "forall"+ mapM_ exactPC tvs+ printStringAt (pos b) "."+ return pts+ _ -> errorEP "ExactP: InstRule: IRule is given too few srcInfoPoints"+ maybeEP exactPC mctxt+ exactPC qn+ IParen l ih ->+ case srcInfoPoints l of+ [a,b] -> printStringAt (pos a) "(" >> exactPC ih >> printStringAt (pos b) ")"+ _ -> errorEP "ExactP: InstRule: IParen is given wrong number of srcInfoPoints"++instance ExactP InstHead where+ exactP doih' = case doih' of+ IHCon _ qn -> exactPC qn+ IHInfix _ ta qn -> exactPC ta >> epInfixQName qn+ IHParen l doih ->+ case srcInfoPoints l of+ [a,b] -> printStringAt (pos a) "(" >> exactPC doih >> printStringAt (pos b) ")"+ _ -> errorEP "ExactP: OrInstHead: IHParen is given wrong number of srcInfoPoints"+ IHApp _ doih t -> exactPC doih >> exactPC t++instance ExactP TyVarBind where+ exactP (KindedVar l n k) =+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "("+ exactPC n+ printStringAt (pos b) "::"+ exactPC k+ printStringAt (pos c) ")"+ _ -> errorEP "ExactP: TyVarBind: KindedVar is given wrong number of srcInfoPoints"+ exactP (UnkindedVar l n) =+ case srcInfoPoints l of+ [a,_,c] -> do+ printStringAt (pos a) "("+ exactPC n+ printStringAt (pos c) ")"+ [] -> exactPC n+ _ -> errorEP "ExactP: TyVarBind: UnkindedVar is given wrong number of srcInfoPoints"++instance ExactP Type where+ exactP t' = case t' of+ TyForall l mtvs mctxt t -> do+ let pts = srcInfoPoints l+ _ <- case mtvs of+ Nothing -> return pts+ Just tvs ->+ case pts of+ _:b:pts' -> do+ printString "forall"+ mapM_ exactPC tvs+ printStringAt (pos b) "."+ return pts'+ _ -> errorEP "ExactP: Type: TyForall is given too few srcInfoPoints"+ maybeEP exactPC mctxt+ exactPC t+ TyStar _ -> printString "*"+ TyFun l t1 t2 ->+ case srcInfoPoints l of+ [a] -> do+ exactP t1+ printStringAt (pos a) "->"+ exactPC t2+ _ -> errorEP "ExactP: Type: TyFun is given wrong number of srcInfoPoints"+ TyTuple l bx ts ->+ case bx of+ Boxed -> parenList (srcInfoPoints l) ts+ Unboxed -> parenHashList (srcInfoPoints l) ts+ TyUnboxedSum l es ->+ unboxedSumTypeList (srcInfoPoints l) es+ TyList l t ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "["+ exactPC t+ printStringAt (pos b) "]"+ _ -> errorEP "ExactP: Type: TyList is given wrong number of srcInfoPoints"+ TyParArray l t ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "[:"+ exactPC t+ printStringAt (pos b) ":]"+ _ -> errorEP "ExactP: Type: TyParArray is given wrong number of srcInfoPoints"+ TyApp _ t1 t2 -> exactP t1 >> exactPC t2+ TyVar _ n -> exactP n+ TyCon _ qn -> exactP qn+ TyParen l t ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "("+ exactPC t+ printStringAt (pos b) ")"+ _ -> errorEP "ExactP: Type: TyParen is given wrong number of srcInfoPoints"+ TyInfix _ t1 qn t2 -> exactP t1 >> exactP qn >> exactPC t2+ TyKind l t kd ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "("+ exactPC t+ printStringAt (pos b) "::"+ exactPC kd+ printStringAt (pos c) ")"+ _ -> errorEP "ExactP: Type: TyKind is given wrong number of srcInfoPoints"+ TyPromoted _ p -> exactPC p+ TyEquals l t0 t1 -> case srcInfoPoints l of+ a:_ -> exactPC t0 >> printStringAt (pos a) "~" >> exactPC t1+ _ -> errorEP "ExactP: Type: TyEquals is given wrong number of srcInfoPoints"++ TySplice _ sp -> exactP sp+ TyBang _ b u t -> exactPC u >> exactPC b >> exactPC t+ TyWildCard _ mn -> printString "_" >> maybeEP exactPC mn+ TyQuasiQuote _ name qt -> do+ let qtLines = lines qt+ printString $ "[" ++ name ++ "|"+ sequence_ (intersperse newLine $ map printString qtLines)+ printString "|]"++instance ExactP MaybePromotedName where+ exactP (PromotedName l qn) = case srcInfoPoints l of+ [a] -> printStringAt (pos a) "'" >> epInfixQName qn+ _ -> errorEP "ExactP: MaybePromotedName: PromotedName given wrong number of args"+ exactP (UnpromotedName _ qn) = epInfixQName qn++instance ExactP Promoted where+ exactP (PromotedInteger _ _ rw) = printString rw+ exactP (PromotedString _ _ rw) = printString ('\"':rw ++ "\"")+ exactP (PromotedCon l True qn) = case srcInfoPoints l of+ [a] -> printStringAt (pos a) "'" >> epQName qn+ _ -> errorEP "ExactP: Promoted: PromotedCon is given wrong number of srcInfoPoints"+ exactP (PromotedCon _ False qn) = epQName qn+ exactP (PromotedList l b pl) =+ let o | b = "'[" | otherwise = "["+ e = "]"+ pts = srcInfoPoints l+ in printInterleaved (zip pts (o: replicate (length pts - 2) "," ++ [e])) pl+ exactP (PromotedTuple l pl) =+ let o = "'("+ e = ")"+ pts = srcInfoPoints l+ in printInterleaved (zip pts (o: replicate (length pts - 2) "," ++ [e])) pl+ exactP (PromotedUnit l) = case srcInfoPoints l of+ [_,b] -> do+ printString "("+ printStringAt (pos b) ")"+ _ -> errorEP "ExactP: Promoted: PromotedUnit is given wrong number of srcInfoPoints"+++instance ExactP Context where+ exactP ctxt = do+ printContext ctxt+ printStringAt (pos . last . srcInfoPoints . ann $ ctxt) "=>"++printContext :: Context SrcSpanInfo -> EP ()+printContext ctxt = do+ let l = ann ctxt+ pts = init $ srcInfoPoints l+ case ctxt of+ CxSingle _ asst -> exactP asst+ CxEmpty _ ->+ case pts of+ [a,b] -> do+ printStringAt (pos a) "("+ printStringAt (pos b) ")"+ _ -> errorEP "ExactP: Context: CxEmpty is given wrong number of srcInfoPoints"+ CxTuple _ assts -> parenList pts assts+++instance ExactP Asst where+ exactP asst = case asst of+ TypeA _ t -> exactP t+ IParam l ipn t ->+ case srcInfoPoints l of+ [a] -> do+ exactP ipn+ printStringAt (pos a) "::"+ exactPC t+ _ -> errorEP "ExactP: Asst: IParam is given wrong number of srcInfoPoints"+ ParenA l asst' ->+ case take 2 $ srcInfoPoints l of+ [a,b] -> do+ printStringAt (pos a) "("+ exactPC asst'+ printStringAt (pos b) ")"+ _ -> errorEP "ExactP: Asst: ParenA is given wrong number of srcInfoPoints"++instance ExactP Deriving where+ exactP (Deriving l mds ihs) =+ case srcInfoPoints l of+ _:pts -> do+ printString "deriving"+ maybeEP exactPC mds+ case pts of+ [] -> exactPC $ head ihs+ _ -> parenList pts ihs+ _ -> errorEP "ExactP: Deriving is given too few srcInfoPoints"++instance ExactP DerivStrategy where+ exactP (DerivStock _) =+ printString "stock"+ exactP (DerivAnyclass _) =+ printString "anyclass"+ exactP (DerivNewtype _) =+ printString "newtype"+ exactP (DerivVia _ ty) = do+ printString "via"+ exactP ty++instance ExactP ClassDecl where+ exactP cdecl = case cdecl of+ ClsDecl _ d -> exactP d+ ClsDataFam l mctxt dh mk ->+ case srcInfoPoints l of+ _:pts -> do+ printString "data"+ maybeEP exactPC mctxt+ exactPC dh+ maybeEP (\kd -> printStringAt (pos (head pts)) "::" >> exactPC kd) mk+ _ -> errorEP "ExactP: ClassDecl: ClsDataFam is given too few srcInfoPoints"+ ClsTyFam l dh mk mi ->+ case srcInfoPoints l of+ _:_ -> do+ printString "type"+ exactPC dh+ maybeEP exactPC mk+ maybeEP exactPC mi+ _ -> errorEP "ExactP: ClassDecl: ClsTyFam is given too few srcInfoPoints"+ ClsTyDef l t1 ->+ case srcInfoPoints l of+ _:b:_ -> do -- 3 sourceInfoPoints implies parsed as "type instance"+ printString "type"+ printStringAt (pos b) "instance"+ exactPC t1+ _:_ -> do+ printString "type"+ exactPC t1+ _ -> errorEP "ExactP: ClassDecl: ClsTyDef is given too few srcInfoPoints"+ ClsDefSig l n t ->+ case srcInfoPoints l of+ _:b:_ -> do+ printString "default"+ exactPC n+ printStringAt (pos b) "::"+ exactPC t+ _ -> errorEP "ExactP: ClassDecl: ClsDefSig is given too few srcInfoPoints"+++instance ExactP InstDecl where+ exactP idecl = case idecl of+ InsDecl _ d -> exactP d+ InsType l t1 t2 ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "type"+ exactPC t1+ printStringAt (pos b) "="+ exactPC t2+ _ -> internalError "InstDecl -> InsType"+ InsData l dn t constrs mder -> do+ exactP dn+ exactPC t+ printInterleaved (zip (srcInfoPoints l) ("=": repeat "|")) constrs+ mapM_ exactPC mder+ InsGData l dn t mk gds mder -> do+ let pts = srcInfoPoints l+ exactP dn+ exactPC t+ pts1 <- case mk of+ Nothing -> return pts+ Just kd -> case pts of+ p:pts' -> do+ printStringAt (pos p) "::"+ exactPC kd+ return pts'+ _ -> errorEP "ExactP: InstDecl: InsGData is given too few srcInfoPoints"+ case pts1 of+ x:_ -> do+ printStringAt (pos x) "where"+ mapM_ exactPC gds+ mapM_ exactPC mder+ _ -> errorEP "ExactP: InstDecl: InsGData is given too few srcInfoPoints"+-- InsInline l inl mact qn -> do+-- case srcInfoPoints l of+-- [a,b] -> do+-- printString $ if inl then "{-# INLINE" else "{-# NOINLINE"+-- maybeEP exactPC mact+-- exactPC qn+-- printStringAt (pos b) "#-}"+-- _ -> errorEP "ExactP: InstDecl: InsInline is given wrong number of srcInfoPoints"++instance ExactP FunDep where+ exactP (FunDep l nxs nys) =+ case srcInfoPoints l of+ [a] -> do+ mapM_ exactPC nxs+ printStringAt (pos a) "->"+ mapM_ exactPC nys+ _ -> errorEP "ExactP: FunDep is given wrong number of srcInfoPoints"++instance ExactP QualConDecl where+ exactP (QualConDecl l mtvs mctxt cd) = do+ let pts = srcInfoPoints l+ _ <- case mtvs of+ Nothing -> return pts+ Just tvs ->+ case pts of+ _:b:pts' -> do+ printString "forall"+ mapM_ exactPC tvs+ printStringAt (pos b) "."+ return pts'+ _ -> errorEP "ExactP: QualConDecl is given wrong number of srcInfoPoints"+ maybeEP exactPC mctxt+ exactPC cd++instance ExactP ConDecl where+ exactP cd = case cd of+ ConDecl _ n bts -> exactP n >> mapM_ exactPC bts+ InfixConDecl _ bta n btb -> exactP bta >> epInfixName n >> exactP btb+ RecDecl l n fds -> exactP n >> curlyList (srcInfoPoints l) fds++instance ExactP GadtDecl where+ exactP (GadtDecl l n _mtvs mctxt ns' t) =+ case ns' of+ Nothing ->+ case srcInfoPoints l of+ [a] -> do+ exactP n+ printStringAt (pos a) "::"+ exactPC t+ _ -> errorEP "ExactP: GadtDecl is given wrong number of srcInfoPoints"+ Just ts ->+ case srcInfoPoints l of+ (a:b:c:d:rest) -> do+ exactPC n+ printStringAt (pos a) "::"+ maybeEP exactPC mctxt+ printStringAt (pos b) "{"+ printInterleaved' (zip rest (repeat ",")) ts+ printStringAt (pos c) "}"+ printStringAt (pos d) "->"+ exactPC t+ _ -> errorEP "ExactP: GadtDecl is given wrong number of srcInfoPoints"++instance ExactP BangType where+ exactP bt = case bt of+ BangedTy l -> printStringAt (pos l) "!"+ LazyTy l -> printStringAt (pos l) "~"+ _ -> return ()++instance ExactP Unpackedness where+ exactP bt = case bt of+ Unpack l ->+ case srcInfoPoints l of+ [a,b] -> do+ printStringAt (pos a) "{-# UNPACK"+ printStringAt (pos b) "#-}"+ _ -> errorEP "ExactP: Unpackedness: Unpack is given wrong number of srcInfoPoints"+ NoUnpack l ->+ case srcInfoPoints l of+ [a,b] -> do+ printStringAt (pos a) "{-# NOUNPACK"+ printStringAt (pos b) "#-}"+ _ -> errorEP "ExactP: Unpackedness: NoUnpack is given wrong number of srcInfoPoints"+ NoUnpackPragma {} -> return ()++instance ExactP Splice where+ exactP (IdSplice _ str) = printString $ '$':str+ exactP (TIdSplice _ str) = printString $ "$$" ++ str+ exactP (ParenSplice l e) = printParen "ParenSplice" "$(" l e+ exactP (TParenSplice l e) = printParen "TParenSplice" "$$(" l e++printParen :: ExactP ast => String -> String -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()+printParen con paren l e =+ case srcInfoPoints l of+ [_,b] -> do+ printString paren+ exactPC e+ printStringAt (pos b) ")"+ _ -> errorEP $ "ExactP: Splice: " ++ con ++ " is given wrong number of srcInfoPoints"++instance ExactP Exp where+ exactP exp = case exp of+ Var _ qn -> exactP qn+ OverloadedLabel _ qn -> printString ('#':qn)+ IPVar _ ipn -> exactP ipn+ Con _ qn -> exactP qn+ Lit _ lit -> exactP lit+ InfixApp _ e1 op e2 -> exactP e1 >> exactPC op >> exactPC e2+ App _ e1 e2 -> exactP e1 >> exactPC e2+ NegApp _ e -> printString "-" >> exactPC e+ Lambda l ps e ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "\\"+ mapM_ exactPC ps+ printStringAt (pos b) "->"+ exactPC e+ _ -> errorEP "ExactP: Exp: Lambda is given wrong number of srcInfoPoints"+ Let l bs e ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "let"+ exactPC bs+ printStringAt (pos b) "in"+ exactPC e+ _ -> errorEP "ExactP: Exp: Let is given wrong number of srcInfoPoints"+ If l ec et ee -> -- traceShow (srcInfoPoints l) $ do+ -- First we need to sort out if there are any optional+ -- semicolons hiding among the srcInfoPoints.+ case srcInfoPoints l of+ (_:b:c:rest) -> do+ let (mpSemi1,pThen,rest2) =+ if snd (spanSize b) == 4 -- this is "then", not a semi+ then (Nothing, b, c:rest)+ else (Just b, c, rest)+ case rest2 of+ (c':rest3) -> do+ let (mpSemi2,rest4) = if snd (spanSize c') == 4 -- this is "else", not a semi+ then (Nothing, rest2)+ else (Just c', rest3)+ case rest4 of+ [pElse] -> do+ -- real work starts here:+ printString "if"+ exactPC ec+ maybeEP printSemi mpSemi1+ printStringAt (pos pThen) "then"+ exactPC et+ maybeEP printSemi mpSemi2+ printStringAt (pos pElse) "else"+ exactPC ee+ [] -> errorEP "ExactP: Exp: If is given too few srcInfoPoints"+ _ -> errorEP "ExactP: Exp: If is given too many srcInfoPoints"+ _ -> errorEP "ExactP: Exp: If is given too few srcInfoPoints"++ _ -> errorEP "ExactP: Exp: If is given too few srcInfoPoints"+ MultiIf l alts ->+ case srcInfoPoints l of+ _:pts -> do+ printString "if"+ layoutList pts (map GuardedAlt alts)+ _ -> internalError "Exp -> MultiIf"+ Case l e alts ->+ case srcInfoPoints l of+ _:b:pts -> do+ printString "case"+ exactPC e+ printStringAt (pos b) "of"+ layoutList pts alts+ _ -> errorEP "ExactP: Exp: Case is given too few srcInfoPoints"+ Do l stmts ->+ case srcInfoPoints l of+ _:pts -> do+ printString "do"+ layoutList pts stmts+ _ -> errorEP "ExactP: Exp: Do is given too few srcInfoPoints"+ MDo l stmts ->+ case srcInfoPoints l of+ _:pts -> do+ printString "mdo"+ layoutList pts stmts+ _ -> errorEP "ExactP: Exp: Mdo is given wrong number of srcInfoPoints"+ Tuple l bx es ->+ case bx of+ Boxed -> parenList (srcInfoPoints l) es+ Unboxed -> parenHashList (srcInfoPoints l) es+ UnboxedSum l b a es -> do+ unboxedSumEP l b a es+ TupleSection l bx mexps -> do+ let pts = srcInfoPoints l+ (o, e) = case bx of Boxed -> ("(", ")"); Unboxed -> ("(#", "#)")+ printSeq $ interleave (zip (map pos $ init pts) (map printString (o: repeat ",")) ++ [(pos $ last pts, printString e)])+ (map (maybe (0,0) (pos . ann) &&& maybeEP exactPC) mexps)+ List l es -> squareList (srcInfoPoints l) es+ ParArray l es -> squareColonList (srcInfoPoints l) es+ Paren l p -> parenList (srcInfoPoints l) [p]+ LeftSection l e qop ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "("+ exactPC e+ exactPC qop+ printStringAt (pos b) ")"+ _ -> errorEP "ExactP: Exp: LeftSection is given wrong number of srcInfoPoints"+ RightSection l qop e ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "("+ exactPC qop+ exactPC e+ printStringAt (pos b) ")"+ _ -> errorEP "ExactP: Exp: RightSection is given wrong number of srcInfoPoints"+ RecConstr l qn fups -> do+ let pts = srcInfoPoints l+ exactP qn+ curlyList pts fups+ RecUpdate l e fups -> do+ let pts = srcInfoPoints l+ exactP e+ curlyList pts fups+ EnumFrom l e ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "["+ exactPC e+ printStringAt (pos b) ".."+ printStringAt (pos c) "]"+ _ -> errorEP "ExactP: Exp: EnumFrom is given wrong number of srcInfoPoints"+ EnumFromTo l e1 e2 ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "["+ exactPC e1+ printStringAt (pos b) ".."+ exactPC e2+ printStringAt (pos c) "]"+ _ -> errorEP "ExactP: Exp: EnumFromTo is given wrong number of srcInfoPoints"+ EnumFromThen l e1 e2 ->+ case srcInfoPoints l of+ [_,b,c,d] -> do+ printString "["+ exactPC e1+ printStringAt (pos b) ","+ exactPC e2+ printStringAt (pos c) ".."+ printStringAt (pos d) "]"+ _ -> errorEP "ExactP: Exp: EnumFromThen is given wrong number of srcInfoPoints"+ EnumFromThenTo l e1 e2 e3 ->+ case srcInfoPoints l of+ [_,b,c,d] -> do+ printString "["+ exactPC e1+ printStringAt (pos b) ","+ exactPC e2+ printStringAt (pos c) ".."+ exactPC e3+ printStringAt (pos d) "]"+ _ -> errorEP "ExactP: Exp: EnumFromToThen is given wrong number of srcInfoPoints"+ ParArrayFromTo l e1 e2 ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "[:"+ exactPC e1+ printStringAt (pos b) ".."+ exactPC e2+ printStringAt (pos c) ":]"+ _ -> errorEP "ExactP: Exp: ParArrayFromTo is given wrong number of srcInfoPoints"+ ParArrayFromThenTo l e1 e2 e3 ->+ case srcInfoPoints l of+ [_,b,c,d] -> do+ printString "[:"+ exactPC e1+ printStringAt (pos b) ","+ exactPC e2+ printStringAt (pos c) ".."+ exactPC e3+ printStringAt (pos d) ":]"+ _ -> errorEP "ExactP: Exp: ParArrayFromToThen is given wrong number of srcInfoPoints"+ ListComp l e qss ->+ case srcInfoPoints l of+ _:pts -> do+ printString "["+ exactPC e+ bracketList ("|",",","]") pts qss+ _ -> errorEP "ExactP: Exp: ListComp is given too few srcInfoPoints"+ ParComp l e qsss ->+ case srcInfoPoints l of+ _:pts -> do+ let (strs, qss) = unzip $ pairUp qsss+ printString "["+ exactPC e+ printInterleaved (zip pts (strs ++ ["]"])) qss+ _ -> errorEP "ExactP: Exp: ParComp is given wrong number of srcInfoPoints"+ where pairUp [] = []+ pairUp ((a:as):xs) = ("|", a) : zip (repeat ",") as ++ pairUp xs+ pairUp _ = internalError "Exp -> ParComp -> pairUp"+ ParArrayComp l e qsss ->+ case srcInfoPoints l of+ _:pts -> do+ let (strs, qss) = unzip $ pairUp qsss+ printString "[:"+ exactPC e+ printInterleaved (zip pts (strs ++ [":]"])) qss+ _ -> errorEP "ExactP: Exp: ParArrayComp is given wrong number of srcInfoPoints"+ where pairUp [] = []+ pairUp ((a:as):xs) = ("|", a) : zip (repeat "|") as ++ pairUp xs+ pairUp _ = internalError "Exp -> ParArrayComp -> pairUp"++ ExpTypeSig l e t ->+ case srcInfoPoints l of+ [a] -> do+ exactP e+ printStringAt (pos a) "::"+ exactPC t+ _ -> errorEP "ExactP: Exp: ExpTypeSig is given wrong number of srcInfoPoints"+ VarQuote _ qn -> do+ printString "'"+ exactPC qn+ TypQuote _ qn -> do+ printString "''"+ exactPC qn+ BracketExp _ br -> exactP br+ SpliceExp _ sp -> exactP sp+ QuasiQuote _ name qt -> do+ let qtLines = lines qt+ printString $ "[" ++ name ++ "|"+ sequence_ (intersperse newLine $ map printString qtLines)+ printString "|]"+ XTag l xn attrs mat es ->+ case srcInfoPoints l of+ [_,b,c,d,e] -> do+ printString "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) ">"+ mapM_ exactPC es+ printStringAt (pos c) "</"+ printWhitespace (pos d)+ exactP xn+ printStringAt (pos e) ">"+ -- TODO: Fugly hack/duplication, should be refactored+ -- For the case when there's an optional semicolon+ [_,b,semi,c,d,e] -> do+ printString "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) ">"+ mapM_ exactPC es+ printSemi semi+ printStringAt (pos c) "</"+ printWhitespace (pos d)+ exactP xn+ printStringAt (pos e) ">"+ _ -> errorEP "ExactP: Exp: XTag is given wrong number of srcInfoPoints"+ XETag l xn attrs mat ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) "/>"+ _ -> errorEP "ExactP: Exp: XETag is given wrong number of srcInfoPoints"+ XPcdata _ str -> do+ let strLines = lines str+ sequence_ (intersperse newLine $ map printString strLines)+ XExpTag l e ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "<%"+ exactPC e+ printStringAt (pos b) "%>"+ _ -> errorEP "ExactP: Exp: XExpTag is given wrong number of srcInfoPoints"+ XChildTag l es ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "<%>"+ mapM_ exactPC es+ printStringAt (pos b) "</"+ printStringAt (pos c) "%>"+ -- Ugly duplication for when there's an optional semi+ [_,semi,b,c] -> do+ printString "<%>"+ mapM_ exactPC es+ printSemi semi+ printStringAt (pos b) "</"+ printStringAt (pos c) "%>"+ _ -> errorEP "ExactP: Exp: XChildTag is given wrong number of srcInfoPoints"+ CorePragma l str e ->+ case srcInfoPoints l of+ [_,b] -> do+ printString $ "{-# CORE " ++ show str+ printStringAt (pos b) "#-}"+ exactPC e+ _ -> errorEP "ExactP: Exp: CorePragma is given wrong number of srcInfoPoints"+ SCCPragma l str e ->+ case srcInfoPoints l of+ [_,b] -> do+ printString $ "{-# SCC " ++ show str+ printStringAt (pos b) "#-}"+ exactPC e+ _ -> errorEP "ExactP: Exp: SCCPragma is given wrong number of srcInfoPoints"+ GenPragma l str (i1,i2) (i3,i4) e -> do+ printStrs $ zip (srcInfoPoints l) ["{-# GENERATED", show str, show i1, ":", show i2, "-", show i3, ":", show i4, "#-}"]+ exactPC e+ Proc l p e ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "proc"+ exactPC p+ printStringAt (pos b) "->"+ exactPC e+ _ -> errorEP "ExactP: Exp: Proc is given wrong number of srcInfoPoints"+ LeftArrApp l e1 e2 ->+ case srcInfoPoints l of+ [a] -> do+ exactP e1+ printStringAt (pos a) "-<"+ exactPC e2+ _ -> errorEP "ExactP: Exp: LeftArrApp is given wrong number of srcInfoPoints"+ RightArrApp l e1 e2 ->+ case srcInfoPoints l of+ [a] -> do+ exactP e1+ printStringAt (pos a) ">-"+ exactPC e2+ _ -> errorEP "ExactP: Exp: RightArrApp is given wrong number of srcInfoPoints"+ LeftArrHighApp l e1 e2 ->+ case srcInfoPoints l of+ [a] -> do+ exactP e1+ printStringAt (pos a) "-<<"+ exactPC e2+ _ -> errorEP "ExactP: Exp: LeftArrHighApp is given wrong number of srcInfoPoints"+ RightArrHighApp l e1 e2 ->+ case srcInfoPoints l of+ [a] -> do+ exactP e1+ printStringAt (pos a) ">>-"+ exactPC e2+ _ -> errorEP "ExactP: Exp: RightArrHighApp is given wrong number of srcInfoPoints"++ ArrOp l e -> case srcInfoPoints l of+ [a, b] -> do+ printStringAt (pos a) "(|"+ exactPC e+ printStringAt (pos b) "|)"+ _ -> errorEP "ExactP: Exp: ArrOp is given wrong number of srcInfoPoints"++ LCase l alts ->+ case srcInfoPoints l of+ _:b:pts -> do+ printString "\\"+ printStringAt (pos b) "case"+ layoutList pts alts+ _ -> errorEP "ExactP: Exp: LCase is given wrong number of srcInfoPoints"+ TypeApp _ ty -> printString "@" >> exactP ty++unboxedSumEP :: ExactP e => SrcSpanInfo -> Int -> Int -> e SrcSpanInfo -> EP ()+unboxedSumEP l b _a es = do+ let (opt:pts) = srcInfoPoints l+ (o, e) = ("(#", "#)")+ bars = zip (map pos (init pts)) (map printString (repeat "|"))+ open = (pos opt, printString o)+ close = (pos (last pts), printString e)+ fs = take b bars+ as = drop b bars+ printSeq $ open : fs ++ [((0, 0), exactPC es)] ++ as ++ [close]++instance ExactP FieldUpdate where+ exactP fup = case fup of+ FieldUpdate l qn e ->+ case srcInfoPoints l of+ [a] -> do+ exactP qn+ printStringAt (pos a) "="+ exactPC e+ _ -> errorEP "ExactP: FieldUpdate is given wrong number of srcInfoPoints"+ FieldPun _ n -> exactP n+ FieldWildcard _ -> printString ".."++instance ExactP Stmt where+ exactP stmt = case stmt of+ Generator l p e ->+ case srcInfoPoints l of+ [a] -> do+ exactP p+ printStringAt (pos a) "<-"+ exactPC e+ _ -> errorEP "ExactP: Stmt: Generator is given wrong number of srcInfoPoints"+ Qualifier _ e -> exactP e+ LetStmt _ bds -> do+ printString "let"+ exactPC bds+ RecStmt l ss ->+ case srcInfoPoints l of+ _:pts -> do+ printString "rec"+ layoutList pts ss+ _ -> errorEP "ExactP: Stmt: RecStmt is given too few srcInfoPoints"++instance ExactP QualStmt where+ exactP qstmt = case qstmt of+ QualStmt _ stmt -> exactP stmt+ ThenTrans _ e -> printString "then" >> exactPC e+ ThenBy l e1 e2 ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "then"+ exactPC e1+ printStringAt (pos b) "by"+ exactPC e2+ _ -> errorEP "ExactP: QualStmt: ThenBy is given wrong number of srcInfoPoints"+ GroupBy l e -> do+ printStrs $ zip (srcInfoPoints l) ["then","group","by"]+ exactPC e+ GroupUsing l e -> do+ printStrs $ zip (srcInfoPoints l) ["then","group","using"]+ exactPC e+ GroupByUsing l e1 e2 -> do+ let pts = srcInfoPoints l+ printStrs $ zip (init pts) ["then","group","by"]+ exactPC e1+ printStringAt (pos (last pts)) "using"+ exactPC e2++instance ExactP Bracket where+ exactP br = case br of+ ExpBracket l e -> printBracket "ExpBracket" "[|" "|]" l e+ TExpBracket l e -> printBracket "TExpBracket" "[||" "||]" l e+ PatBracket l p -> printBracket "PatBracket" "[p|" "|]" l p+ TypeBracket l t -> printBracket "TypeBracket" "[t|" "|]" l t+ DeclBracket l ds ->+ case srcInfoPoints l of+ pts@(_:_) -> do+ printString "[d|"+ layoutList (init pts) (sepFunBinds ds)+ printStringAt (pos (last pts)) "|]"+ _ -> errorEP "ExactP: Bracket: DeclBracket is given too few srcInfoPoints"++printBracket :: ExactP ast => String -> String -> String -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()+printBracket con oBracket cBracket l c =+ case srcInfoPoints l of+ [_,b] -> do+ printString oBracket+ exactPC c+ printStringAt (pos b) cBracket+ _ -> errorEP $ "ExactP: Bracket: " ++ con ++ " is given wrong number of srcInfoPoints"++instance ExactP XAttr where+ exactP (XAttr l xn e) =+ case srcInfoPoints l of+ [a] -> do+ exactP xn+ printStringAt (pos a) "="+ exactPC e+ _ -> errorEP "ExactP: XAttr is given wrong number of srcInfoPoints"++instance ExactP Alt where+ exactP (Alt l p galts mbs) = do+ exactP p+ exactPC (GuardedAlts galts)+ maybeEP (\bs -> printStringAt (pos (head (srcInfoPoints l))) "where" >> exactPC bs) mbs++instance ExactP Match where+ exactP (Match l n ps rhs mbinds) = do+ let pts = srcInfoPoints l+ len = length pts+ pars = len `div` 2+ (oPars,cParsWh) = splitAt pars pts+ (cPars,_) = splitAt pars cParsWh -- _§ is either singleton or empty+ printStrs (zip oPars (repeat "("))+ exactPC n+ printStreams (zip (map pos cPars) (repeat $ printString ")")) (map (pos . ann &&& exactPC) ps)+ exactPC rhs+ maybeEP (\bds -> printStringAt (pos (head pts)) "where" >> exactPC bds) mbinds+ exactP (InfixMatch l a n bs rhs mbinds) = do+ let pts = srcInfoPoints l+ len = length pts+ pars = len `div` 2+ (oPars,cParsWh) = splitAt pars pts+ (cPars,whPt) = splitAt pars cParsWh -- whPt is either singleton or empty+ printStrs (zip oPars (repeat "("))+ exactPC a+ epInfixName n+ printInterleaved' (zip cPars (repeat ")")) bs+ exactPC rhs+ maybeEP (\bds -> printStringAt (pos (head whPt)) "where" >> exactPC bds) mbinds++instance ExactP Rhs where+ exactP (UnGuardedRhs _ e) = printString "=" >> exactPC e+ exactP (GuardedRhss _ grhss) = mapM_ exactPC grhss++instance ExactP GuardedRhs where+ exactP (GuardedRhs l ss e) =+ case srcInfoPoints l of+ _:pts -> do+ printString "|"+ printInterleaved' (zip (init pts) (repeat ",") ++ [(last pts, "=")]) ss+ exactPC e+ _ -> errorEP "ExactP: GuardedRhs is given wrong number of srcInfoPoints"++newtype GuardedAlts l = GuardedAlts (Rhs l)+ deriving (Functor, Show)+instance Annotated GuardedAlts where+ amap f (GuardedAlts v) = GuardedAlts (amap f v)+ ann (GuardedAlts v) = ann v++newtype GuardedAlt l = GuardedAlt (GuardedRhs l)+ deriving (Functor, Show)+instance Annotated GuardedAlt where+ amap f (GuardedAlt v) = GuardedAlt (amap f v)+ ann (GuardedAlt v) = ann v++instance ExactP GuardedAlts where+ exactP (GuardedAlts (UnGuardedRhs _ e)) = printString "->" >> exactPC e+ exactP (GuardedAlts (GuardedRhss _ grhss)) = mapM_ (exactPC . GuardedAlt) grhss++instance ExactP GuardedAlt where+ exactP (GuardedAlt (GuardedRhs l ss e)) =+ case srcInfoPoints l of+ _:pts -> do+ printString "|"+ printInterleaved' (zip (init pts) (repeat ",") ++ [(last pts, "->")]) ss+ exactPC e+ _ -> errorEP "ExactP: GuardedAlt is given wrong number of srcInfoPoints"++instance ExactP Pat where+ exactP pat = case pat of+ PVar l n -> exactPC (fmap (const l) n)+ PLit _ sg lit -> exactPC sg >> exactPC lit+ PNPlusK l n k ->+ case srcInfoPoints l of+ [a,b] -> do+ exactP n+ printStringAt (pos a) "+"+ printStringAt (pos b) (show k)+ _ -> errorEP "ExactP: Pat: PNPlusK is given wrong number of srcInfoPoints"+ PInfixApp _ pa qn pb -> exactP pa >> epInfixQName qn >> exactPC pb+ PApp _ qn ps -> exactP qn >> mapM_ exactPC ps+ PTuple l bx ps ->+ case bx of+ Boxed -> parenList (srcInfoPoints l) ps+ Unboxed -> parenHashList (srcInfoPoints l) ps+ PUnboxedSum l before after e ->+ unboxedSumEP l before after e+ PList l ps -> squareList (srcInfoPoints l) ps+ PParen l p -> parenList (srcInfoPoints l) [p]+ PRec l qn pfs -> exactP qn >> curlyList (srcInfoPoints l) pfs+ PAsPat l n p ->+ case srcInfoPoints l of+ [a] -> do+ exactP n+ printStringAt (pos a) "@"+ exactPC p+ _ -> errorEP "ExactP: Pat: PAsPat is given wrong number of srcInfoPoints"+ PWildCard _ -> printString "_"+ PIrrPat _ p -> printString "~" >> exactPC p+ PatTypeSig l p t ->+ case srcInfoPoints l of+ [a] -> do+ exactP p+ printStringAt (pos a) "::"+ exactPC t+ _ -> errorEP "ExactP: Pat: PatTypeSig is given wrong number of srcInfoPoints"+ PViewPat l e p ->+ case srcInfoPoints l of+ [a] -> do+ exactP e+ printStringAt (pos a) "->"+ exactPC p+ _ -> errorEP "ExactP: Pat: PViewPat is given wrong number of srcInfoPoints"+ PRPat l rps -> squareList (srcInfoPoints l) rps+ PXTag l xn attrs mat ps ->+ case srcInfoPoints l of+ [_,b,c,d,e] -> do+ printString "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) ">"+ mapM_ exactPC ps+ printStringAt (pos c) "</"+ printWhitespace (pos d)+ exactP xn+ printStringAt (pos e) ">"+ -- Optional semi+ [_,b,semi,c,d,e] -> do+ printString "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) ">"+ mapM_ exactPC ps+ printSemi semi+ printStringAt (pos c) "</"+ printWhitespace (pos d)+ exactP xn+ printStringAt (pos e) ">"+ _ -> errorEP "ExactP: Pat: PXTag is given wrong number of srcInfoPoints"+ PXETag l xn attrs mat ->+ case srcInfoPoints l of+ [_,b] -> do+ printString "<"+ exactPC xn+ mapM_ exactPC attrs+ maybeEP exactPC mat+ printStringAt (pos b) "/>"+ _ -> errorEP "ExactP: Pat: PXETag is given wrong number of srcInfoPoints"+ PXPcdata _ str -> printString str+ PXPatTag l p ->+ case srcInfoPoints l of+ [_,_] -> do+ printString "<%"+ exactPC p+ printString "%>"+ _ -> errorEP "ExactP: Pat: PXPatTag is given wrong number of srcInfoPoints"+ PXRPats l rps -> bracketList ("<[",",","]>") (srcInfoPoints l) rps+ PSplice _ sp -> exactP sp+ PQuasiQuote _ name qt -> printString $ "[$" ++ name ++ "|" ++ qt ++ "]"+ PBangPat _ p -> printString "!" >> exactPC p++instance ExactP PatField where+ exactP pf = case pf of+ PFieldPat l qn p ->+ case srcInfoPoints l of+ [a] -> do+ exactP qn+ printStringAt (pos a) "="+ exactPC p+ _ -> errorEP "ExactP: PatField: PFieldPat is given wrong number of srcInfoPoints"+ PFieldPun _ n -> exactP n+ PFieldWildcard _ -> printString ".."++instance ExactP RPat where+ exactP rpat = case rpat of+ RPOp _ rp op -> exactP rp >> exactPC op+ RPEither l r1 r2 ->+ case srcInfoPoints l of+ [a] -> do+ exactP r1+ printStringAt (pos a) "|"+ exactPC r2+ _ -> errorEP "ExactP: RPat: RPEither is given wrong number of srcInfoPoints"+ RPSeq l rps -> bracketList ("(|",",","|)") (srcInfoPoints l) rps+ RPGuard l p stmts ->+ case srcInfoPoints l of+ _:pts -> do+ printString "(|"+ exactPC p+ bracketList ("|",",","|)") pts stmts+ _ -> errorEP "ExactP: RPat: RPGuard is given wrong number of srcInfoPoints"+ RPCAs l n rp ->+ case srcInfoPoints l of+ [a] -> do+ exactP n+ printStringAt (pos a) "@:"+ exactPC rp+ _ -> errorEP "ExactP: RPat: RPCAs is given wrong number of srcInfoPoints"+ RPAs l n rp ->+ case srcInfoPoints l of+ [a] -> do+ exactP n+ printStringAt (pos a) "@"+ exactPC rp+ _ -> errorEP "ExactP: RPat: RPAs is given wrong number of srcInfoPoints"+ RPParen l rp -> parenList (srcInfoPoints l) [rp]+ RPPat _ p -> exactP p++instance ExactP RPatOp where+ exactP rop = printString $ case rop of+ RPStar _ -> "*"+ RPStarG _ -> "*!"+ RPPlus _ -> "+"+ RPPlusG _ -> "+!"+ RPOpt _ -> "?"+ RPOptG _ -> "?!"++instance ExactP PXAttr where+ exactP (PXAttr l xn p) =+ case srcInfoPoints l of+ [a] -> do+ exactP xn+ printStringAt (pos a) "="+ exactPC p+ _ -> errorEP "ExactP: PXAttr is given wrong number of srcInfoPoints"++instance ExactP XName where+ exactP xn = case xn of+ XName _ name -> printString name+ XDomName l dom name ->+ case srcInfoPoints l of+ [_,b,c] -> do+ printString dom+ printStringAt (pos b) ":"+ printStringAt (pos c) name+ _ -> errorEP "ExactP: XName: XDomName is given wrong number of srcInfoPoints"++instance ExactP Binds where+ exactP (BDecls l ds) = layoutList (srcInfoPoints l) (sepFunBinds ds)+ exactP (IPBinds l ips) = layoutList (srcInfoPoints l) ips++instance ExactP CallConv where+ exactP (StdCall _) = printString "stdcall"+ exactP (CCall _) = printString "ccall"+ exactP (CPlusPlus _) = printString "cplusplus"+ exactP (DotNet _) = printString "dotnet"+ exactP (Jvm _) = printString "jvm"+ exactP (Js _) = printString "js"+ exactP (JavaScript _) = printString "javascript"+ exactP (CApi _) = printString "capi"++instance ExactP Safety where+ exactP (PlayRisky _) = printString "unsafe"+ exactP (PlaySafe _ b) = printString $ if b then "threadsafe" else "safe"+ exactP (PlayInterruptible _) = printString "interruptible"++instance ExactP Rule where+ exactP (Rule l str mact mrvs e1 e2) =+ case srcInfoPoints l of+ _:pts -> do+ printString (show str)+ maybeEP exactP mact+ pts1 <- case mrvs of+ Nothing -> return pts+ Just rvs ->+ case pts of+ a':b:pts' -> do+ printStringAt (pos a') "forall"+ mapM_ exactPC rvs+ printStringAt (pos b) "."+ return pts'+ _ -> errorEP "ExactP: Rule is given too few srcInfoPoints"+ case pts1 of+ [x] -> do+ exactPC e1+ printStringAt (pos x) "="+ exactPC e2+ _ -> errorEP "ExactP: Rule is given wrong number of srcInfoPoints"+ _ -> errorEP "ExactP: Rule is given too few srcInfoPoints"++instance ExactP RuleVar where+ exactP (TypedRuleVar l n t) =+ case srcInfoPoints l of+ [_,b,c] -> do+ printString "("+ exactPC n+ printStringAt (pos b) "::"+ exactPC t+ printStringAt (pos c) ")"+ _ -> errorEP "ExactP: RuleVar: TypedRuleVar is given wrong number of srcInfoPoints"+ exactP (RuleVar _ n) = exactP n++instance ExactP Overlap where+ exactP (NoOverlap _) =+ printString "{-# NO_OVERLAP #-}"+ exactP (Overlap _) =+ printString "{-# OVERLAP #-}"+ exactP (Overlaps _) =+ printString "{-# OVERLAPS #-}"+ exactP (Overlapping _) =+ printString "{-# OVERLAPPING #-}"+ exactP (Overlappable _) =+ printString "{-# OVERLAPPABLE #-}"+ exactP (Incoherent _) =+ printString "{-# INCOHERENT #-}"++instance ExactP Activation where+ exactP (ActiveFrom l i) =+ printPoints l ["[", show i, "]"]+ exactP (ActiveUntil l i) =+ printPoints l ["[", "~", show i, "]"]++instance ExactP FieldDecl where+ exactP (FieldDecl l ns bt) = do+ let pts = srcInfoPoints l+ printInterleaved' (zip (init pts) (repeat ",") ++ [(last pts, "::")]) ns+ exactPC bt++instance ExactP IPBind where+ exactP (IPBind l ipn e) =+ case srcInfoPoints l of+ [a] -> do+ exactP ipn+ printStringAt (pos a) "="+ exactPC e+ _ -> errorEP "ExactP: IPBind is given wrong number of srcInfoPoints"++-- Hopefully, this will never fire.+-- If it does, hopefully by that time https://github.com/sol/rewrite-with-location+-- will be implemented.+-- If not, then removing all calls to internalError should give a better+-- idea where the error comes from.+-- So far, it's necessary to eliminate non-exhaustive patterns warnings.+-- We don't want to turn them off, as we want unhandled AST nodes to be+-- reported.+internalError :: String -> a+internalError loc' = error $ unlines+ [ "haskell-src-exts: ExactPrint: internal error (non-exhaustive pattern)"+ , "Location: " ++ loc'+ , "This is either caused by supplying incorrect location information or by"+ , "a bug in haskell-src-exts. If this happens on an unmodified AST obtained"+ , "by the haskell-src-exts Parser it is a bug, please it report it at"+ , "https://github.com/haskell-suite/haskell-src-exts"]
@@ -1,37 +1,39 @@-{-# OPTIONS_HADDOCK hide #-} ------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.ExtScheme --- Copyright : (c) Niklas Broberg 2009 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : stable --- Portability : portable --- --- Internal scheme for handling extensions in a --- convenient fashion. --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.ExtScheme where - -import Language.Haskell.Exts.Extension - -data ExtScheme = Any [Extension] | All [Extension] - deriving (Eq,Show) - -type MExtScheme = Maybe ExtScheme - -class Enabled a where - isEnabled :: a -> [Extension] -> Bool - -instance Enabled Extension where - isEnabled = elem - -instance Enabled ExtScheme where - isEnabled (Any exts) enabled = any (`elem` enabled) exts - isEnabled (All exts) enabled = all (`elem` enabled) exts - -instance Enabled a => Enabled (Maybe a) where - isEnabled Nothing = const True - isEnabled (Just a) = isEnabled a +{-# LANGUAGE Safe #-}+{-# OPTIONS_HADDOCK hide #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.ExtScheme+-- Copyright : (c) Niklas Broberg 2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Internal scheme for handling extensions in a+-- convenient fashion.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.ExtScheme where++import Language.Haskell.Exts.Extension++data ExtScheme = Any [KnownExtension] | All [KnownExtension]+ deriving (Eq,Show)++type MExtScheme = Maybe ExtScheme++class Enabled a where+ isEnabled :: a -> [KnownExtension] -> Bool++instance Enabled KnownExtension where+ isEnabled = elem++instance Enabled ExtScheme where+ isEnabled (Any exts) enabled = any (`elem` enabled) exts+ isEnabled (All exts) enabled = all (`elem` enabled) exts++instance Enabled a => Enabled (Maybe a) where+ isEnabled Nothing = const True+ isEnabled (Just a) = isEnabled a
@@ -1,250 +1,750 @@------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.Extension --- Copyright : (c) Niklas Broberg 2009 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : transient --- Portability : portable --- --- This entire module should be replaced with --- Language.Haskell.Extension from cabal, but we must --- wait for a release of cabal that includes the --- 'XmlSyntax' and 'RegularPatterns' extensions. --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.Extension ( - -- * Extensions - Extension(..), classifyExtension, impliesExts, - - -- * Extension groups - glasgowExts - - ) where - - --- | This datatype is a copy of the one in Cabal's Language.Haskell.Extension module. --- The intention is to eventually import it from Cabal, but we need to wait for --- the next release of Cabal which includes XmlSyntax and RegularPatterns. -data Extension - = OverlappingInstances - | UndecidableInstances - | IncoherentInstances - | RecursiveDo - | ParallelListComp - | MultiParamTypeClasses - | NoMonomorphismRestriction - | FunctionalDependencies - | ExplicitForall - | Rank2Types - | RankNTypes - | PolymorphicComponents - | ExistentialQuantification - | ScopedTypeVariables - | ImplicitParams - | FlexibleContexts - | FlexibleInstances - | EmptyDataDecls - | CPP - - | KindSignatures - | BangPatterns - | TypeSynonymInstances - | TemplateHaskell - | ForeignFunctionInterface - | Arrows - | Generics - | NoImplicitPrelude - | NamedFieldPuns - | PatternGuards - | GeneralizedNewtypeDeriving - - | ExtensibleRecords - | RestrictedTypeSynonyms - | HereDocuments - | MagicHash - | TypeFamilies - | StandaloneDeriving - - | UnicodeSyntax - | PatternSignatures - | UnliftedFFITypes - | LiberalTypeSynonyms - | TypeOperators - | RecordWildCards - | RecordPuns -- should be deprecated - | DisambiguateRecordFields - | OverloadedStrings - | GADTs - | MonoPatBinds - | NoMonoPatBinds -- should be deprecated - | RelaxedPolyRec - | ExtendedDefaultRules - | UnboxedTuples - | DeriveDataTypeable - | ConstrainedClassMethods - - | PackageImports - - | ImpredicativeTypes - | NewQualifiedOperators - | PostfixOperators - | QuasiQuotes - | TransformListComp - | ViewPatterns - - | XmlSyntax - - | RegularPatterns - - | TupleSections - - | UnknownExtension String - deriving (Eq, Ord, Show, Read) - - --- | Certain extensions imply other extensions, and this function --- makes the implication explicit. This also handles deprecated --- extensions, which imply their replacements. --- The returned valued is the transitive closure of implied --- extensions. -impliesExts :: [Extension] -> [Extension] -impliesExts = go - where go [] = [] - go es = let xs = concatMap implE es - ys = filter (not . flip elem es) xs - in es ++ go ys - - implE e = case e of - TypeFamilies -> [KindSignatures] - ScopedTypeVariables -> [TypeOperators, ExplicitForall] - XmlSyntax -> [RegularPatterns] - RegularPatterns -> [PatternGuards] - RankNTypes -> [Rank2Types] - Rank2Types -> [PolymorphicComponents] - PolymorphicComponents -> [ExplicitForall] - LiberalTypeSynonyms -> [ExplicitForall] - -- Deprecations - RecordPuns -> [NamedFieldPuns] - PatternSignatures -> [ScopedTypeVariables] - e -> [] - --- | List of all known extensions. Poor man's 'Enum' instance --- (we can't enum with the 'UnknownExtension' constructor). -knownExtensions :: [Extension] -knownExtensions = - [ OverlappingInstances - , UndecidableInstances - , IncoherentInstances - , RecursiveDo - , ParallelListComp - , MultiParamTypeClasses - , NoMonomorphismRestriction - , FunctionalDependencies - , ExplicitForall - , Rank2Types - , RankNTypes - , PolymorphicComponents - , ExistentialQuantification - , ScopedTypeVariables - , ImplicitParams - , FlexibleContexts - , FlexibleInstances - , EmptyDataDecls - , CPP - - , KindSignatures - , BangPatterns - , TypeSynonymInstances - , TemplateHaskell - , ForeignFunctionInterface - , Arrows - , Generics - , NoImplicitPrelude - , NamedFieldPuns - , PatternGuards - , GeneralizedNewtypeDeriving - - , ExtensibleRecords - , RestrictedTypeSynonyms - , HereDocuments - , MagicHash - , TypeFamilies - , StandaloneDeriving - - , UnicodeSyntax - , PatternSignatures - , UnliftedFFITypes - , LiberalTypeSynonyms - , TypeOperators ---PArr -- not ready yet, and will probably be renamed to ParallelArrays - , RecordWildCards - , RecordPuns - , DisambiguateRecordFields - , OverloadedStrings - , GADTs - , MonoPatBinds - , NoMonoPatBinds - , RelaxedPolyRec - , ExtendedDefaultRules - , UnboxedTuples - , DeriveDataTypeable - , ConstrainedClassMethods - , PackageImports - , ImpredicativeTypes - , NewQualifiedOperators - , PostfixOperators - , QuasiQuotes - , TransformListComp - , ViewPatterns - , XmlSyntax - , RegularPatterns - , TupleSections - ] - --- | The list of extensions enabled by --- GHC's portmanteau -fglasgow-exts flag. -glasgowExts :: [Extension] -glasgowExts = [ - ForeignFunctionInterface - , UnliftedFFITypes - , GADTs - , ImplicitParams - , ScopedTypeVariables - , UnboxedTuples - , TypeSynonymInstances - , StandaloneDeriving - , DeriveDataTypeable - , FlexibleContexts - , FlexibleInstances - , ConstrainedClassMethods - , MultiParamTypeClasses - , FunctionalDependencies - , MagicHash - , PolymorphicComponents - , ExistentialQuantification - , UnicodeSyntax - , PostfixOperators - , PatternGuards - , LiberalTypeSynonyms - , RankNTypes - , ImpredicativeTypes - , TypeOperators - , RecursiveDo - , ParallelListComp - , EmptyDataDecls - , KindSignatures - , GeneralizedNewtypeDeriving - , TypeFamilies - ] - - - --- | A clever version of read that returns an 'UnknownExtension' --- if the string is not recognised. -classifyExtension :: String -> Extension -classifyExtension str - = case readsPrec 0 str of - [(e,"")] -> e - _ -> UnknownExtension str +{-# LANGUAGE CPP, DeriveDataTypeable, Safe #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Extension+-- Copyright : (c) Niklas Broberg 2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, niklas.broberg@chalmers.se+-- Stability : transient+-- Portability : portable+--+-- This module defines the list of recognized modular features+-- of Haskell, most often (sloppily) referred to as "extensions".+--+-- Closely mimicking the Language.Haskell.Extension module from+-- the Cabal library, this package also includes functionality for+-- "computing" languages as sets of features. Also, we make no+-- promise not to add extensions not yet recognized by Cabal.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.Extension (+ -- * Language definitions+ Language(..),+ knownLanguages,+ classifyLanguage,+ prettyLanguage,++ -- * Extensions+ Extension(..), KnownExtension(..),+ classifyExtension,+ parseExtension, prettyExtension,++ -- * Extension groups+ ghcDefault, glasgowExts,+ knownExtensions, deprecatedExtensions,++ -- * Semantics of extensions applied to languages+ impliesExts, toExtensionList++ ) where++#if __GLASGOW_HASKELL__ < 710+import Control.Applicative ((<$>), (<|>))+#else+import Control.Applicative ((<|>))+#endif+import Data.Array (Array, accumArray, bounds, Ix(inRange), (!))+import Data.List (nub)+import Data.Maybe (fromMaybe)+import Data.Data++-- Copyright notice from Cabal's Language.Haskell.Extension,+-- from which we borrow plenty of features:++{- All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are+met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Isaac Jones nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -}++data Language =++ -- | The Haskell 98 language as defined by the Haskell 98 report.+ -- <http://haskell.org/onlinereport/>+ Haskell98++ -- | The Haskell 2010 language as defined by the Haskell 2010 report.+ -- <http://www.haskell.org/onlinereport/haskell2010>+ | Haskell2010++ -- | The minimal language resulting from disabling all recognized+ -- extensions - including ones that are part of all known language+ -- definitions e.g. MonomorphismRestriction.+ | HaskellAllDisabled++ -- | An unknown language, identified by its name.+ | UnknownLanguage String+ deriving (Show, Read, Eq, Ord, Data, Typeable)++knownLanguages :: [Language]+knownLanguages = [Haskell98, Haskell2010]++classifyLanguage :: String -> Language+classifyLanguage str = fromMaybe (UnknownLanguage str) $ lookup str langTable+ where+ langTable = [ (show lang, lang)+ | lang <- knownLanguages ]++prettyLanguage :: Language -> String+prettyLanguage (UnknownLanguage name) = name+prettyLanguage lang = show lang++-- | This represents language extensions beyond a base 'Language' definition+-- (such as 'Haskell98') that are supported by some implementations, usually+-- in some special mode.++data Extension =+ -- | Enable a known extension+ EnableExtension KnownExtension++ -- | Disable a known extension+ | DisableExtension KnownExtension++ -- | An unknown extension, identified by the name of its @LANGUAGE@+ -- pragma.+ | UnknownExtension String+ deriving (Show, Read, Eq, Ord)+++data KnownExtension =++ -- | [GHC § 7.6.3.4] Allow overlapping class instances,+ -- provided there is a unique most specific instance for each use.+ OverlappingInstances++ -- | [GHC § 7.6.3.3] Ignore structural rules guaranteeing the+ -- termination of class instance resolution. Termination is+ -- guaranteed by a fixed-depth recursion stack, and compilation+ -- may fail if this depth is exceeded.+ | UndecidableInstances++ -- | [GHC § 7.6.3.4] Implies 'OverlappingInstances'. Allow the+ -- implementation to choose an instance even when it is possible+ -- that further instantiation of types will lead to a more specific+ -- instance being applicable.+ | IncoherentInstances++ -- | [GHC § 7.6.3.5] Allow type signatures in instances.+ | InstanceSigs++ -- | [GHC § 7.3.8] Deprecated in GHC. Allows recursive+ -- bindings in @do@ blocks, using the @rec@ keyword.+ | DoRec++ -- | [GHC § 7.3.8.2] Allows recursive bindings using @mdo@, a+ -- variant of @do@, and @rec@.+ | RecursiveDo++ -- | [GHC § 7.3.9] Provide syntax for writing list+ -- comprehensions which iterate over several lists together, like+ -- the 'zipWith' family of functions.+ | ParallelListComp++ -- | [GHC § 7.6.1.1] Allow multiple parameters in a type class.+ | MultiParamTypeClasses++ -- | [GHC § 7.17] Enable the dreaded monomorphism restriction.+ | MonomorphismRestriction++ -- | [GHC § 7.6.2] Allow a specification attached to a+ -- multi-parameter type class which indicates that some parameters+ -- are entirely determined by others. The implementation will check+ -- that this property holds for the declared instances, and will use+ -- this property to reduce ambiguity in instance resolution.+ | FunctionalDependencies++ -- | [GHC § 7.8.5] Like 'RankNTypes' but does not allow a+ -- higher-rank type to itself appear on the left of a function+ -- arrow.+ | Rank2Types++ -- | [GHC § 7.8.5] Allow a universally-quantified type to occur on+ -- the left of a function arrow.+ | RankNTypes++ -- | [GHC § 7.8.5] Allow data constructors to have polymorphic+ -- arguments. Unlike 'RankNTypes', does not allow this for ordinary+ -- functions.+ | PolymorphicComponents++ -- | [GHC § 7.4.4] Allow existentially-quantified data constructors.+ | ExistentialQuantification++ -- | [GHC § 7.8.7] Cause a type variable in a signature, which has an+ -- explicit @forall@ quantifier, to scope over the definition of the+ -- accompanying value declaration.+ | ScopedTypeVariables++ -- | Deprecated, use 'ScopedTypeVariables' instead.+ | PatternSignatures++ -- | [GHC § 7.8.3] Enable implicit function parameters with dynamic+ -- scope.+ | ImplicitParams++ -- | [GHC § 7.8.2] Relax some restrictions on the form of the context+ -- of a type signature.+ | FlexibleContexts++ -- | [GHC § 7.6.3.2] Relax some restrictions on the form of the+ -- context of an instance declaration.+ | FlexibleInstances++ -- | [GHC § 7.4.1] Allow data type declarations with no constructors.+ | EmptyDataDecls++ -- | [GHC § 4.10.3] Run the C preprocessor on Haskell source code.+ | CPP++ -- | [GHC § 7.8.4] Allow an explicit kind signature giving the kind of+ -- types over which a type variable ranges.+ | KindSignatures++ -- | [GHC § 7.11] Enable a form of pattern which forces evaluation+ -- before an attempted match, and a form of strict @let@/@where@+ -- binding.+ | BangPatterns++ -- | [GHC § 7.6.3.1] Allow type synonyms in instance heads.+ | TypeSynonymInstances++ -- | [GHC § 7.9] Enable Template Haskell, a system for compile-time+ -- metaprogramming.+ | TemplateHaskell++ -- | [GHC § 8] Enable the Foreign Function Interface. In GHC,+ -- implements the standard Haskell 98 Foreign Function Interface+ -- Addendum, plus some GHC-specific extensions.+ | ForeignFunctionInterface++ -- | [GHC § 7.10] Enable arrow notation.+ | Arrows++ -- | [GHC § 7.16] Enable generic type classes, with default instances+ -- defined in terms of the algebraic structure of a type.+ | Generics++ -- | [GHC § 7.3.11] Enable the implicit importing of the module+ -- @Prelude@. When disabled, when desugaring certain built-in syntax+ -- into ordinary identifiers, use whatever is in scope rather than the+ -- @Prelude@ -- version.+ | ImplicitPrelude++ -- | [GHC § 7.3.15] Enable syntax for implicitly binding local names+ -- corresponding to the field names of a record. Puns bind specific+ -- names, unlike 'RecordWildCards'.+ | NamedFieldPuns++ -- | [GHC § 7.3.5] Enable a form of guard which matches a pattern and+ -- binds variables.+ | PatternGuards++ -- | [GHC § 7.5.4] Allow a type declared with @newtype@ to use+ -- @deriving@ for any class with an instance for the underlying type.+ | GeneralizedNewtypeDeriving++ -- | [GHC § 9.6.10] Allow use of any typeclass in deriving clauses.+ | DeriveAnyClass++ -- | [Hugs § 7.1] Enable the \"Trex\" extensible records system.+ | ExtensibleRecords++ -- | [Hugs § 7.2] Enable type synonyms which are transparent in+ -- some definitions and opaque elsewhere, as a way of implementing+ -- abstract datatypes.+ | RestrictedTypeSynonyms++ -- | [Hugs § 7.3] Enable an alternate syntax for string literals,+ -- with string templating.+ | HereDocuments++ -- | [GHC § 7.3.2] Allow the character @#@ as a postfix modifier on+ -- identifiers. Also enables literal syntax for unboxed values.+ | MagicHash++ -- | Binary integer literals+ | BinaryLiterals++ -- | [GHC § 7.7] Allow data types and type synonyms which are+ -- indexed by types, i.e. ad-hoc polymorphism for types.+ | TypeFamilies++ -- | [GHC § 7.5.2] Allow a standalone declaration which invokes the+ -- type class @deriving@ mechanism.+ | StandaloneDeriving++ -- | [GHC § 7.3.1] Allow certain Unicode characters to stand for+ -- certain ASCII character sequences, e.g. keywords and punctuation.+ | UnicodeSyntax++ -- | [GHC § 8.1.1] Allow the use of unboxed types as foreign types,+ -- e.g. in @foreign import@ and @foreign export@.+ | UnliftedFFITypes++ -- | [GHC § 7.4.3] Defer validity checking of types until after+ -- expanding type synonyms, relaxing the constraints on how synonyms+ -- may be used.+ | LiberalTypeSynonyms++ -- | [GHC § 7.4.2] Allow the name of a type constructor, type class,+ -- or type variable to be an infix operator.+ | TypeOperators++ -- | [GHC § 7.26.5] Parallel arrays for Data Parallel Haskell.+ | ParallelArrays++ -- | [GHC § 7.3.16] Enable syntax for implicitly binding local names+ -- corresponding to the field names of a record. A wildcard binds+ -- all unmentioned names, unlike 'NamedFieldPuns'.+ | RecordWildCards++ -- | Deprecated, use 'NamedFieldPuns' instead.+ | RecordPuns++ -- | [GHC § 7.3.14] Allow a record field name to be disambiguated+ -- by the type of the record it's in.+ | DisambiguateRecordFields++ -- | [GHC § 7.6.4] Enable overloading of string literals using a+ -- type class, much like integer literals.+ | OverloadedStrings++ -- | [GHC § 7.4.6] Enable generalized algebraic data types, in+ -- which type variables may be instantiated on a per-constructor+ -- basis. Implies GADTSyntax.+ | GADTs++{- GADTSyntax (the extension name) not yet supported by HSE++ -- | Enable GADT syntax for declaring ordinary algebraic datatypes.+ | GADTSyntax++-}++ -- | [GHC § 7.17.2] Make pattern bindings monomorphic.+ | MonoPatBinds++ -- | [GHC § 7.8.8] Relax the requirements on mutually-recursive+ -- polymorphic functions.+ | RelaxedPolyRec++ -- | [GHC § 2.4.5] Allow default instantiation of polymorphic+ -- types in more situations.+ | ExtendedDefaultRules++ -- | [GHC § 7.2.2] Enable unboxed tuples.+ | UnboxedTuples++ -- | [GHC § 7.5.3] Enable @deriving@ for classes+ -- @Data.Typeable.Typeable@ and @Data.Generics.Data@.+ | DeriveDataTypeable++ -- | [GHC § 7.6.1.3] Allow a class method's type to place+ -- additional constraints on a class type variable.+ | ConstrainedClassMethods++ -- | [GHC § 7.3.18] Allow imports to be qualified by the package+ -- name the module is intended to be imported from, e.g.+ --+ -- > import "network" Network.Socket+ | PackageImports++ | ImportQualifiedPost++ | LambdaCase++ -- | [GHC § 7.3.20] Allow case expressions with no alternatives.+ | EmptyCase++ -- | [GHC § 7.8.6] Deprecated in GHC 6.12 and will be removed in+ -- GHC 7. Allow a type variable to be instantiated at a+ -- polymorphic type.+ | ImpredicativeTypes++ -- | [GHC § 7.3.3] Change the syntax for qualified infix+ -- operators.+ | NewQualifiedOperators++ -- | [GHC § 7.3.12] Relax the interpretation of left operator+ -- sections to allow unary postfix operators.+ | PostfixOperators++ -- | [GHC § 7.9.5] Enable quasi-quotation, a mechanism for defining+ -- new concrete syntax for expressions and patterns.+ | QuasiQuotes++ -- | [GHC § 7.3.10] Enable generalized list comprehensions,+ -- supporting operations such as sorting and grouping.+ | TransformListComp++ -- | [GHC § 7.3.6] Enable view patterns, which match a value by+ -- applying a function and matching on the result.+ | ViewPatterns++ -- | Allow concrete XML syntax to be used in expressions and patterns,+ -- as per the Haskell Server Pages extension language:+ -- <http://www.haskell.org/haskellwiki/HSP>. The ideas behind it are+ -- discussed in the paper \"Haskell Server Pages through Dynamic Loading\"+ -- by Niklas Broberg, from Haskell Workshop '05.+ | XmlSyntax++ -- | Allow regular pattern matching over lists, as discussed in the+ -- paper \"Regular Expression Patterns\" by Niklas Broberg, Andreas Farre+ -- and Josef Svenningsson, from ICFP '04.+ | RegularPatterns++ -- | Enables the use of tuple sections, e.g. @(, True)@ desugars into+ -- @\x -> (x, True)@.+ | TupleSections++ -- | Allows GHC primops, written in C--, to be imported into a Haskell+ -- file.+ | GHCForeignImportPrim++ -- | Support for patterns of the form @n + k@, where @k@ is an+ -- integer literal.+ | NPlusKPatterns++ -- | Improve the layout rule when @if@ expressions are used in a @do@+ -- block.+ | DoAndIfThenElse++ -- | Makes much of the Haskell sugar be desugared into calls to the+ -- function with a particular name that is in scope.+ | RebindableSyntax++ -- | Make @forall@ a keyword in types, which can be used to give the+ -- generalisation explicitly.+ | ExplicitForAll++ -- | Allow contexts to be put on datatypes, e.g. the @Eq a@ in+ -- @data Eq a => Set a = NilSet | ConsSet a (Set a)@.+ | DatatypeContexts++ -- | Local (@let@ and @where@) bindings are monomorphic.+ | MonoLocalBinds++ -- | Enable @deriving@ for the @Data.Functor.Functor@ class.+ | DeriveFunctor++ -- | [GHC § 7.5.3] Enable @deriving@ for the @Generic@ and @Generic1@ classes.+ | DeriveGeneric++ -- | Enable @deriving@ for the @Data.Traversable.Traversable@ class.+ | DeriveTraversable++ -- | Enable @deriving@ for the @Data.Foldable.Foldable@ class.+ | DeriveFoldable++ -- | Enable non-decreasing indentation for 'do' blocks.+ | NondecreasingIndentation++ -- | [GHC § 8.1.4] Enable interruptible FFI.+ | InterruptibleFFI++ -- | [GHC § 8.1.5] Enable the 'capi' calling convention in the+ -- foreign function interface.+ | CApiFFI++ -- | GHCJS FFI extension with convenient import patterns,+ -- asynchronous FFI and a JSVal FFI type+ | JavaScriptFFI++ -- | [GHC § 7.3.27] Enable explicit namespaces in import/export.+ | ExplicitNamespaces++ | DataKinds++ | PolyKinds++ -- | [GHC § 7.3.16] Enable the multi-way if-expressions+ -- extension to accept conditional expressions with multiple branches.+ | MultiWayIf++ -- | [GHC § 7.20.3] Allow imports to be qualified with a safe+ -- keyword that requires the imported module be trusted as according+ -- to the Safe Haskell definition of trust.+ --+ -- > import safe Network.Socket+ | SafeImports++ -- | [GHC § 7.20] Compile a module in the Safe, Safe Haskell+ -- mode -- a restricted form of the Haskell language to ensure+ -- type safety.+ | Safe++ -- | [GHC § 7.20] Compile a module in the Trustworthy, Safe+ -- Haskell mode -- no restrictions apply but the module is marked+ -- as trusted as long as the package the module resides in is+ -- trusted.+ | Trustworthy++ -- | [GHC § 7.6.1.4] Allow default signatures in class+ -- definitions. They apply to default methods implemented in this+ -- class.+ | DefaultSignatures+++-- ConstraintKinds not generally supported by HSE. This flag makes RCategory2.hs+-- pass testing though.++ -- | [GHC § 7.40] Allow type class/implicit parameter/equality+ -- constraints to be used as types with the special kind Constraint.+ -- Also generalise the (ctxt => ty) syntax so that any type of kind+ -- Constraint can occur before the arrow.+ | ConstraintKinds++ -- | [GHC § 7.25.3] Allow role annotations.+ | RoleAnnotations+ -- | [GHC § 7.3.8] Enable giving names to parametrized pattern+ -- schemes+ | PatternSynonyms++ -- | [GHC § 7.15] Allow partial specified type signatures.+ -- Note that this extension does not affect parsing. It only affects whether the+ -- program is able to be run with partial signatures.+ | PartialTypeSignatures++ -- | [GHC § 7.15.1.2] This extension treats type variables which+ -- start with an underscore as wildcards. For example, `foo :: _x` is+ -- equivalent to `foo :: _`.+ | NamedWildCards++ | TypeApplications++ | TypeFamilyDependencies++ | OverloadedLabels++ -- | Allow multiple @deriving@ clauses, each optionally qualified with a+ -- /strategy/.+ | DerivingStrategies++ | UnboxedSums++ | TypeInType++ | Strict++ | StrictData++ -- | Enable deriving instances via types of the same runtime representation.+ -- Implies 'DerivingStrategies'.+ | DerivingVia++ | QuantifiedConstraints++ | BlockArguments++ deriving (Show, Read, Eq, Ord, Enum, Bounded, Data, Typeable)++-- | Certain extensions imply other extensions, and this function+-- makes the implication explicit. This also handles deprecated+-- extensions, which imply their replacements.+-- The returned value is the transitive closure of implied+-- extensions.+{-impliesExts :: [Extension] -> [Extension]+impliesExts exts =+ let posExts = [ ke | EnableExtension ke <- exts ]+ negExts = [ ke | DisableExtension ke <- exts ]++ implExts = impliesKnownExts posExts+ in+-}+impliesExts :: [KnownExtension] -> [KnownExtension]+impliesExts = go+ where go [] = []+ go es = let xs = concatMap implE es+ ys = filter (not . flip elem es) xs+ in es ++ go ys++ implE e = case e of+ TypeFamilies -> [KindSignatures]+ ScopedTypeVariables -> [TypeOperators, ExplicitForAll]+ XmlSyntax -> [RegularPatterns]+ RegularPatterns -> [PatternGuards]+ RankNTypes -> [Rank2Types, ExplicitForAll]+ Rank2Types -> [PolymorphicComponents, ExplicitForAll]+ PolymorphicComponents -> [ExplicitForAll]+ LiberalTypeSynonyms -> [ExplicitForAll]+ ExistentialQuantification -> [ExplicitForAll]+ ImpredicativeTypes -> [ExplicitForAll]+ PolyKinds -> [KindSignatures]+ TypeFamilyDependencies -> [TypeFamilies]+ TypeInType -> [PolyKinds, DataKinds, KindSignatures]+ TypeOperators -> [ExplicitNamespaces]+ -- Deprecations+ RecordPuns -> [NamedFieldPuns]+ PatternSignatures -> [ScopedTypeVariables]+ DerivingVia -> [DerivingStrategies]+ _ -> []++-- | The list of extensions enabled by+-- GHC's portmanteau -fglasgow-exts flag.+glasgowExts :: [Extension]+glasgowExts = map EnableExtension [+ ForeignFunctionInterface+ , UnliftedFFITypes+ , GADTs+ , ImplicitParams+ , ScopedTypeVariables+ , UnboxedTuples+ , TypeSynonymInstances+ , StandaloneDeriving+ , DeriveDataTypeable+ , FlexibleContexts+ , FlexibleInstances+ , ConstrainedClassMethods+ , MultiParamTypeClasses+ , FunctionalDependencies+ , MagicHash+ , PolymorphicComponents+ , ExistentialQuantification+ , UnicodeSyntax+ , PostfixOperators+ , PatternGuards+ , LiberalTypeSynonyms+ , RankNTypes+ , ImpredicativeTypes+ , TypeOperators+ , RecursiveDo+ , ParallelListComp+ , EmptyDataDecls+ , KindSignatures+ , GeneralizedNewtypeDeriving+ , TypeFamilies+ ]++-- Not exported, just used locally in several places.+allLangDefault :: [KnownExtension]+allLangDefault = [MonomorphismRestriction, MonoPatBinds, ImplicitPrelude]++ghcDefault :: [Extension]+ghcDefault = map EnableExtension (NondecreasingIndentation:allLangDefault)++-- | List of all known extensions, both \"yes\" and \"no\" versions.+knownExtensions :: [Extension]+knownExtensions =+ concat [ [EnableExtension x, DisableExtension x] | x <- [minBound..maxBound] ]++-- | Extensions that have been deprecated, possibly paired with another+-- extension that replaces it.+--+deprecatedExtensions :: [(Extension, Maybe Extension)]+deprecatedExtensions =+ [ (EnableExtension RecordPuns, Just (EnableExtension NamedFieldPuns))+ , (EnableExtension PatternSignatures, Just (EnableExtension ScopedTypeVariables))+ ]++++-- | A clever version of read that returns an 'UnknownExtension'+-- if the string is not recognised.+classifyExtension :: String -> Extension+classifyExtension string+ = case classifyKnownExtension string of+ Just ext -> EnableExtension ext+ Nothing ->+ case string of+ 'N':'o':string' ->+ case classifyKnownExtension string' of+ Just ext -> DisableExtension ext+ Nothing -> UnknownExtension string+ _ -> UnknownExtension string+++classifyKnownExtension :: String -> Maybe KnownExtension+classifyKnownExtension "" = Nothing+classifyKnownExtension string@(c : _)+ | inRange (bounds knownExtensionTable) c+ = lookup string (knownExtensionTable ! c)+ | otherwise = Nothing++knownExtensionTable :: Array Char [(String, KnownExtension)]+knownExtensionTable =+ accumArray (flip (:)) [] ('A', 'Z')+ [ (head str, (str, extension))+ | extension <- [toEnum 0 ..]+ , let str = show extension ]++-- | Parse an enabled or disabled extension; returns+-- 'UnknownExtension' if the parse fails.+parseExtension :: String -> Extension+parseExtension str = fromMaybe (UnknownExtension str) $+ EnableExtension <$> readMay str+ <|> DisableExtension <$> (readMay =<< dropNo str)+ where+ dropNo ('N':'o':rest) = Just rest+ dropNo _ = Nothing++-- | Pretty print an extension. Disabled extensions are prefixed with+-- \'No\'.+prettyExtension :: Extension -> String+prettyExtension (EnableExtension ext) = show ext+prettyExtension (DisableExtension ext) = "No" ++ show ext+prettyExtension (UnknownExtension str) = str++readMay :: Read a => String -> Maybe a+readMay s = case [x | (x,t) <- reads s, ("","") <- lex t] of+ [x] -> Just x+ _ -> Nothing++{-------------------------------------------+ -- Transform a 'Language', and possibly a modifying set of'Extension's, into a list+ -- of 'KnownExtension's, to be interpreted as modifying the language you get+ -- when all known extensions are disabled.+ -- Extensions are interpreted in a right-biased fashion, so the last instance+ -- of an occurence of 'EnableExtension' or 'DisableExtension' for a given+ -- 'KnownExtension' takes precedence.+ -------------------------------------------}++toExtensionList :: Language -> [Extension] -> [KnownExtension]+toExtensionList lang exts' =+ let langKes = case lang of+ Haskell98 -> NPlusKPatterns:allLangDefault+ Haskell2010 -> [DoAndIfThenElse+ , PatternGuards+ , ForeignFunctionInterface+ , EmptyDataDecls+ ] ++ allLangDefault+ HaskellAllDisabled -> []+ UnknownLanguage s ->+ error $ "toExtensionList: Unknown language " ++ s+{-+ addExts = [ ke | EnableExtension ke <- exts ]+ remExts = [ ke | DisableExtension ke <- exts ]+ in impliesExts $ nub $ (langKes ++ addExts) \\ remExts+-}+ in impliesExts $ nub $ go langKes exts'+ where go :: [KnownExtension] -> [Extension] -> [KnownExtension]+ go acc [] = acc+ go acc (DisableExtension x : exts) = go (filter (/= x) acc) exts+ go acc (EnableExtension x : exts) = go (x : acc) exts+ -- We just throw away UnknownExtensions+ go acc (_ : exts) = go acc exts
@@ -1,344 +1,450 @@------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.Fixity --- Copyright : (c) Niklas Broberg 2009 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : stable --- Portability : portable --- --- Fixity information to give the parser so that infix operators can --- be parsed properly. --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.Fixity - ( - -- * Fixity representation - Fixity(..) - -- | The following three functions all create lists of - -- fixities from textual representations of operators. - -- The intended usage is e.g. - -- - -- > fixs = infixr_ 0 ["$","$!","`seq`"] - -- - -- Note that the operators are expected as you would - -- write them infix, i.e. with ` characters surrounding - -- /varid/ operators, and /varsym/ operators written as is. - , infix_, infixl_, infixr_ - -- ** Collections of fixities - , preludeFixities, baseFixities - - -- * Applying fixities to an AST - , AppFixity(..) - ) where - -import Language.Haskell.Exts.Syntax - -import Data.Char (isUpper) - --- | Operator fixities are represented by their associativity --- (left, right or none) and their precedence (0-9). -data Fixity = Fixity Assoc Int Op - --- | All AST elements that may include expressions which in turn may --- need fixity tweaking will be instances of this class. -class AppFixity ast where - -- | Tweak any expressions in the element to account for the - -- fixities given. Assumes that all operator expressions are - -- fully left associative chains to begin with. - applyFixities :: [Fixity] -- ^ The fixities to account for. - -> ast -- ^ The element to tweak. - -> ast -- ^ The same element, but with operator expressions updated. - - -instance AppFixity Exp where - applyFixities fixs = infFix fixs . leafFix fixs - where -- This is the real meat case. We can assume a left-associative list to begin with. - infFix fixs (InfixApp a op2 z) = - let e = infFix fixs a - in case e of - InfixApp x op1 y -> - let (a1,p1) = askFixity fixs op1 - (a2,p2) = askFixity fixs op2 - in if (p1 == p2 && (a1 /= a2 || a1 == AssocNone)) -- Ambiguous infix expression! - || (p1 > p2 || p1 == p2 && (a1 == AssocLeft || a2 == AssocNone)) -- Already right order - then InfixApp e op2 z - else InfixApp x op1 (infFix fixs $ InfixApp y op2 z) - _ -> InfixApp e op2 z - - infFix _ e = e - - --- Internal: lookup associativity and precedence of an operator -askFixity :: [Fixity] -> QOp -> (Assoc, Int) -askFixity xs = \k -> lookupWithDefault (AssocLeft, 9) (f k) mp - where - lookupWithDefault def k mp = case lookup k mp of - Nothing -> def - Just x -> x - - mp = [(x,(a,p)) | Fixity a p x <- xs] - - f (QVarOp x) = VarOp (g x) - f (QConOp x) = ConOp (g x) - - g (Qual _ x) = x - g (UnQual x) = x - g (Special Cons) = Symbol ":" - - --- | All fixities defined in the Prelude. -preludeFixities :: [Fixity] -preludeFixities = concat - [infixr_ 9 ["."] - ,infixl_ 9 ["!!"] - ,infixr_ 8 ["^","^^","**"] - ,infixl_ 7 ["*","/","`quot`","`rem`","`div`","`mod`",":%","%"] - ,infixl_ 6 ["+","-"] - ,infixr_ 5 [":","++"] - ,infix_ 4 ["==","/=","<","<=",">=",">","`elem`","`notElem`"] - ,infixr_ 3 ["&&"] - ,infixr_ 2 ["||"] - ,infixl_ 1 [">>",">>="] - ,infixr_ 1 ["=<<"] - ,infixr_ 0 ["$","$!","`seq`"] - ] - --- | All fixities defined in the base package. --- --- Note that the @+++@ operator appears in both Control.Arrows and --- Text.ParserCombinators.ReadP. The listed precedence for @+++@ in --- this list is that of Control.Arrows. -baseFixities :: [Fixity] -baseFixities = preludeFixities ++ concat - [infixl_ 9 ["!","//","!:"] - ,infixl_ 8 ["`shift`","`rotate`","`shiftL`","`shiftR`","`rotateL`","`rotateR`"] - ,infixl_ 7 [".&."] - ,infixl_ 6 ["`xor`"] - ,infix_ 6 [":+"] - ,infixl_ 5 [".|."] - ,infixr_ 5 ["+:+","<++","<+>"] -- fixity conflict for +++ between ReadP and Arrow - ,infix_ 5 ["\\\\"] - ,infixl_ 4 ["<$>","<$","<*>","<*","*>","<**>"] - ,infix_ 4 ["`elemP`","`notElemP`"] - ,infixl_ 3 ["<|>"] - ,infixr_ 3 ["&&&","***"] - ,infixr_ 2 ["+++","|||"] - ,infixr_ 1 ["<=<",">=>",">>>","<<<","^<<","<<^","^>>",">>^"] - ,infixl_ 0 ["`on`"] - ,infixr_ 0 ["`par`","`pseq`"] - ] - -infixr_, infixl_, infix_ :: Int -> [String] -> [Fixity] -infixr_ = fixity AssocRight -infixl_ = fixity AssocLeft -infix_ = fixity AssocNone - --- Internal: help function for the above definitions. -fixity :: Assoc -> Int -> [String] -> [Fixity] -fixity a p = map (Fixity a p . op) - where - op ('`':xs) = (if isUpper (head xs) then ConOp else VarOp) $ Ident $ init xs - op xs = (if head xs == ':' then ConOp else VarOp) $ Symbol xs - - - - - - -------------------------------------------------------------------- --- Boilerplate - yuck!! Everything below here is internal stuff - -instance AppFixity Module where - applyFixities fixs (Module loc n prs mwt ext imp decls) = - Module loc n prs mwt ext imp $ appFixDecls fixs decls - -instance AppFixity Decl where - applyFixities fixs decl = case decl of - ClassDecl loc ctxt n vars deps cdecls -> ClassDecl loc ctxt n vars deps $ map fix cdecls - InstDecl loc ctxt n ts idecls -> InstDecl loc ctxt n ts $ map fix idecls - SpliceDecl loc spl -> SpliceDecl loc $ fix spl - FunBind matches -> FunBind $ map fix matches - PatBind loc p mt rhs bs -> PatBind loc (fix p) mt (fix rhs) (fix bs) - _ -> decl - where fix x = applyFixities fixs x - -appFixDecls :: [Fixity] -> [Decl] -> [Decl] -appFixDecls fixs decls = - let extraFixs = getFixities decls - in map (applyFixities (fixs++extraFixs)) decls - where getFixities = concatMap getFixity - getFixity (InfixDecl _ a p ops) = map (Fixity a p) ops - getFixity _ = [] - -instance AppFixity ClassDecl where - applyFixities fixs (ClsDecl decl) = ClsDecl $ applyFixities fixs decl - applyFixities _ cdecl = cdecl - -instance AppFixity InstDecl where - applyFixities fixs (InsDecl decl) = InsDecl $ applyFixities fixs decl - applyFixities _ idecl = idecl - -instance AppFixity Match where - applyFixities fixs (Match loc n ps mt rhs bs) = Match loc n (map fix ps) mt (fix rhs) (fix bs) - where fix x = applyFixities fixs x - -instance AppFixity Rhs where - applyFixities fixs rhs = case rhs of - UnGuardedRhs e -> UnGuardedRhs $ fix e - GuardedRhss grhss -> GuardedRhss $ map fix grhss - where fix x = applyFixities fixs x - -instance AppFixity GuardedRhs where - applyFixities fixs (GuardedRhs loc stmts e) = GuardedRhs loc (map fix stmts) $ fix e - where fix x = applyFixities fixs x - -instance AppFixity Pat where - applyFixities fixs p = case p of - PNeg p -> PNeg $ fix p - PInfixApp a op b -> PInfixApp (fix a) op (fix b) - PApp n ps -> PApp n $ map fix ps - PTuple ps -> PTuple $ map fix ps - PList ps -> PList $ map fix ps - PParen p -> PParen $ fix p - PRec n pfs -> PRec n $ map fix pfs - PAsPat n p -> PAsPat n $ fix p - PIrrPat p -> PIrrPat $ fix p - PatTypeSig loc p t -> PatTypeSig loc (fix p) t - PViewPat e p -> PViewPat (fix e) (fix p) - PRPat rps -> PRPat $ map fix rps - PXTag loc n ats mp ps -> PXTag loc n (map fix ats) (fmap fix mp) (map fix ps) - PXETag loc n ats mp -> PXETag loc n (map fix ats) (fmap fix mp) - PXPatTag p -> PXPatTag $ fix p - PXRPats rps -> PXRPats $ map fix rps - PBangPat p -> PBangPat $ fix p - _ -> p - where fix x = applyFixities fixs x - -instance AppFixity PatField where - applyFixities fixs (PFieldPat n p) = PFieldPat n $ applyFixities fixs p - applyFixities _ pf = pf - -instance AppFixity RPat where - applyFixities fixs rp = case rp of - RPOp rp op -> RPOp (fix rp) op - RPEither a b -> RPEither (fix a) (fix b) - RPSeq rps -> RPSeq $ map fix rps - RPGuard p stmts -> RPGuard (fix p) $ map fix stmts - RPCAs n rp -> RPCAs n $ fix rp - RPAs n rp -> RPAs n $ fix rp - RPParen rp -> RPParen $ fix rp - RPPat p -> RPPat $ fix p - where fix x = applyFixities fixs x - -instance AppFixity PXAttr where - applyFixities fixs (PXAttr n p) = PXAttr n $ applyFixities fixs p - -instance AppFixity Stmt where - applyFixities fixs stmt = case stmt of - Generator loc p e -> Generator loc (fix p) (fix e) - Qualifier e -> Qualifier $ fix e - LetStmt bs -> LetStmt $ fix bs -- special behavior - RecStmt stmts -> RecStmt $ map fix stmts - where fix x = applyFixities fixs x - -instance AppFixity Binds where - applyFixities fixs bs = case bs of - BDecls decls -> BDecls $ appFixDecls fixs decls -- special behavior - IPBinds ips -> IPBinds $ map fix ips - where fix x = applyFixities fixs x - - -instance AppFixity IPBind where - applyFixities fixs (IPBind loc n e) = IPBind loc n $ applyFixities fixs e - -instance AppFixity FieldUpdate where - applyFixities fixs (FieldUpdate n e) = FieldUpdate n $ applyFixities fixs e - applyFixities _ fup = fup - -instance AppFixity Alt where - applyFixities fixs (Alt loc p galts bs) = Alt loc (fix p) (fix galts) (fix bs) - where fix x = applyFixities fixs x - -instance AppFixity GuardedAlts where - applyFixities fixs galts = case galts of - UnGuardedAlt e -> UnGuardedAlt $ fix e - GuardedAlts galts -> GuardedAlts $ map fix galts - where fix x = applyFixities fixs x - -instance AppFixity GuardedAlt where - applyFixities fixs (GuardedAlt loc stmts e) = GuardedAlt loc (map fix stmts) (fix e) - where fix x = applyFixities fixs x - -instance AppFixity QualStmt where - applyFixities fixs qstmt = case qstmt of - QualStmt s -> QualStmt $ fix s - ThenTrans e -> ThenTrans $ fix e - ThenBy e1 e2 -> ThenBy (fix e1) (fix e2) - GroupBy e -> GroupBy (fix e) - GroupUsing e -> GroupUsing (fix e) - GroupByUsing e1 e2 -> GroupByUsing (fix e1) (fix e2) - where fix x = applyFixities fixs x - -instance AppFixity Bracket where - applyFixities fixs br = case br of - ExpBracket e -> ExpBracket $ fix e - PatBracket p -> PatBracket $ fix p - DeclBracket ds -> DeclBracket $ map fix ds - _ -> br - where fix x = applyFixities fixs x - -instance AppFixity Splice where - applyFixities fixs (ParenSplice e) = ParenSplice $ applyFixities fixs e - applyFixities _ s = s - -instance AppFixity XAttr where - applyFixities fixs (XAttr n e) = XAttr n $ applyFixities fixs e - - --- the boring boilerplate stuff for expressions too --- Recursively fixes the "leaves" of the infix chains, --- without yet touching the chain itself. We assume all chains are --- left-associate to begin with. -leafFix fixs e = case e of - InfixApp e1 op e2 -> InfixApp (leafFix fixs e1) op (fix e2) - App e1 e2 -> App (fix e1) (fix e2) - NegApp e -> NegApp $ fix e - Lambda loc pats e -> Lambda loc (map fix pats) $ fix e - Let bs e -> Let (fix bs) $ fix e - If e a b -> If (fix e) (fix a) (fix b) - Case e alts -> Case (fix e) $ map fix alts - Do stmts -> Do $ map fix stmts - MDo stmts -> MDo $ map fix stmts - Tuple exps -> Tuple $ map fix exps - List exps -> List $ map fix exps - Paren e -> Paren $ fix e - LeftSection e op -> LeftSection (fix e) op - RightSection op e -> RightSection op $ fix e - RecConstr n fups -> RecConstr n $ map fix fups - RecUpdate e fups -> RecUpdate (fix e) $ map fix fups - EnumFrom e -> EnumFrom $ fix e - EnumFromTo e1 e2 -> EnumFromTo (fix e1) (fix e2) - EnumFromThen e1 e2 -> EnumFromThen (fix e1) (fix e2) - EnumFromThenTo e1 e2 e3 -> EnumFromThenTo (fix e1) (fix e2) (fix e3) - ListComp e quals -> ListComp (fix e) $ map fix quals - ParComp e qualss -> ParComp (fix e) $ map (map fix) qualss - ExpTypeSig loc e t -> ExpTypeSig loc (fix e) t - BracketExp b -> BracketExp $ fix b - SpliceExp s -> SpliceExp $ fix s - XTag loc n ats mexp cs -> XTag loc n (map fix ats) (fmap fix mexp) (map fix cs) - XETag loc n ats mexp -> XETag loc n (map fix ats) (fmap fix mexp) - XExpTag e -> XExpTag $ fix e - Proc p e -> Proc (fix p) (fix e) - LeftArrApp e1 e2 -> LeftArrApp (fix e1) (fix e2) - RightArrApp e1 e2 -> RightArrApp (fix e1) (fix e2) - LeftArrHighApp e1 e2 -> LeftArrHighApp (fix e1) (fix e2) - RightArrHighApp e1 e2 -> RightArrHighApp (fix e1) (fix e2) - CorePragma s e -> CorePragma s (fix e) - SCCPragma s e -> SCCPragma s (fix e) - GenPragma s ab cd e -> GenPragma s ab cd (fix e) - - _ -> e - where +{-# LANGUAGE CPP, DeriveDataTypeable, Safe #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Fixity+-- Copyright : (c) Niklas Broberg 2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Fixity information to give the parser so that infix operators can+-- be parsed properly.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.Fixity+ (+ -- * Fixity representation+ Fixity(..)+ -- | The following three functions all create lists of+ -- fixities from textual representations of operators.+ -- The intended usage is e.g.+ --+ -- > fixs = infixr_ 0 ["$","$!","`seq`"]+ --+ -- Note that the operators are expected as you would+ -- write them infix, i.e. with ` characters surrounding+ -- /varid/ operators, and /varsym/ operators written as is.+ , infix_, infixl_, infixr_+ -- ** Collections of fixities+ , preludeFixities, baseFixities++ -- * Applying fixities to an AST+ , AppFixity(..)+ ) where++import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.SrcLoc++import Control.Monad (when, (<=<), liftM, liftM2, liftM3, liftM4)+import qualified Control.Monad.Fail as Fail+import Data.Traversable (mapM)+import Data.Maybe (fromMaybe)+import Data.Typeable+import Data.Data hiding (Fixity)+#if __GLASGOW_HASKELL__ < 710+import Control.Applicative ((<$))+#endif+import Prelude hiding (mapM)++-- | Operator fixities are represented by their associativity+-- (left, right or none) and their precedence (0-9).+data Fixity = Fixity (Assoc ()) Int (QName ())+ deriving (Eq,Ord,Show,Typeable,Data)++-- | All AST elements that may include expressions which in turn may+-- need fixity tweaking will be instances of this class.+class AppFixity ast where+ -- | Tweak any expressions in the element to account for the+ -- fixities given. Assumes that all operator expressions are+ -- fully left associative chains to begin with.+ applyFixities :: Fail.MonadFail m => [Fixity] -- ^ The fixities to account for.+ -> ast SrcSpanInfo -- ^ The element to tweak.+ -> m (ast SrcSpanInfo) -- ^ The same element, but with operator expressions updated, or a failure.++assocNone, assocLeft, assocRight :: Assoc ()+assocNone = AssocNone ()+assocLeft = AssocLeft ()+assocRight = AssocRight ()++instance AppFixity Exp where+ applyFixities fixs' = infFix fixs' <=< leafFix fixs'+ where -- This is the real meat case. We can assume a left-associative list to begin with.+ infFix fixs (InfixApp l2 a op2 z) = do+ e <- infFix fixs a+ let fixup (a1,p1) (a2,p2) y pre = do+ when (p1 == p2 && (a1 /= a2 || a1 == assocNone)) -- Ambiguous infix expression!+ $ fail "Ambiguous infix expression"+ if p1 > p2 || p1 == p2 && (a1 == assocLeft || a2 == assocNone) -- Already right order+ then return $ InfixApp l2 e op2 z+ else liftM pre (infFix fixs $ InfixApp (ann y <++> ann z) y op2 z)+ case e of+ InfixApp _ x op1 y -> fixup (askFixity fixs op1) (askFixity fixs op2) y (InfixApp l2 x op1)+ NegApp _ y -> fixup prefixMinusFixity (askFixity fixs op2) y (NegApp l2)+ _ -> return $ InfixApp l2 e op2 z++ infFix _ e = return e++--ambOps l = ParseFailed (getPointLoc l) $ "Ambiguous infix expression"++instance AppFixity Pat where+ applyFixities fixs' = infFix fixs' <=< leafFixP fixs'+ where -- This is the real meat case. We can assume a left-associative list to begin with.+ infFix fixs (PInfixApp l2 a op2 z) = do+ p <- infFix fixs a+ let fixup (a1,p1) (a2,p2) y pre = do+ when (p1 == p2 && (a1 /= a2 || a1 == assocNone )) -- Ambiguous infix expression!+ $ fail "Ambiguous infix expression"+ if p1 > p2 || p1 == p2 && (a1 == assocLeft || a2 == assocNone) -- Already right order+ then return $ PInfixApp l2 p op2 z+ else liftM pre (infFix fixs $ PInfixApp (ann y <++> ann z) y op2 z)+ case p of+ PInfixApp _ x op1 y -> fixup (askFixityP fixs op1) (askFixityP fixs op2) y (PInfixApp l2 x op1)+ _ -> return $ PInfixApp l2 p op2 z++ infFix _ p = return p++-- Internal: lookup associativity and precedence of an operator+askFixity :: [Fixity] -> QOp l -> (Assoc (), Int)+askFixity xs k = askFix xs (f (() <$ k))+ where+ f (QVarOp _ x) = g x+ f (QConOp _ x) = g x++ g (Special _ (Cons _)) = UnQual () (Symbol () ":")+ g x = x++-- Same using patterns+askFixityP :: [Fixity] -> QName l -> (Assoc (), Int)+askFixityP xs qn = askFix xs (g (() <$ qn))+ where+ g (Special _ (Cons _)) = UnQual () (Symbol () ":")+ g x = x++askFix :: [Fixity] -> QName l -> (Assoc (), Int)+askFix xs = \k -> lookupWithDefault (assocLeft, 9) (() <$ k) mp+ where+ lookupWithDefault def k mp' = fromMaybe def $ lookup k mp'++ mp = [(x,(a,p)) | Fixity a p x <- xs]++++-- | Built-in fixity for prefix minus+prefixMinusFixity :: (Assoc (), Int)+prefixMinusFixity = (AssocLeft (), 6)++-- | All fixities defined in the Prelude.+preludeFixities :: [Fixity]+preludeFixities = concat+ [infixr_ 9 ["."]+ ,infixl_ 9 ["!!"]+ ,infixr_ 8 ["^","^^","**"]+ ,infixl_ 7 ["*","/","`quot`","`rem`","`div`","`mod`"]+ ,infixl_ 6 ["+","-"]+ ,infixr_ 5 [":","++"]+ ,infix_ 4 ["==","/=","<","<=",">=",">","`elem`","`notElem`"]+ ,infixl_ 4 ["<$>","<$","<*>","<*","*>"]+ ,infixr_ 3 ["&&"]+ ,infixr_ 2 ["||"]+ ,infixl_ 1 [">>",">>="]+ ,infixr_ 1 ["=<<"]+ ,infixr_ 0 ["$","$!","`seq`"]+ ]++-- | All fixities defined in the base package.+--+-- Note that the @+++@ operator appears in both Control.Arrows and+-- Text.ParserCombinators.ReadP. The listed precedence for @+++@ in+-- this list is that of Control.Arrows.+baseFixities :: [Fixity]+baseFixities = preludeFixities ++ concat+ [infixl_ 9 ["!","//","!:"]+ ,infixr_ 9 ["`Compose`"]+ ,infixl_ 8 ["`shift`","`rotate`","`shiftL`","`shiftR`","`rotateL`","`rotateR`"]+ ,infixl_ 7 [".&.","%"]+ ,infixr_ 6 ["<>"]+ ,infixl_ 6 ["`xor`"]+ ,infix_ 6 [":+"]+ ,infixl_ 5 [".|."]+ ,infixr_ 5 ["+:+","<++","<+>","<|"] -- fixity conflict for +++ between ReadP and Arrow+ ,infix_ 5 ["\\\\"]+ ,infixl_ 4 ["<**>","$>","<$","<$!>"]+ ,infix_ 4 ["`elemP`","`notElemP`",":~:",":~~:"]+ ,infixl_ 3 ["<|>"]+ ,infixr_ 3 ["&&&","***"]+ ,infixr_ 2 ["+++","|||"]+ ,infixr_ 1 ["<=<",">=>",">>>","<<<","^<<","<<^","^>>",">>^"]+ ,infixl_ 1 ["&"]+ ,infixl_ 0 ["`on`"]+ ,infixr_ 0 ["`par`","`pseq`"]+ ]++infixr_, infixl_, infix_ :: Int -> [String] -> [Fixity]+infixr_ = fixity assocRight+infixl_ = fixity assocLeft+infix_ = fixity assocNone++-- Internal: help function for the above definitions.+fixity :: Assoc () -> Int -> [String] -> [Fixity]+fixity a p = map (Fixity a p . op)+ where+ op ('`':xs) = UnQual () $ Ident () $ init xs+ op xs = UnQual () $ Symbol () xs+++++++++-------------------------------------------------------------------+-- Boilerplate - yuck!! Everything below here is internal stuff++instance AppFixity Module where+ applyFixities fixs (Module l mmh prs imp decls) =+ liftM (Module l mmh prs imp) $ appFixDecls mmn fixs decls+ where mmn = getMmn mmh+ getMmn (Just (ModuleHead _ n _ _)) = Just n+ getMmn _ = Nothing+ applyFixities fixs (XmlPage l mn os xn xas mexp cs) =+ liftM3 (XmlPage l mn os xn) (fix xas) (fix mexp) (fix cs)+ where fix xs = mapM (applyFixities fixs) xs+ applyFixities fixs (XmlHybrid l mmh prs imp decls xn xas mexp cs) =+ liftM4 (flip (XmlHybrid l mmh prs imp) xn) (appFixDecls mmn fixs decls)+ (fixe xas) (fixe mexp) (fixe cs)+ where mmn = getMmn mmh+ getMmn (Just (ModuleHead _ n _ _)) = Just n+ getMmn _ = Nothing+ fixe xs = let extraFixs = getFixities mmn decls+ in mapM (applyFixities (fixs++extraFixs)) xs++instance AppFixity Decl where+ applyFixities fixs decl = case decl of+ ClassDecl l ctxt dh deps cdecls -> liftM (ClassDecl l ctxt dh deps) $ mapM (mapM fix) cdecls+ InstDecl l olp ih idecls -> liftM (InstDecl l olp ih) $ mapM (mapM fix) idecls+ SpliceDecl l spl -> liftM (SpliceDecl l) $ fix spl+ FunBind l matches -> liftM (FunBind l) $ mapM fix matches+ PatBind l p rhs bs ->+ let extraFix x = applyFixities (fixs ++ maybe [] getBindFixities bs) x+ in liftM3 (PatBind l) (extraFix p) (extraFix rhs) (mapM extraFix bs)+ AnnPragma l ann' -> liftM (AnnPragma l) $ fix ann'+ PatSyn l p1 p2 dir -> liftM (PatSyn l p1 p2) (fix dir)+ _ -> return decl+ where fix x = applyFixities fixs x++instance AppFixity PatternSynDirection where+ applyFixities fixs dir = case dir of+ ExplicitBidirectional l ds -> liftM (ExplicitBidirectional l) (mapM fix ds)+ _ -> return dir+ where fix x = applyFixities fixs x++appFixDecls :: Fail.MonadFail m => Maybe (ModuleName SrcSpanInfo) -> [Fixity] -> [Decl SrcSpanInfo] -> m [Decl SrcSpanInfo]+appFixDecls mmdl fixs decls =+ let extraFixs = getFixities mmdl decls+ in mapM (applyFixities (fixs++extraFixs)) decls++getFixities :: Maybe (ModuleName l) -> [Decl l] -> [Fixity]+getFixities mmdl = concatMap (getFixity mmdl)++getFixity :: Maybe (ModuleName l) -> Decl l -> [Fixity]+getFixity mmdl d =+ case d of+ InfixDecl _ a mp ops -> let p = fromMaybe 9 mp+ in map (Fixity (scrub a) p) (concatMap g (map scrub ops))+ ClassDecl _ _ _ _ cds -> maybe [] (concatMap getClassFixity) cds+ _ -> []+ where g (VarOp _ x) = f x+ g (ConOp _ x) = f x+ f x = case mmdl of+ Nothing -> [UnQual () x]+ Just m -> [Qual () (scrub m) x, UnQual () x]+ getClassFixity (ClsDecl _ cd) = getFixity mmdl cd+ getClassFixity _ = []++scrub :: Functor f => f a -> f ()+scrub f = () <$ f++getBindFixities :: Binds l -> [Fixity]+getBindFixities bs = case bs of+ BDecls _ ds -> getFixities Nothing ds+ _ -> []++instance AppFixity Annotation where+ applyFixities fixs ann' = case ann' of+ Ann l n e -> liftM (Ann l n) $ fix e+ TypeAnn l n e -> liftM (TypeAnn l n) $ fix e+ ModuleAnn l e -> liftM (ModuleAnn l) $ fix e+ where fix x = applyFixities fixs x++instance AppFixity ClassDecl where+ applyFixities fixs (ClsDecl l decl) = liftM (ClsDecl l) $ applyFixities fixs decl+ applyFixities _ cdecl = return cdecl++instance AppFixity InstDecl where+ applyFixities fixs (InsDecl l decl) = liftM (InsDecl l) $ applyFixities fixs decl+ applyFixities _ idecl = return idecl++instance AppFixity Match where+ applyFixities fixs match = case match of+ Match l n ps rhs bs -> liftM3 (Match l n) (mapM (fix bs) ps) (fix bs rhs) (mapM (fix bs) bs)+ InfixMatch l a n ps rhs bs -> liftM4 (flip (InfixMatch l) n) (fix bs a) (mapM (fix bs) ps) (fix bs rhs) (mapM (fix bs) bs)+ where fix bs x = applyFixities fixs' x+ where fixs' = fixs ++ maybe [] getBindFixities bs++instance AppFixity Rhs where+ applyFixities fixs rhs = case rhs of+ UnGuardedRhs l e -> liftM (UnGuardedRhs l) $ fix e+ GuardedRhss l grhss -> liftM (GuardedRhss l) $ mapM fix grhss+ where fix x = applyFixities fixs x++instance AppFixity GuardedRhs where+ applyFixities fixs (GuardedRhs l stmts e) = liftM2 (GuardedRhs l) (mapM fix stmts) $ fix e+ where fix x = applyFixities fixs x++instance AppFixity PatField where+ applyFixities fixs (PFieldPat l n p) = liftM (PFieldPat l n) $ applyFixities fixs p+ applyFixities _ pf = return pf++instance AppFixity RPat where+ applyFixities fixs rp' = case rp' of+ RPOp l rp op -> liftM (flip (RPOp l) op) $ fix rp+ RPEither l a b -> liftM2 (RPEither l) (fix a) (fix b)+ RPSeq l rps -> liftM (RPSeq l) $ mapM fix rps+ RPGuard l p stmts -> liftM2 (RPGuard l) (fix p) $ mapM fix stmts+ RPCAs l n rp -> liftM (RPCAs l n) $ fix rp+ RPAs l n rp -> liftM (RPAs l n) $ fix rp+ RPParen l rp -> liftM (RPParen l) $ fix rp+ RPPat l p -> liftM (RPPat l) $ fix p+ where fix x = applyFixities fixs x++instance AppFixity PXAttr where+ applyFixities fixs (PXAttr l n p) = liftM (PXAttr l n) $ applyFixities fixs p++instance AppFixity Stmt where+ applyFixities fixs stmt = case stmt of+ Generator l p e -> liftM2 (Generator l) (fix p) (fix e)+ Qualifier l e -> liftM (Qualifier l) $ fix e+ LetStmt l bs -> liftM (LetStmt l) $ fix bs -- special behavior+ RecStmt l stmts -> liftM (RecStmt l) $ mapM fix stmts+ where fix x = applyFixities fixs x++instance AppFixity Binds where+ applyFixities fixs bs = case bs of+ BDecls l decls -> liftM (BDecls l) $ appFixDecls Nothing fixs decls -- special behavior+ IPBinds l ips -> liftM (IPBinds l) $ mapM fix ips+ where fix x = applyFixities fixs x+++instance AppFixity IPBind where+ applyFixities fixs (IPBind l n e) = liftM (IPBind l n) $ applyFixities fixs e++instance AppFixity FieldUpdate where+ applyFixities fixs (FieldUpdate l n e) = liftM (FieldUpdate l n) $ applyFixities fixs e+ applyFixities _ fup = return fup++instance AppFixity Alt where+ applyFixities fixs (Alt l p galts bs) = liftM3 (Alt l) (fix p) (fix galts) (mapM fix bs)+ where fix x = applyFixities fixs x++instance AppFixity QualStmt where+ applyFixities fixs qstmt = case qstmt of+ QualStmt l s -> liftM (QualStmt l) $ fix s+ ThenTrans l e -> liftM (ThenTrans l) $ fix e+ ThenBy l e1 e2 -> liftM2 (ThenBy l) (fix e1) (fix e2)+ GroupBy l e -> liftM (GroupBy l) (fix e)+ GroupUsing l e -> liftM (GroupUsing l) (fix e)+ GroupByUsing l e1 e2 -> liftM2 (GroupByUsing l) (fix e1) (fix e2)+ where fix x = applyFixities fixs x++instance AppFixity Bracket where+ applyFixities fixs br = case br of+ ExpBracket l e -> liftM (ExpBracket l) $ fix e+ PatBracket l p -> liftM (PatBracket l) $ fix p+ DeclBracket l ds -> liftM (DeclBracket l) $ mapM fix ds+ _ -> return br+ where fix x = applyFixities fixs x++instance AppFixity Splice where+ applyFixities fixs (ParenSplice l e) = liftM (ParenSplice l) $ applyFixities fixs e+ applyFixities _ s = return s++instance AppFixity XAttr where+ applyFixities fixs (XAttr l n e) = liftM (XAttr l n) $ applyFixities fixs e+++-- the boring boilerplate stuff for expressions too+-- Recursively fixes the "leaves" of the infix chains,+-- without yet touching the chain itself. We assume all chains are+-- left-associate to begin with.+leafFix :: Fail.MonadFail m => [Fixity] -> Exp SrcSpanInfo -> m (Exp SrcSpanInfo)+leafFix fixs e' = case e' of+ InfixApp l e1 op e2 -> liftM2 (flip (InfixApp l) op) (leafFix fixs e1) (fix e2)+ App l e1 e2 -> liftM2 (App l) (fix e1) (fix e2)+ NegApp l e -> liftM (NegApp l) $ fix e+ Lambda l pats e -> liftM2 (Lambda l) (mapM fix pats) $ fix e+ Let l bs e ->+ let extraFix x = applyFixities (fixs ++ getBindFixities bs) x+ in liftM2 (Let l) (extraFix bs) $ extraFix e+ If l e a b -> liftM3 (If l) (fix e) (fix a) (fix b)+ MultiIf l alts -> liftM (MultiIf l) (mapM fix alts)+ Case l e alts -> liftM2 (Case l) (fix e) $ mapM fix alts+ Do l stmts -> liftM (Do l) $ mapM fix stmts+ MDo l stmts -> liftM (MDo l) $ mapM fix stmts+ Tuple l bx exps -> liftM (Tuple l bx) $ mapM fix exps+ List l exps -> liftM (List l) $ mapM fix exps+ Paren l e -> liftM (Paren l) $ fix e+ LeftSection l e op -> liftM (flip (LeftSection l) op) (fix e)+ RightSection l op e -> liftM (RightSection l op) $ fix e+ RecConstr l n fups -> liftM (RecConstr l n) $ mapM fix fups+ RecUpdate l e fups -> liftM2 (RecUpdate l) (fix e) $ mapM fix fups+ EnumFrom l e -> liftM (EnumFrom l) $ fix e+ EnumFromTo l e1 e2 -> liftM2 (EnumFromTo l) (fix e1) (fix e2)+ EnumFromThen l e1 e2 -> liftM2 (EnumFromThen l) (fix e1) (fix e2)+ EnumFromThenTo l e1 e2 e3 -> liftM3 (EnumFromThenTo l) (fix e1) (fix e2) (fix e3)+ ListComp l e quals -> liftM2 (ListComp l) (fix e) $ mapM fix quals+ ParComp l e qualss -> liftM2 (ParComp l) (fix e) $ mapM (mapM fix) qualss+ ExpTypeSig l e t -> liftM (flip (ExpTypeSig l) t) (fix e)+ BracketExp l b -> liftM (BracketExp l) $ fix b+ SpliceExp l s -> liftM (SpliceExp l) $ fix s+ XTag l n ats mexp cs -> liftM3 (XTag l n) (mapM fix ats) (mapM fix mexp) (mapM fix cs)+ XETag l n ats mexp -> liftM2 (XETag l n) (mapM fix ats) (mapM fix mexp)+ XExpTag l e -> liftM (XExpTag l) $ fix e+ XChildTag l cs -> liftM (XChildTag l) $ mapM fix cs+ Proc l p e -> liftM2 (Proc l) (fix p) (fix e)+ LeftArrApp l e1 e2 -> liftM2 (LeftArrApp l) (fix e1) (fix e2)+ RightArrApp l e1 e2 -> liftM2 (RightArrApp l) (fix e1) (fix e2)+ LeftArrHighApp l e1 e2 -> liftM2 (LeftArrHighApp l) (fix e1) (fix e2)+ RightArrHighApp l e1 e2 -> liftM2 (RightArrHighApp l) (fix e1) (fix e2)+ CorePragma l s e -> liftM (CorePragma l s) (fix e)+ SCCPragma l s e -> liftM (SCCPragma l s) (fix e)+ GenPragma l s ab cd e -> liftM (GenPragma l s ab cd) (fix e)+ LCase l alts -> liftM (LCase l) $ mapM fix alts++ _ -> return e'+ where fix x = applyFixities fixs x++leafFixP :: Fail.MonadFail m => [Fixity] -> Pat SrcSpanInfo -> m (Pat SrcSpanInfo)+leafFixP fixs p' = case p' of+ PInfixApp l p1 op p2 -> liftM2 (flip (PInfixApp l) op) (leafFixP fixs p1) (fix p2)+ PApp l n ps -> liftM (PApp l n) $ mapM fix ps+ PTuple l bx ps -> liftM (PTuple l bx) $ mapM fix ps+ PList l ps -> liftM (PList l) $ mapM fix ps+ PParen l p -> liftM (PParen l) $ fix p+ PRec l n pfs -> liftM (PRec l n) $ mapM fix pfs+ PAsPat l n p -> liftM (PAsPat l n) $ fix p+ PIrrPat l p -> liftM (PIrrPat l) $ fix p+ PatTypeSig l p t -> liftM (flip (PatTypeSig l) t) (fix p)+ PViewPat l e p -> liftM2 (PViewPat l) (fix e) (fix p)+ PRPat l rps -> liftM (PRPat l) $ mapM fix rps+ PXTag l n ats mp ps -> liftM3 (PXTag l n) (mapM fix ats) (mapM fix mp) (mapM fix ps)+ PXETag l n ats mp -> liftM2 (PXETag l n) (mapM fix ats) (mapM fix mp)+ PXPatTag l p -> liftM (PXPatTag l) $ fix p+ PXRPats l rps -> liftM (PXRPats l) $ mapM fix rps+ PBangPat l p -> liftM (PBangPat l) $ fix p+ _ -> return p'+ where fix x = applyFixities fixs x
@@ -0,0 +1,1497 @@+{-# LANGUAGE Safe #-}+{-# LANGUAGE BangPatterns #-}+{-# OPTIONS_HADDOCK hide #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Annotated.InternalLexer+-- Copyright : (c) The GHC Team, 1997-2000+-- (c) Niklas Broberg, 2004-2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Lexer for Haskell, with some extensions.+--+-----------------------------------------------------------------------------++-- ToDo: Introduce different tokens for decimal, octal and hexadecimal (?)+-- ToDo: FloatTok should have three parts (integer part, fraction, exponent) (?)+-- ToDo: Use a lexical analyser generator (lx?)++module Language.Haskell.Exts.InternalLexer (Token(..), showToken, lexer, topLexer) where++import Language.Haskell.Exts.ParseMonad+import Language.Haskell.Exts.SrcLoc hiding (loc)+import Language.Haskell.Exts.Comments+import Language.Haskell.Exts.Extension+import Language.Haskell.Exts.ExtScheme++import Prelude hiding (id, exponent)+import Data.Char+import Data.Ratio+import Data.List (intercalate, isPrefixOf)+import Control.Monad (when)++-- import Debug.Trace (trace)++data Token+ = VarId String+ | LabelVarId String+ | QVarId (String,String)+ | IDupVarId (String) -- duplicable implicit parameter+ | ILinVarId (String) -- linear implicit parameter+ | ConId String+ | QConId (String,String)+ | DVarId [String] -- to enable varid's with '-' in them+ | VarSym String+ | ConSym String+ | QVarSym (String,String)+ | QConSym (String,String)+ | IntTok (Integer, String)+ | FloatTok (Rational, String)+ | Character (Char, String)+ | StringTok (String, String)+ | IntTokHash (Integer, String) -- 1#+ | WordTokHash (Integer, String) -- 1##+ | FloatTokHash (Rational, String) -- 1.0#+ | DoubleTokHash (Rational, String) -- 1.0##+ | CharacterHash (Char, String) -- c#+ | StringHash (String, String) -- "Hello world!"#++-- Symbols++ | LeftParen+ | RightParen+ | LeftHashParen+ | RightHashParen+ | SemiColon+ | LeftCurly+ | RightCurly+ | VRightCurly -- a virtual close brace+ | LeftSquare+ | RightSquare+ | ParArrayLeftSquare -- [:+ | ParArrayRightSquare -- :]+ | Comma+ | Underscore+ | BackQuote++-- Reserved operators++ | Dot -- reserved for use with 'forall x . x'+ | DotDot+ | Colon+ | QuoteColon+ | DoubleColon+ | Equals+ | Backslash+ | Bar+ | LeftArrow+ | RightArrow+ | At+ | TApp -- '@' but have to check for preceeding whitespace+ | Tilde+ | DoubleArrow+ | Minus+ | Exclamation+ | Star+ | LeftArrowTail -- -<+ | RightArrowTail -- >-+ | LeftDblArrowTail -- -<<+ | RightDblArrowTail -- >>-+ | OpenArrowBracket -- (|+ | CloseArrowBracket -- |)++-- Template Haskell+ | THExpQuote -- [| or [e|+ | THTExpQuote -- [|| or [e||+ | THPatQuote -- [p|+ | THDecQuote -- [d|+ | THTypQuote -- [t|+ | THCloseQuote -- |]+ | THTCloseQuote -- ||]+ | THIdEscape (String) -- dollar x+ | THParenEscape -- dollar (+ | THTIdEscape String -- dollar dollar x+ | THTParenEscape -- double dollar (+ | THVarQuote -- 'x (but without the x)+ | THTyQuote -- ''T (but without the T)+ | THQuasiQuote (String,String) -- [$...|...]++-- HaRP+ | RPGuardOpen -- (|+ | RPGuardClose -- |)+ | RPCAt -- @:++-- Hsx+ | XCodeTagOpen -- <%+ | XCodeTagClose -- %>+ | XStdTagOpen -- <+ | XStdTagClose -- >+ | XCloseTagOpen -- </+ | XEmptyTagClose -- />+ | XChildTagOpen -- <%> (note that close doesn't exist, it's XCloseTagOpen followed by XCodeTagClose)+ | XPCDATA String+ | XRPatOpen -- <[+ | XRPatClose -- ]>++-- Pragmas++ | PragmaEnd -- #-}+ | RULES+ | INLINE Bool+ | INLINE_CONLIKE+ | SPECIALISE+ | SPECIALISE_INLINE Bool+ | SOURCE+ | DEPRECATED+ | WARNING+ | SCC+ | GENERATED+ | CORE+ | UNPACK+ | NOUNPACK+ | OPTIONS (Maybe String,String)+-- | CFILES String+-- | INCLUDE String+ | LANGUAGE+ | ANN+ | MINIMAL+ | NO_OVERLAP+ | OVERLAP+ | OVERLAPPING+ | OVERLAPPABLE+ | OVERLAPS+ | INCOHERENT+ | COMPLETE++-- Reserved Ids++ | KW_As+ | KW_By -- transform list comprehensions+ | KW_Case+ | KW_Class+ | KW_Data+ | KW_Default+ | KW_Deriving+ | KW_Do+ | KW_MDo+ | KW_Else+ | KW_Family -- indexed type families+ | KW_Forall -- universal/existential types+ | KW_Group -- transform list comprehensions+ | KW_Hiding+ | KW_If+ | KW_Import+ | KW_In+ | KW_Infix+ | KW_InfixL+ | KW_InfixR+ | KW_Instance+ | KW_Let+ | KW_Module+ | KW_NewType+ | KW_Of+ | KW_Proc -- arrows+ | KW_Rec -- arrows+ | KW_Role+ | KW_Then+ | KW_Type+ | KW_Using -- transform list comprehensions+ | KW_Where+ | KW_Qualified+ | KW_Pattern+ | KW_Stock+ | KW_Anyclass+ | KW_Via++ -- FFI+ | KW_Foreign+ | KW_Export+ | KW_Safe+ | KW_Unsafe+ | KW_Threadsafe+ | KW_Interruptible+ | KW_StdCall+ | KW_CCall+ | KW_CPlusPlus+ | KW_DotNet+ | KW_Jvm+ | KW_Js+ | KW_JavaScript+ | KW_CApi++ | EOF+ deriving (Eq,Show)++reserved_ops :: [(String,(Token, Maybe ExtScheme))]+reserved_ops = [+ ( "..", (DotDot, Nothing) ),+ ( ":", (Colon, Nothing) ),+ ( "::", (DoubleColon, Nothing) ),+ ( "=", (Equals, Nothing) ),+ ( "\\", (Backslash, Nothing) ),+ ( "|", (Bar, Nothing) ),+ ( "<-", (LeftArrow, Nothing) ),+ ( "->", (RightArrow, Nothing) ),+ ( "@", (At, Nothing) ),+ ( "@:", (RPCAt, Just (Any [RegularPatterns])) ),+ ( "~", (Tilde, Nothing) ),+ ( "=>", (DoubleArrow, Nothing) ),+ ( "*", (Star, Just (Any [KindSignatures])) ),+ -- Parallel arrays+ ( "[:", (ParArrayLeftSquare, Just (Any [ParallelArrays])) ),+ ( ":]", (ParArrayRightSquare, Just (Any [ParallelArrays])) ),+ -- Arrows notation+ ( "-<", (LeftArrowTail, Just (Any [Arrows])) ),+ ( ">-", (RightArrowTail, Just (Any [Arrows])) ),+ ( "-<<", (LeftDblArrowTail, Just (Any [Arrows])) ),+ ( ">>-", (RightDblArrowTail, Just (Any [Arrows])) ),+ -- Unicode notation+ ( "\x2190", (LeftArrow, Just (Any [UnicodeSyntax])) ),+ ( "\x2192", (RightArrow, Just (Any [UnicodeSyntax])) ),+ ( "\x21d2", (DoubleArrow, Just (Any [UnicodeSyntax])) ),+ ( "\x2237", (DoubleColon, Just (Any [UnicodeSyntax])) ),+ ( "\x2919", (LeftArrowTail, Just (All [UnicodeSyntax, Arrows])) ),+ ( "\x291a", (RightArrowTail, Just (All [UnicodeSyntax, Arrows])) ),+ ( "\x291b", (LeftDblArrowTail, Just (All [UnicodeSyntax, Arrows])) ),+ ( "\x291c", (RightDblArrowTail, Just (All [UnicodeSyntax, Arrows])) ),+ ( "\x2605", (Star, Just (All [UnicodeSyntax, KindSignatures])) ),+ ( "\x2200", (KW_Forall, Just (All [UnicodeSyntax, ExplicitForAll])) )+ ]++special_varops :: [(String,(Token, Maybe ExtScheme))]+special_varops = [+ -- the dot is only a special symbol together with forall, but can still be used as function composition+ ( ".", (Dot, Just (Any [ExplicitForAll, ExistentialQuantification])) ),+ ( "-", (Minus, Nothing) ),+ ( "!", (Exclamation, Nothing) )+ ]++reserved_ids :: [(String,(Token, Maybe ExtScheme))]+reserved_ids = [+ ( "_", (Underscore, Nothing) ),+ ( "by", (KW_By, Just (Any [TransformListComp])) ),+ ( "case", (KW_Case, Nothing) ),+ ( "class", (KW_Class, Nothing) ),+ ( "data", (KW_Data, Nothing) ),+ ( "default", (KW_Default, Nothing) ),+ ( "deriving", (KW_Deriving, Nothing) ),+ ( "do", (KW_Do, Nothing) ),+ ( "else", (KW_Else, Nothing) ),+ ( "family", (KW_Family, Just (Any [TypeFamilies])) ), -- indexed type families+ ( "forall", (KW_Forall, Just (Any [ExplicitForAll, ExistentialQuantification])) ), -- universal/existential quantification+ ( "group", (KW_Group, Just (Any [TransformListComp])) ),+ ( "if", (KW_If, Nothing) ),+ ( "import", (KW_Import, Nothing) ),+ ( "in", (KW_In, Nothing) ),+ ( "infix", (KW_Infix, Nothing) ),+ ( "infixl", (KW_InfixL, Nothing) ),+ ( "infixr", (KW_InfixR, Nothing) ),+ ( "instance", (KW_Instance, Nothing) ),+ ( "let", (KW_Let, Nothing) ),+ ( "mdo", (KW_MDo, Just (Any [RecursiveDo])) ),+ ( "module", (KW_Module, Nothing) ),+ ( "newtype", (KW_NewType, Nothing) ),+ ( "of", (KW_Of, Nothing) ),+ ( "proc", (KW_Proc, Just (Any [Arrows])) ),+ ( "rec", (KW_Rec, Just (Any [Arrows, RecursiveDo, DoRec])) ),+ ( "then", (KW_Then, Nothing) ),+ ( "type", (KW_Type, Nothing) ),+ ( "using", (KW_Using, Just (Any [TransformListComp])) ),+ ( "where", (KW_Where, Nothing) ),+ ( "role", (KW_Role, Just (Any [RoleAnnotations]))),+ ( "pattern", (KW_Pattern, Just (Any [PatternSynonyms]))),+ ( "stock", (KW_Stock, Just (Any [DerivingStrategies]))),+ ( "anyclass", (KW_Anyclass, Just (Any [DerivingStrategies]))),+ ( "via", (KW_Via, Just (Any [DerivingVia]))),++-- FFI+ ( "foreign", (KW_Foreign, Just (Any [ForeignFunctionInterface])) )+ ]+++special_varids :: [(String,(Token, Maybe ExtScheme))]+special_varids = [+ ( "as", (KW_As, Nothing) ),+ ( "qualified", (KW_Qualified, Nothing) ),+ ( "hiding", (KW_Hiding, Nothing) ),++-- FFI+ ( "export", (KW_Export, Just (Any [ForeignFunctionInterface])) ),+ ( "safe", (KW_Safe, Just (Any [ForeignFunctionInterface, SafeImports, Safe, Trustworthy])) ),+ ( "unsafe", (KW_Unsafe, Just (Any [ForeignFunctionInterface])) ),+ ( "threadsafe", (KW_Threadsafe, Just (Any [ForeignFunctionInterface])) ),+ ( "interruptible", (KW_Interruptible, Just (Any [InterruptibleFFI])) ),+ ( "stdcall", (KW_StdCall, Just (Any [ForeignFunctionInterface])) ),+ ( "ccall", (KW_CCall, Just (Any [ForeignFunctionInterface])) ),+ ( "cplusplus", (KW_CPlusPlus, Just (Any [ForeignFunctionInterface])) ),+ ( "dotnet", (KW_DotNet, Just (Any [ForeignFunctionInterface])) ),+ ( "jvm", (KW_Jvm, Just (Any [ForeignFunctionInterface])) ),+ ( "js", (KW_Js, Just (Any [ForeignFunctionInterface])) ),+ ( "javascript", (KW_JavaScript, Just (Any [ForeignFunctionInterface])) ),+ ( "capi", (KW_CApi, Just (Any [CApiFFI])) )+ ]++pragmas :: [(String,Token)]+pragmas = [+ ( "rules", RULES ),+ ( "inline", INLINE True ),+ ( "noinline", INLINE False ),+ ( "notinline", INLINE False ),+ ( "specialise", SPECIALISE ),+ ( "specialize", SPECIALISE ),+ ( "source", SOURCE ),+ ( "deprecated", DEPRECATED ),+ ( "warning", WARNING ),+ ( "ann", ANN ),+ ( "scc", SCC ),+ ( "generated", GENERATED ),+ ( "core", CORE ),+ ( "unpack", UNPACK ),+ ( "nounpack", NOUNPACK ),+ ( "language", LANGUAGE ),+ ( "minimal", MINIMAL ),+ ( "no_overlap", NO_OVERLAP ),+ ( "overlap", OVERLAP ),+ ( "overlaps", OVERLAPS ),+ ( "overlapping", OVERLAPPING ),+ ( "overlappable", OVERLAPPABLE ),+ ( "incoherent", INCOHERENT ),+ ( "complete", COMPLETE ),+ ( "options", OPTIONS undefined ) -- we'll tweak it before use - promise!+-- ( "cfiles", CFILES undefined ), -- same here...+-- ( "include", INCLUDE undefined ) -- ...and here!+ ]++isIdent, isHSymbol, isPragmaChar :: Char -> Bool+isIdent c = isAlphaNum c || c == '\'' || c == '_'++isHSymbol c = c `elem` ":!#%&*./?@\\-" || ((isSymbol c || isPunctuation c) && not (c `elem` "(),;[]`{}_\"'"))++isPragmaChar c = isAlphaNum c || c == '_'++isIdentStart :: Char -> Bool+isIdentStart c = isAlpha c && not (isUpper c) || c == '_'+++-- Used in the lexing of type applications+-- Why is it like this? I don't know exactly but this is how it is in+-- GHC's parser.+-- Symbol `:` is added so that `@:` is lexed as `VarSym "@:"`. See Issue #326+isOpSymbol :: Char -> Bool+isOpSymbol c = c `elem` ":!#$%&*+./<=>?@\\^|-~"++-- | Checks whether the character would be legal in some position of a qvar.+-- Means that '..' and "AAA" will pass the test.+isPossiblyQvar :: Char -> Bool+isPossiblyQvar c = isIdent (toLower c) || c == '.'++matchChar :: Char -> String -> Lex a ()+matchChar c msg = do+ s <- getInput+ if null s || head s /= c then fail msg else discard 1++-- The top-level lexer.+-- We need to know whether we are at the beginning of the line to decide+-- whether to insert layout tokens.++lexer :: (Loc Token -> P a) -> P a+lexer = runL topLexer++topLexer :: Lex a (Loc Token)+topLexer = do+ b <- pullCtxtFlag+ if b then -- trace (show cf ++ ": " ++ show VRightCurly) $+ -- the lex context state flags that we must do an empty {} - UGLY+ setBOL >> getSrcLocL >>= \l -> return (Loc (mkSrcSpan l l) VRightCurly)+ else do+ bol <- checkBOL+ (bol', ws) <- lexWhiteSpace bol+ -- take care of whitespace in PCDATA+ ec <- getExtContext+ case ec of+ -- if there was no linebreak, and we are lexing PCDATA,+ -- then we want to care about the whitespace.+ -- We don't bother to test for XmlSyntax, since we+ -- couldn't end up in ChildCtxt otherwise.+ Just ChildCtxt | not bol' && ws -> getSrcLocL >>= \l -> return $ Loc (mkSrcSpan l l) $ XPCDATA " "+ _ -> do startToken+ sl <- getSrcLocL+ t <- if bol' then lexBOL -- >>= \t -> trace ("BOL: " ++ show t) (return t)+ else lexToken -- >>= \t -> trace (show t) (return t)+ el <- getSrcLocL+ return $ Loc (mkSrcSpan sl el) t++lexWhiteSpace :: Bool -> Lex a (Bool, Bool)+lexWhiteSpace bol = do+ s <- getInput+ ignL <- ignoreLinePragmasL+ case s of+ -- If we find a recognised pragma, we don't want to treat it as a comment.+ '{':'-':'#':rest | isRecognisedPragma rest -> return (bol, False)+ | isLinePragma rest && not ignL -> do+ (l, fn) <- lexLinePragma+ setSrcLineL l+ setLineFilenameL fn+ lexWhiteSpace True+ '{':'-':_ -> do+ loc <- getSrcLocL+ discard 2+ (bol1, c) <- lexNestedComment bol ""+ loc2 <- getSrcLocL+ pushComment $ Comment True (mkSrcSpan loc loc2) (reverse c)+ (bol2, _) <- lexWhiteSpace bol1+ return (bol2, True)+ '-':'-':s1 | all (== '-') (takeWhile isHSymbol s1) -> do+ loc <- getSrcLocL+ discard 2+ dashes <- lexWhile (== '-')+ rest <- lexWhile (/= '\n')+ s' <- getInput+ loc2 <- getSrcLocL+ let com = Comment False (mkSrcSpan loc loc2) $ dashes ++ rest+ case s' of+ [] -> pushComment com >> return (False, True)+ _ -> do+ pushComment com+ lexNewline+ lexWhiteSpace_ True+ return (True, True)+ '\n':_ -> do+ lexNewline+ lexWhiteSpace_ True+ return (True, True)+ '\t':_ -> do+ lexTab+ (bol', _) <- lexWhiteSpace bol+ return (bol', True)+ c:_ | isSpace c -> do+ discard 1+ (bol', _) <- lexWhiteSpace bol+ return (bol', True)+ _ -> return (bol, False)++-- | lexWhiteSpace without the return value.+lexWhiteSpace_ :: Bool -> Lex a ()+lexWhiteSpace_ bol = do _ <- lexWhiteSpace bol+ return ()++isRecognisedPragma, isLinePragma :: String -> Bool+isRecognisedPragma str = let pragma = takeWhile isPragmaChar . dropWhile isSpace $ str+ in case lookupKnownPragma pragma of+ Nothing -> False+ _ -> True++isLinePragma str = let pragma = map toLower . takeWhile isAlphaNum . dropWhile isSpace $ str+ in case pragma of+ "line" -> True+ _ -> False++lexLinePragma :: Lex a (Int, String)+lexLinePragma = do+ discard 3 -- {-#+ lexWhile_ isSpace+ discard 4 -- LINE+ lexWhile_ isSpace+ i <- lexWhile isDigit+ when (null i) $ fail "Improperly formatted LINE pragma"+ lexWhile_ isSpace+ matchChar '"' "Improperly formatted LINE pragma"+ fn <- lexWhile (/= '"')+ matchChar '"' "Impossible - lexLinePragma"+ lexWhile_ isSpace+ mapM_ (flip matchChar "Improperly formatted LINE pragma") "#-}"+ lexNewline+ return (read i, fn)++lexNestedComment :: Bool -> String -> Lex a (Bool, String)+lexNestedComment bol str = do+ s <- getInput+ case s of+ '-':'}':_ -> discard 2 >> return (bol, str)+ '{':'-':_ -> do+ discard 2+ (bol', c) <- lexNestedComment bol ("-{" ++ str) -- rest of the subcomment+ lexNestedComment bol' ("}-" ++ c ) -- rest of this comment+ '\t':_ -> lexTab >> lexNestedComment bol ('\t':str)+ '\n':_ -> lexNewline >> lexNestedComment True ('\n':str)+ c:_ -> discard 1 >> lexNestedComment bol (c:str)+ [] -> fail "Unterminated nested comment"++-- When we are lexing the first token of a line, check whether we need to+-- insert virtual semicolons or close braces due to layout.++lexBOL :: Lex a Token+lexBOL = do+ pos <- getOffside+ -- trace ("Off: " ++ (show pos)) $ do+ case pos of+ LT -> do+ -- trace "layout: inserting '}'\n" $+ -- Set col to 0, indicating that we're still at the+ -- beginning of the line, in case we need a semi-colon too.+ -- Also pop the context here, so that we don't insert+ -- another close brace before the parser can pop it.+ setBOL+ popContextL "lexBOL"+ return VRightCurly+ EQ ->+ -- trace "layout: inserting ';'\n" $+ return SemiColon+ GT -> lexToken++lexToken :: Lex a Token+lexToken = do+ ec <- getExtContext+ -- we don't bother to check XmlSyntax since we couldn't+ -- have ended up in a non-Nothing context if it wasn't+ -- enabled.+ case ec of+ Just HarpCtxt -> lexHarpToken+ Just TagCtxt -> lexTagCtxt+ Just CloseTagCtxt -> lexCloseTagCtxt+ Just ChildCtxt -> lexChildCtxt+ Just CodeTagCtxt -> lexCodeTagCtxt+ _ -> lexStdToken+++lexChildCtxt :: Lex a Token+lexChildCtxt = do+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ '<':'%':'>':_ -> do discard 3+ pushExtContextL ChildCtxt+ return XChildTagOpen+ '<':'%':_ -> do discard 2+ pushExtContextL CodeTagCtxt+ return XCodeTagOpen+ '<':'/':_ -> do discard 2+ popExtContextL "lexChildCtxt"+ pushExtContextL CloseTagCtxt+ return XCloseTagOpen+ '<':'[':_ -> do discard 2+ pushExtContextL HarpCtxt+ return XRPatOpen+ '<':_ -> do discard 1+ pushExtContextL TagCtxt+ return XStdTagOpen+ _ -> lexPCDATA+++lexPCDATA :: Lex a Token+lexPCDATA = do+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ [] -> return EOF+ _ -> case s of+ '\n':_ -> do+ x <- lexNewline >> lexPCDATA+ case x of+ XPCDATA p -> return $ XPCDATA $ '\n':p+ EOF -> return EOF+ _ -> fail $ "lexPCDATA: unexpected token: " ++ show x+ '<':_ -> return $ XPCDATA ""+ _ -> do let pcd = takeWhile (\c -> c `notElem` "<\n") s+ l = length pcd+ discard l+ x <- lexPCDATA+ case x of+ XPCDATA pcd' -> return $ XPCDATA $ pcd ++ pcd'+ EOF -> return EOF+ _ -> fail $ "lexPCDATA: unexpected token: " ++ show x+++lexCodeTagCtxt :: Lex a Token+lexCodeTagCtxt = do+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ '%':'>':_ -> do discard 2+ popExtContextL "lexCodeTagContext"+ return XCodeTagClose+ _ -> lexStdToken++lexCloseTagCtxt :: Lex a Token+lexCloseTagCtxt = do+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ '%':'>':_ -> do discard 2+ popExtContextL "lexCloseTagCtxt"+ return XCodeTagClose+ '>':_ -> do discard 1+ popExtContextL "lexCloseTagCtxt"+ return XStdTagClose+ _ -> lexStdToken++lexTagCtxt :: Lex a Token+lexTagCtxt = do+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ '/':'>':_ -> do discard 2+ popExtContextL "lexTagCtxt: Empty tag"+ return XEmptyTagClose+ '>':_ -> do discard 1+ popExtContextL "lexTagCtxt: Standard tag"+ pushExtContextL ChildCtxt+ return XStdTagClose+ _ -> lexStdToken++lexHarpToken :: Lex a Token+lexHarpToken = do+ -- if we ever end up here, then RegularPatterns must be on.+ s <- getInput+ case s of+ ']':'>':_ -> do discard 2+ popExtContextL "lexHarpToken"+ return XRPatClose+ _ -> lexStdToken++lexStdToken :: Lex a Token+lexStdToken = do+ s <- getInput+ exts <- getExtensionsL+ let intHash = lexHash IntTok IntTokHash (Right WordTokHash)+ case s of+ [] -> return EOF++ '0':c:d:_ | toLower c == 'o' && isOctDigit d -> do+ discard 2+ (n, str) <- lexOctal+ con <- intHash+ return (con (n, '0':c:str))+ | toLower c == 'b' && isBinDigit d && BinaryLiterals `elem` exts -> do+ discard 2+ (n, str) <- lexBinary+ con <- intHash+ return (con (n, '0':c:str))+ | toLower c == 'x' && isHexDigit d -> do+ discard 2+ (n, str) <- lexHexadecimal+ con <- intHash+ return (con (n, '0':c:str))++ -- implicit parameters+ '?':c:_ | isIdentStart c && ImplicitParams `elem` exts -> do+ discard 1+ id <- lexWhile isIdent+ return $ IDupVarId id++ '%':c:_ | isIdentStart c && ImplicitParams `elem` exts -> do+ discard 1+ id <- lexWhile isIdent+ return $ ILinVarId id+ -- end implicit parameters++ -- harp+ '(':'|':c:_ | RegularPatterns `elem` exts && not (isHSymbol c) ->+ discard 2 >> return RPGuardOpen+ | Arrows `elem` exts && not (isHSymbol c) ->+ discard 2 >> return OpenArrowBracket+ '|':')':_ | RegularPatterns `elem` exts -> discard 2 >> return RPGuardClose+ | Arrows `elem` exts -> discard 2 >> return CloseArrowBracket+ {- This is handled by the reserved_ops above.+ '@':':':_ | RegularPatterns `elem` exts ->+ do discard 2+ return RPCAt -}+++ -- template haskell+ '[':'|':'|':_ | TemplateHaskell `elem` exts -> do+ discard 3+ return THTExpQuote++ '[':'e':'|':'|':_ | TemplateHaskell `elem` exts -> do+ discard 4+ return THTExpQuote++ '[':'|':_ | TemplateHaskell `elem` exts -> do+ discard 2+ return THExpQuote++ '[':c:'|':_ | c == 'e' && TemplateHaskell `elem` exts -> do+ discard 3+ return THExpQuote+ | c == 'p' && TemplateHaskell `elem` exts -> do+ discard 3+ return THPatQuote+ | c == 'd' && TemplateHaskell `elem` exts -> do+ discard 3+ return THDecQuote+ | c == 't' && TemplateHaskell `elem` exts -> do+ discard 3+ return THTypQuote+ '[':'$':c:_ | isIdentStart c && QuasiQuotes `elem` exts ->+ discard 2 >> lexQuasiQuote c++ '[':c:s' | isIdentStart c && QuasiQuotes `elem` exts && case dropWhile isIdent s' of { '|':_ -> True;_->False} ->+ discard 1 >> lexQuasiQuote c+ | isUpper c && QuasiQuotes `elem` exts && case dropWhile isPossiblyQvar s' of { '|':_ -> True;_->False} ->+ discard 1 >> lexQuasiQuote c++ '|':'|':']':_ | TemplateHaskell `elem` exts -> do+ discard 3+ return THTCloseQuote+ '|':']':_ | TemplateHaskell `elem` exts -> do+ discard 2+ return THCloseQuote++ '$':c1:c2:_ | isIdentStart c1 && TemplateHaskell `elem` exts -> do+ discard 1+ id <- lexWhile isIdent+ return $ THIdEscape id+ | c1 == '(' && TemplateHaskell `elem` exts -> do+ discard 2+ return THParenEscape+ | c1 == '$' && isIdentStart c2 && TemplateHaskell `elem` exts -> do+ discard 2+ id <- lexWhile isIdent+ return $ THTIdEscape id+ | c1 == '$' && c2 == '(' && TemplateHaskell `elem` exts -> do+ discard 3+ return THTParenEscape+ -- end template haskell++ -- hsx+ '<':'%':c:_ | XmlSyntax `elem` exts ->+ case c of+ '>' -> do discard 3+ pushExtContextL ChildCtxt+ return XChildTagOpen+ _ -> do discard 2+ pushExtContextL CodeTagCtxt+ return XCodeTagOpen+ '<':c:_ | isAlpha c && XmlSyntax `elem` exts -> do+ discard 1+ pushExtContextL TagCtxt+ return XStdTagOpen+ -- end hsx++ '(':'#':c:_ | unboxed exts && not (isHSymbol c) -> discard 2 >> return LeftHashParen++ '#':')':_ | unboxed exts -> discard 2 >> return RightHashParen++ -- pragmas++ '{':'-':'#':_ -> saveExtensionsL >> discard 3 >> lexPragmaStart++ '#':'-':'}':_ -> restoreExtensionsL >> discard 3 >> return PragmaEnd++ -- Parallel arrays++ '[':':':_ | ParallelArrays `elem` exts -> discard 2 >> return ParArrayLeftSquare++ ':':']':_ | ParallelArrays `elem` exts -> discard 2 >> return ParArrayRightSquare++ -- Lexed seperately to deal with visible type applciation++ '@':c:_ | TypeApplications `elem` exts+ -- Operator starting with an '@'+ && not (isOpSymbol c) -> do+ lc <- getLastChar+ if isIdent lc+ then discard 1 >> return At+ else discard 1 >> return TApp++ '#':c:_ | OverloadedLabels `elem` exts+ && isIdentStart c -> do+ discard 1+ [ident] <- lexIdents+ return $ LabelVarId ident+++ c:_ | isDigit c -> lexDecimalOrFloat++ | isUpper c -> lexConIdOrQual ""++ | isIdentStart c -> do+ idents <- lexIdents+ case idents of+ [ident] -> case lookup ident (reserved_ids ++ special_varids) of+ Just (keyword, scheme) ->+ -- check if an extension keyword is enabled+ if isEnabled scheme exts+ then flagKW keyword >> return keyword+ else return $ VarId ident+ Nothing -> return $ VarId ident+ _ -> return $ DVarId idents++ | isHSymbol c -> do+ sym <- lexWhile isHSymbol+ return $ case lookup sym (reserved_ops ++ special_varops) of+ Just (t , scheme) ->+ -- check if an extension op is enabled+ if isEnabled scheme exts+ then t+ else case c of+ ':' -> ConSym sym+ _ -> VarSym sym+ Nothing -> case c of+ ':' -> ConSym sym+ _ -> VarSym sym++ | otherwise -> do+ discard 1+ case c of++ -- First the special symbols+ '(' -> return LeftParen+ ')' -> return RightParen+ ',' -> return Comma+ ';' -> return SemiColon+ '[' -> return LeftSquare+ ']' -> return RightSquare+ '`' -> return BackQuote+ '{' -> do+ pushContextL NoLayout+ return LeftCurly+ '}' -> do+ popContextL "lexStdToken"+ return RightCurly++ '\'' -> lexCharacter+ '"' -> lexString++ _ -> fail ("Illegal character \'" ++ show c ++ "\'\n")++ where lexIdents :: Lex a [String]+ lexIdents = do+ ident <- lexWhile isIdent+ s <- getInput+ exts <- getExtensionsL+ case s of+ -- This is the only way we can get more than one ident in the list+ -- and it requires XmlSyntax to be on.+ '-':c:_ | XmlSyntax `elem` exts && isAlpha c -> do+ discard 1+ idents <- lexIdents+ return $ ident : idents+ '#':_ | MagicHash `elem` exts -> do+ hashes <- lexWhile (== '#')+ return [ident ++ hashes]+ _ -> return [ident]++ lexQuasiQuote :: Char -> Lex a Token+ lexQuasiQuote c = do+ -- We've seen and dropped [$ already+ ident <- lexQuoter+ matchChar '|' "Malformed quasi-quote quoter"+ body <- lexQQBody+ return $ THQuasiQuote (ident, body)+ where lexQuoter+ | isIdentStart c = lexWhile isIdent+ | otherwise = do+ qualThing <- lexConIdOrQual ""+ case qualThing of+ QVarId (s1,s2) -> return $ s1 ++ '.':s2+ QVarSym (s1, s2) -> return $ s1 ++ '.':s2+ _ -> fail "Malformed quasi-quote quoter"++ lexQQBody :: Lex a String+ lexQQBody = do+ s <- getInput+ case s of+ '\\':']':_ -> do discard 2+ str <- lexQQBody+ return (']':str)+ '\\':'|':_ -> do discard 2+ str <- lexQQBody+ return ('|':str)+ '|':']':_ -> discard 2 >> return ""+ '|':_ -> do discard 1+ str <- lexQQBody+ return ('|':str)+ ']':_ -> do discard 1+ str <- lexQQBody+ return (']':str)+ '\\':_ -> do discard 1+ str <- lexQQBody+ return ('\\':str)+ '\n':_ -> do lexNewline+ str <- lexQQBody+ return ('\n':str)+ [] -> fail "Unexpected end of input while lexing quasi-quoter"+ _ -> do str <- lexWhile (not . (`elem` "\\|\n"))+ rest <- lexQQBody+ return (str++rest)++unboxed :: [KnownExtension] -> Bool+unboxed exts = UnboxedSums `elem` exts || UnboxedTuples `elem` exts++-- Underscores are used in some pragmas. Options pragmas are a special case+-- with our representation: the thing after the underscore is a parameter.+-- Strip off the parameters to option pragmas by hand here, everything else+-- sits in the pragmas map.+lookupKnownPragma :: String -> Maybe Token+lookupKnownPragma s =+ case map toLower s of+ x | "options_" `isPrefixOf` x -> Just $ OPTIONS (Just $ drop 8 s, undefined)+ | "options" == x -> Just $ OPTIONS (Nothing, undefined)+ | otherwise -> lookup x pragmas++lexPragmaStart :: Lex a Token+lexPragmaStart = do+ lexWhile_ isSpace+ pr <- lexWhile isPragmaChar+ case lookupKnownPragma pr of+ Just (INLINE True) -> do+ s <- getInput+ case map toLower s of+ ' ':'c':'o':'n':'l':'i':'k':'e':_ -> do+ discard 8+ return INLINE_CONLIKE+ _ -> return $ INLINE True+ Just SPECIALISE -> do+ s <- getInput+ case dropWhile isSpace $ map toLower s of+ 'i':'n':'l':'i':'n':'e':_ -> do+ lexWhile_ isSpace+ discard 6+ return $ SPECIALISE_INLINE True+ 'n':'o':'i':'n':'l':'i':'n':'e':_ -> do+ lexWhile_ isSpace+ discard 8+ return $ SPECIALISE_INLINE False+ 'n':'o':'t':'i':'n':'l':'i':'n':'e':_ -> do+ lexWhile_ isSpace+ discard 9+ return $ SPECIALISE_INLINE False+ _ -> return SPECIALISE++ Just (OPTIONS opt) -> -- see, I promised we'd mask out the 'undefined'+ -- We do not want to store necessary whitespace in the datatype+ -- but if the pragma starts with a newline then we must keep+ -- it to differentiate the two cases.+ let dropIfSpace (' ':xs) = xs+ dropIfSpace xs = xs+ in+ case fst opt of+ Just opt' -> do+ rest <- lexRawPragma+ return $ OPTIONS (Just opt', dropIfSpace rest)+ Nothing -> do+ s <- getInput+ case s of+ x:_ | isSpace x -> do+ rest <- lexRawPragma+ return $ OPTIONS (Nothing, dropIfSpace rest)+ _ -> fail "Malformed Options pragma"+ Just RULES -> do -- Rules enable ScopedTypeVariables locally.+ addExtensionL ScopedTypeVariables+ return RULES+{- Just (CFILES _) -> do+ rest <- lexRawPragma+ return $ CFILES rest+ Just (INCLUDE _) -> do+ rest <- lexRawPragma+ return $ INCLUDE rest -}+ Just p -> return p++ _ -> fail "Internal error: Unrecognised recognised pragma"+ -- do rawStr <- lexRawPragma+ -- return $ PragmaUnknown (pr, rawStr) -- no support for unrecognized pragmas, treat as comment+ -- discard 3 -- #-}+ -- topLexer -- we just discard it as a comment for now and restart -}++lexRawPragma :: Lex a String+lexRawPragma = lexRawPragmaAux+ where lexRawPragmaAux = do+ rpr <- lexWhile (/='#')+ s <- getInput+ case s of+ '#':'-':'}':_ -> return rpr+ "" -> fail "End-of-file inside pragma"+ _ -> do+ discard 1+ rpr' <- lexRawPragma+ return $ rpr ++ '#':rpr'++lexDecimalOrFloat :: Lex a Token+lexDecimalOrFloat = do+ ds <- lexWhile isDigit+ rest <- getInput+ exts <- getExtensionsL+ case rest of+ ('.':d:_) | isDigit d -> do+ discard 1+ frac <- lexWhile isDigit+ let num = parseInteger 10 (ds ++ frac)+ decimals = toInteger (length frac)+ (exponent, estr) <- do+ rest2 <- getInput+ case rest2 of+ 'e':_ -> lexExponent+ 'E':_ -> lexExponent+ _ -> return (0,"")+ con <- lexHash FloatTok FloatTokHash (Right DoubleTokHash)+ return $ con ((num%1) * 10^^(exponent - decimals), ds ++ '.':frac ++ estr)+ e:_ | toLower e == 'e' -> do+ (exponent, estr) <- lexExponent+ con <- lexHash FloatTok FloatTokHash (Right DoubleTokHash)+ return $ con ((parseInteger 10 ds%1) * 10^^exponent, ds ++ estr)+ '#':'#':_ | MagicHash `elem` exts -> discard 2 >> return (WordTokHash (parseInteger 10 ds, ds))+ '#':_ | MagicHash `elem` exts -> discard 1 >> return (IntTokHash (parseInteger 10 ds, ds))+ _ -> return (IntTok (parseInteger 10 ds, ds))++ where+ lexExponent :: Lex a (Integer, String)+ lexExponent = do+ (e:r) <- getInput+ discard 1 -- 'e' or 'E'+ case r of+ '+':d:_ | isDigit d -> do+ discard 1+ (n, str) <- lexDecimal+ return (n, e:'+':str)+ '-':d:_ | isDigit d -> do+ discard 1+ (n, str) <- lexDecimal+ return (negate n, e:'-':str)+ d:_ | isDigit d -> lexDecimal >>= \(n,str) -> return (n, e:str)+ _ -> fail "Float with missing exponent"++lexHash :: (b -> Token) -> (b -> Token) -> Either String (b -> Token) -> Lex a (b -> Token)+lexHash a b c = do+ exts <- getExtensionsL+ if MagicHash `elem` exts+ then do+ r <- getInput+ case r of+ '#':'#':_ -> case c of+ Right c' -> discard 2 >> return c'+ Left s -> fail s+ '#':_ -> discard 1 >> return b+ _ -> return a+ else return a++lexConIdOrQual :: String -> Lex a Token+lexConIdOrQual qual = do+ con <- lexWhile isIdent+ let conid | null qual = ConId con+ | otherwise = QConId (qual,con)+ qual' | null qual = con+ | otherwise = qual ++ '.':con+ just_a_conid <- alternative (return conid)+ rest <- getInput+ exts <- getExtensionsL+ case rest of+ '.':c:_+ | isIdentStart c -> do -- qualified varid?+ discard 1+ ident <- lexWhile isIdent+ s <- getInput+ exts' <- getExtensionsL+ ident' <- case s of+ '#':_ | MagicHash `elem` exts' -> discard 1 >> return (ident ++ "#")+ _ -> return ident+ case lookup ident' reserved_ids of+ -- cannot qualify a reserved word+ Just (_,scheme) | isEnabled scheme exts' -> just_a_conid+ _ -> return (QVarId (qual', ident'))++ | isUpper c -> do -- qualified conid?+ discard 1+ lexConIdOrQual qual'++ | isHSymbol c -> do -- qualified symbol?+ discard 1+ sym <- lexWhile isHSymbol+ exts' <- getExtensionsL+ case lookup sym reserved_ops of+ -- cannot qualify a reserved operator+ Just (_,scheme) | isEnabled scheme exts' -> just_a_conid+ _ -> return $ case c of+ ':' -> QConSym (qual', sym)+ _ -> QVarSym (qual', sym)++ '#':cs+ | null cs ||+ not (isHSymbol $ head cs) &&+ not (isIdent $ head cs) && MagicHash `elem` exts -> do+ discard 1+ case conid of+ ConId con' -> return $ ConId $ con' ++ "#"+ QConId (q,con') -> return $ QConId (q,con' ++ "#")+ _ -> fail $ "lexConIdOrQual: unexpected token: " ++ show conid+ _ -> return conid -- not a qualified thing++lexCharacter :: Lex a Token+lexCharacter = do -- We need to keep track of not only character constants but also TH 'x and ''T+ -- We've seen ' so far+ s <- getInput+ exts <- getExtensionsL+ case s of+ '\'':_ | TemplateHaskell `elem` exts -> discard 1 >> return THTyQuote+ '\\':_ -> do+ (c,raw) <- lexEscape+ matchQuote+ con <- lexHash Character CharacterHash+ (Left "Double hash not available for character literals")+ return (con (c, '\\':raw))+ c:'\'':_ -> do+ discard 2+ con <- lexHash Character CharacterHash+ (Left "Double hash not available for character literals")+ return (con (c, [c]))+ _ | any (`elem` exts) [TemplateHaskell, DataKinds] -> return THVarQuote+ _ -> fail "Improper character constant or misplaced \'"++ where matchQuote = matchChar '\'' "Improperly terminated character constant"+++lexString :: Lex a Token+lexString = loop [] []+ where+ loop !s !raw = do+ r <- getInput+ exts <- getExtensionsL+ case r of+ '\\':'&':_ -> do+ discard 2+ loop s ('&':'\\':raw)+ '\\':c:_ | isSpace c -> do+ discard 1+ wcs <- lexWhiteChars+ matchChar '\\' "Illegal character in string gap"+ loop s ('\\':revAppend wcs ('\\':raw))+ | otherwise -> do+ (ce, str) <- lexEscape+ loop (ce `seq` ce : s) (revAppend str ('\\':raw))+ '"':'#':_ | MagicHash `elem` exts -> do+ discard 2+ return (StringHash (reverse s, reverse raw))+ '"':_ -> do+ discard 1+ return (StringTok (reverse s, reverse raw))+ c:_ | c /= '\n' -> do+ discard 1+ loop (c:s) (c:raw)+ _ -> fail "Improperly terminated string"++ revAppend :: [a] -> [a] -> [a]+ revAppend [] ys = ys+ revAppend (x:xs) ys = revAppend xs (x:ys)++ lexWhiteChars :: Lex a String+ lexWhiteChars = do+ s <- getInput+ case s of+ '\n':_ -> do+ lexNewline+ wcs <- lexWhiteChars+ return $ '\n':wcs+ '\t':_ -> do+ lexTab+ wcs <- lexWhiteChars+ return $ '\t':wcs+ c:_ | isSpace c -> do+ discard 1+ wcs <- lexWhiteChars+ return $ c:wcs+ _ -> return ""++lexEscape :: Lex a (Char, String)+lexEscape = do+ discard 1+ r <- getInput+ case r of++-- Production charesc from section B.2 (Note: \& is handled by caller)++ 'a':_ -> discard 1 >> return ('\a', "a")+ 'b':_ -> discard 1 >> return ('\b', "b")+ 'f':_ -> discard 1 >> return ('\f', "f")+ 'n':_ -> discard 1 >> return ('\n', "n")+ 'r':_ -> discard 1 >> return ('\r', "r")+ 't':_ -> discard 1 >> return ('\t', "t")+ 'v':_ -> discard 1 >> return ('\v', "v")+ '\\':_ -> discard 1 >> return ('\\', "\\")+ '"':_ -> discard 1 >> return ('\"', "\"")+ '\'':_ -> discard 1 >> return ('\'', "\'")++-- Production ascii from section B.2++ '^':c:_ -> discard 2 >> cntrl c+ 'N':'U':'L':_ -> discard 3 >> return ('\NUL', "NUL")+ 'S':'O':'H':_ -> discard 3 >> return ('\SOH', "SOH")+ 'S':'T':'X':_ -> discard 3 >> return ('\STX', "STX")+ 'E':'T':'X':_ -> discard 3 >> return ('\ETX', "ETX")+ 'E':'O':'T':_ -> discard 3 >> return ('\EOT', "EOT")+ 'E':'N':'Q':_ -> discard 3 >> return ('\ENQ', "ENQ")+ 'A':'C':'K':_ -> discard 3 >> return ('\ACK', "ACK")+ 'B':'E':'L':_ -> discard 3 >> return ('\BEL', "BEL")+ 'B':'S':_ -> discard 2 >> return ('\BS', "BS")+ 'H':'T':_ -> discard 2 >> return ('\HT', "HT")+ 'L':'F':_ -> discard 2 >> return ('\LF', "LF")+ 'V':'T':_ -> discard 2 >> return ('\VT', "VT")+ 'F':'F':_ -> discard 2 >> return ('\FF', "FF")+ 'C':'R':_ -> discard 2 >> return ('\CR', "CR")+ 'S':'O':_ -> discard 2 >> return ('\SO', "SO")+ 'S':'I':_ -> discard 2 >> return ('\SI', "SI")+ 'D':'L':'E':_ -> discard 3 >> return ('\DLE', "DLE")+ 'D':'C':'1':_ -> discard 3 >> return ('\DC1', "DC1")+ 'D':'C':'2':_ -> discard 3 >> return ('\DC2', "DC2")+ 'D':'C':'3':_ -> discard 3 >> return ('\DC3', "DC3")+ 'D':'C':'4':_ -> discard 3 >> return ('\DC4', "DC4")+ 'N':'A':'K':_ -> discard 3 >> return ('\NAK', "NAK")+ 'S':'Y':'N':_ -> discard 3 >> return ('\SYN', "SYN")+ 'E':'T':'B':_ -> discard 3 >> return ('\ETB', "ETB")+ 'C':'A':'N':_ -> discard 3 >> return ('\CAN', "CAN")+ 'E':'M':_ -> discard 2 >> return ('\EM', "EM")+ 'S':'U':'B':_ -> discard 3 >> return ('\SUB', "SUB")+ 'E':'S':'C':_ -> discard 3 >> return ('\ESC', "ESC")+ 'F':'S':_ -> discard 2 >> return ('\FS', "FS")+ 'G':'S':_ -> discard 2 >> return ('\GS', "GS")+ 'R':'S':_ -> discard 2 >> return ('\RS', "RS")+ 'U':'S':_ -> discard 2 >> return ('\US', "US")+ 'S':'P':_ -> discard 2 >> return ('\SP', "SP")+ 'D':'E':'L':_ -> discard 3 >> return ('\DEL', "DEL")++-- Escaped numbers++ 'o':c:_ | isOctDigit c -> do+ discard 1+ (n, raw) <- lexOctal+ n' <- checkChar n+ return (n', 'o':raw)+ 'x':c:_ | isHexDigit c -> do+ discard 1+ (n, raw) <- lexHexadecimal+ n' <- checkChar n+ return (n', 'x':raw)+ c:_ | isDigit c -> do+ (n, raw) <- lexDecimal+ n' <- checkChar n+ return (n', raw)++ _ -> fail "Illegal escape sequence"++ where+ checkChar n | n <= 0x10FFFF = return (chr (fromInteger n))+ checkChar _ = fail "Character constant out of range"++-- Production cntrl from section B.2++ cntrl :: Char -> Lex a (Char, String)+ cntrl c | c >= '@' && c <= '_' = return (chr (ord c - ord '@'), '^':c:[])+ cntrl _ = fail "Illegal control character"++-- assumes at least one octal digit+lexOctal :: Lex a (Integer, String)+lexOctal = do+ ds <- lexWhile isOctDigit+ return (parseInteger 8 ds, ds)++-- assumes at least one binary digit+lexBinary :: Lex a (Integer, String)+lexBinary = do+ ds <- lexWhile isBinDigit+ return (parseInteger 2 ds, ds)++-- assumes at least one hexadecimal digit+lexHexadecimal :: Lex a (Integer, String)+lexHexadecimal = do+ ds <- lexWhile isHexDigit+ return (parseInteger 16 ds, ds)++-- assumes at least one decimal digit+lexDecimal :: Lex a (Integer, String)+lexDecimal = do+ ds <- lexWhile isDigit+ return (parseInteger 10 ds, ds)++-- Stolen from Hugs's Prelude+parseInteger :: Integer -> String -> Integer+parseInteger radix = go 0+ where+ go !acc [] = acc+ go !acc (d:ds) = go (acc * radix + toInteger (digitToInt d)) ds++flagKW :: Token -> Lex a ()+flagKW t =+ when (t `elem` [KW_Do, KW_MDo]) $ do+ exts <- getExtensionsL+ when (NondecreasingIndentation `elem` exts) flagDo++-- | Selects ASCII binary digits, i.e. @\'0\'@..@\'1\'@.+isBinDigit :: Char -> Bool+isBinDigit c = c >= '0' && c <= '1'+------------------------------------------------------------------+-- "Pretty" printing for tokens++showToken :: Token -> String+showToken t = case t of+ VarId s -> s+ LabelVarId s -> '#':s+ QVarId (q,s) -> q ++ '.':s+ IDupVarId s -> '?':s+ ILinVarId s -> '%':s+ ConId s -> s+ QConId (q,s) -> q ++ '.':s+ DVarId ss -> intercalate "-" ss+ VarSym s -> s+ ConSym s -> s+ QVarSym (q,s) -> q ++ '.':s+ QConSym (q,s) -> q ++ '.':s+ IntTok (_, s) -> s+ FloatTok (_, s) -> s+ Character (_, s) -> '\'':s ++ "'"+ StringTok (_, s) -> '"':s ++ "\""+ IntTokHash (_, s) -> s ++ "#"+ WordTokHash (_, s) -> s ++ "##"+ FloatTokHash (_, s) -> s ++ "#"+ DoubleTokHash (_, s) -> s ++ "##"+ CharacterHash (_, s) -> '\'':s ++ "'#"+ StringHash (_, s) -> '"':s ++ "\"#"+ LeftParen -> "("+ RightParen -> ")"+ LeftHashParen -> "(#"+ RightHashParen -> "#)"+ SemiColon -> ";"+ LeftCurly -> "{"+ RightCurly -> "}"+ VRightCurly -> "virtual }"+ LeftSquare -> "["+ RightSquare -> "]"+ ParArrayLeftSquare -> "[:"+ ParArrayRightSquare -> ":]"+ Comma -> ","+ Underscore -> "_"+ BackQuote -> "`"+ QuoteColon -> "':"+ Dot -> "."+ DotDot -> ".."+ Colon -> ":"+ DoubleColon -> "::"+ Equals -> "="+ Backslash -> "\\"+ Bar -> "|"+ LeftArrow -> "<-"+ RightArrow -> "->"+ At -> "@"+ TApp -> "@"+ Tilde -> "~"+ DoubleArrow -> "=>"+ Minus -> "-"+ Exclamation -> "!"+ Star -> "*"+ LeftArrowTail -> "-<"+ RightArrowTail -> ">-"+ LeftDblArrowTail -> "-<<"+ RightDblArrowTail -> ">>-"+ OpenArrowBracket -> "(|"+ CloseArrowBracket -> "|)"+ THExpQuote -> "[|"+ THTExpQuote -> "[||"+ THPatQuote -> "[p|"+ THDecQuote -> "[d|"+ THTypQuote -> "[t|"+ THCloseQuote -> "|]"+ THTCloseQuote -> "||]"+ THIdEscape s -> '$':s+ THParenEscape -> "$("+ THTIdEscape s -> "$$" ++ s+ THTParenEscape -> "$$("+ THVarQuote -> "'"+ THTyQuote -> "''"+ THQuasiQuote (n,q) -> "[$" ++ n ++ "|" ++ q ++ "]"+ RPGuardOpen -> "(|"+ RPGuardClose -> "|)"+ RPCAt -> "@:"+ XCodeTagOpen -> "<%"+ XCodeTagClose -> "%>"+ XStdTagOpen -> "<"+ XStdTagClose -> ">"+ XCloseTagOpen -> "</"+ XEmptyTagClose -> "/>"+ XPCDATA s -> "PCDATA " ++ s+ XRPatOpen -> "<["+ XRPatClose -> "]>"+ PragmaEnd -> "#-}"+ RULES -> "{-# RULES"+ INLINE b -> "{-# " ++ if b then "INLINE" else "NOINLINE"+ INLINE_CONLIKE -> "{-# " ++ "INLINE CONLIKE"+ SPECIALISE -> "{-# SPECIALISE"+ SPECIALISE_INLINE b -> "{-# SPECIALISE " ++ if b then "INLINE" else "NOINLINE"+ SOURCE -> "{-# SOURCE"+ DEPRECATED -> "{-# DEPRECATED"+ WARNING -> "{-# WARNING"+ SCC -> "{-# SCC"+ GENERATED -> "{-# GENERATED"+ CORE -> "{-# CORE"+ UNPACK -> "{-# UNPACK"+ NOUNPACK -> "{-# NOUNPACK"+ OPTIONS (mt,_) -> "{-# OPTIONS" ++ maybe "" (':':) mt ++ " ..."+-- CFILES s -> "{-# CFILES ..."+-- INCLUDE s -> "{-# INCLUDE ..."+ LANGUAGE -> "{-# LANGUAGE"+ ANN -> "{-# ANN"+ MINIMAL -> "{-# MINIMAL"+ NO_OVERLAP -> "{-# NO_OVERLAP"+ OVERLAP -> "{-# OVERLAP"+ OVERLAPPING -> "{-# OVERLAPPING"+ OVERLAPPABLE -> "{-# OVERLAPPABLE"+ OVERLAPS -> "{-# OVERLAPS"+ INCOHERENT -> "{-# INCOHERENT"+ COMPLETE -> "{-# COMPLETE"+ KW_As -> "as"+ KW_By -> "by"+ KW_Case -> "case"+ KW_Class -> "class"+ KW_Data -> "data"+ KW_Default -> "default"+ KW_Deriving -> "deriving"+ KW_Do -> "do"+ KW_MDo -> "mdo"+ KW_Else -> "else"+ KW_Family -> "family"+ KW_Forall -> "forall"+ KW_Group -> "group"+ KW_Hiding -> "hiding"+ KW_If -> "if"+ KW_Import -> "import"+ KW_In -> "in"+ KW_Infix -> "infix"+ KW_InfixL -> "infixl"+ KW_InfixR -> "infixr"+ KW_Instance -> "instance"+ KW_Let -> "let"+ KW_Module -> "module"+ KW_NewType -> "newtype"+ KW_Of -> "of"+ KW_Proc -> "proc"+ KW_Rec -> "rec"+ KW_Then -> "then"+ KW_Type -> "type"+ KW_Using -> "using"+ KW_Where -> "where"+ KW_Qualified -> "qualified"+ KW_Foreign -> "foreign"+ KW_Export -> "export"+ KW_Safe -> "safe"+ KW_Unsafe -> "unsafe"+ KW_Threadsafe -> "threadsafe"+ KW_Interruptible -> "interruptible"+ KW_StdCall -> "stdcall"+ KW_CCall -> "ccall"+ XChildTagOpen -> "<%>"+ KW_CPlusPlus -> "cplusplus"+ KW_DotNet -> "dotnet"+ KW_Jvm -> "jvm"+ KW_Js -> "js"+ KW_JavaScript -> "javascript"+ KW_CApi -> "capi"+ KW_Role -> "role"+ KW_Pattern -> "pattern"+ KW_Stock -> "stock"+ KW_Anyclass -> "anyclass"+ KW_Via -> "via"++ EOF -> "EOF"
@@ -1,1768 +1,2275 @@ > {-> {-# OPTIONS_HADDOCK hide #-}-> ------------------------------------------------------------------------------> -- |-> -- Module : Language.Haskell.Exts.Annotated.Parser-> -- Copyright : (c) Niklas Broberg 2004-2009,-> -- Original (c) Simon Marlow, Sven Panne 1997-2000-> -- License : BSD-style (see the file LICENSE.txt)-> ---> -- Maintainer : Niklas Broberg, d00nibro@chalmers.se-> -- Stability : stable-> -- Portability : portable-> ---> ---> ------------------------------------------------------------------------------>-> module Language.Haskell.Exts.InternalParser (-> -- * General parsing-> ParseMode(..), defaultParseMode, ParseResult(..), fromParseResult,-> -- * Parsing of specific AST elements-> -- ** Modules-> parseModule, parseModuleWithMode, parseModuleWithComments,-> -- ** Expressions-> parseExp, parseExpWithMode, parseExpWithComments,-> -- ** Patterns-> parsePat, parsePatWithMode, parsePatWithComments,-> -- ** Declarations-> parseDecl, parseDeclWithMode, parseDeclWithComments,-> -- ** Types-> parseType, parseTypeWithMode, parseTypeWithComments,-> -- ** Option pragmas-> getTopPragmas-> ) where->-> import Language.Haskell.Exts.Annotated.Syntax hiding ( Type(..), Exp(..), Asst(..), XAttr(..), FieldUpdate(..) )-> import Language.Haskell.Exts.Annotated.Syntax ( Type, Exp, Asst )-> import Language.Haskell.Exts.ParseMonad-> import Language.Haskell.Exts.Lexer-> import Language.Haskell.Exts.ParseUtils-> import Language.Haskell.Exts.Annotated.Fixity-> import Language.Haskell.Exts.SrcLoc-> import Language.Haskell.Exts.Comments ( Comment )-> import Language.Haskell.Exts.Extension--> import Control.Monad ( liftM )-import Debug.Trace (trace)--> }--------------------------------------------------------------------------------This module comprises a parser for Haskell 98 with the following extensions--* Multi-parameter type classes with functional dependencies-* Implicit parameters-* Pattern guards-* Mdo notation-* FFI-* HaRP-* HSP--Most of the code is blatantly stolen from the GHC module Language.Haskell.Parser.-Some of the code for extensions is greatly influenced by GHC's internal parser-library, ghc/compiler/parser/Parser.y.-------------------------------------------------------------------------------Conflicts: 6 shift/reduce--2 for ambiguity in 'case x of y | let z = y in z :: Bool -> b' [State 12, 244]- (don't know whether to reduce 'Bool' as a btype or shift the '->'.- Similarly lambda and if. The default resolution in favour of the- shift means that a guard can never end with a type signature.- In mitigation: it's a rare case and no Haskell implementation- allows these, because it would require unbounded lookahead.)- There are 2 conflicts rather than one because contexts are parsed- as btypes (cf ctype).--1 for ambiguity in 'let ?x ...' [State 712]- the parser can't tell whether the ?x is the lhs of a normal binding or- an implicit binding. Fortunately resolving as shift gives it the only- sensible meaning, namely the lhs of an implicit binding.--1 for ambiguity using hybrid modules [State 116]- For HSP pages that start with a <% %> block, the parser cannot tell whether- to reduce a srcloc or shift the starting <%. Since any other body could not- start with <%, shifting is the only sensible thing to do.--1 for ambiguity using toplevel xml modules [State 119]- For HSP xml pages starting with a <, the parser cannot tell whether to shift- that < or reduce an implicit 'open'. Since no other body could possibly start- with <, shifting is the only sensible thing to do.--1 for ambiguity in '{-# RULES "name" [ ... #-}' [State 318]- we don't know whether the '[' starts the activation or not: it- might be the start of the declaration with the activation being- empty. Resolving with shift means the declaration cannot start with '['.---------------------------------------------------------------------------------> %token-> VARID { Loc _ (VarId _) }-> QVARID { Loc _ (QVarId _) }-> IDUPID { Loc _ (IDupVarId _) } -- duplicable implicit parameter ?x-> ILINID { Loc _ (ILinVarId _) } -- linear implicit parameter %x-> CONID { Loc _ (ConId _) }-> QCONID { Loc _ (QConId _) }-> DVARID { Loc _ (DVarId _) } -- VARID containing dashes-> VARSYM { Loc _ (VarSym _) }-> CONSYM { Loc _ (ConSym _) }-> QVARSYM { Loc _ (QVarSym _) }-> QCONSYM { Loc _ (QConSym _) }-> INT { Loc _ (IntTok _) }-> RATIONAL { Loc _ (FloatTok _) }-> CHAR { Loc _ (Character _) }-> STRING { Loc _ (StringTok _) }--> PRIMINT { Loc _ (IntTokHash _) }-> PRIMWORD { Loc _ (WordTokHash _) }-> PRIMFLOAT { Loc _ (FloatTokHash _) }-> PRIMDOUBLE { Loc _ (DoubleTokHash _) }-> PRIMCHAR { Loc _ (CharacterHash _) }-> PRIMSTRING { Loc _ (StringHash _) }--Symbols--> '(' { Loc $$ LeftParen }-> ')' { Loc $$ RightParen }-> '(#' { Loc $$ LeftHashParen }-> '#)' { Loc $$ RightHashParen }-> '{|' { Loc $$ LeftCurlyBar }-> '|}' { Loc $$ RightCurlyBar }-> ';' { Loc $$ SemiColon }-> '{' { Loc $$ LeftCurly }-> '}' { Loc $$ RightCurly }-> vccurly { Loc $$ VRightCurly } -- a virtual close brace-> '[' { Loc $$ LeftSquare }-> ']' { Loc $$ RightSquare }-> ',' { Loc $$ Comma }-> '_' { Loc $$ Underscore }-> '`' { Loc $$ BackQuote }--Reserved operators--> '.' { Loc $$ Dot }-> '..' { Loc $$ DotDot }-> ':' { Loc $$ Colon }-> '::' { Loc $$ DoubleColon }-> '=' { Loc $$ Equals }-> '\\' { Loc $$ Backslash }-> '|' { Loc $$ Bar }-> '<-' { Loc $$ LeftArrow }-> '->' { Loc $$ RightArrow }-> '@' { Loc $$ At }-> '~' { Loc $$ Tilde }-> '=>' { Loc $$ DoubleArrow }-> '-' { Loc $$ Minus }-> '!' { Loc $$ Exclamation }-> '*' { Loc $$ Star }--Arrows--> '-<' { Loc $$ LeftArrowTail }-> '>-' { Loc $$ RightArrowTail }-> '-<<' { Loc $$ LeftDblArrowTail }-> '>>-' { Loc $$ RightDblArrowTail }--Harp--> '(|' { Loc $$ RPGuardOpen }-> '|)' { Loc $$ RPGuardClose }-> '@:' { Loc $$ RPCAt }--Template Haskell--> IDSPLICE { Loc _ (THIdEscape _) } -- $x-> '$(' { Loc $$ THParenEscape }-> '[|' { Loc $$ THExpQuote }-> '[p|' { Loc $$ THPatQuote }-> '[t|' { Loc $$ THTypQuote }-> '[d|' { Loc $$ THDecQuote }-> '|]' { Loc $$ THCloseQuote }-> VARQUOTE { Loc $$ THVarQuote } -- 'x-> TYPQUOTE { Loc $$ THTyQuote } -- ''T-> QUASIQUOTE { Loc _ (THQuasiQuote _) }--Hsx--> PCDATA { Loc _ (XPCDATA _) }-> '<' { Loc $$ XStdTagOpen }-> '</' { Loc $$ XCloseTagOpen }-> '<%' { Loc $$ XCodeTagOpen }-> '>' { Loc $$ XStdTagClose }-> '/>' { Loc $$ XEmptyTagClose }-> '%>' { Loc $$ XCodeTagClose }-> '<[' { Loc $$ XRPatOpen }-> ']>' { Loc $$ XRPatClose }--FFI--> 'foreign' { Loc $$ KW_Foreign }-> 'export' { Loc $$ KW_Export }-> 'safe' { Loc $$ KW_Safe }-> 'unsafe' { Loc $$ KW_Unsafe }-> 'threadsafe' { Loc $$ KW_Threadsafe }-> 'stdcall' { Loc $$ KW_StdCall }-> 'ccall' { Loc $$ KW_CCall }--Reserved Ids--> 'as' { Loc $$ KW_As }-> 'by' { Loc $$ KW_By } -- transform list comprehensions-> 'case' { Loc $$ KW_Case }-> 'class' { Loc $$ KW_Class }-> 'data' { Loc $$ KW_Data }-> 'default' { Loc $$ KW_Default }-> 'deriving' { Loc $$ KW_Deriving }-> 'do' { Loc $$ KW_Do }-> 'else' { Loc $$ KW_Else }-> 'family' { Loc $$ KW_Family } -- indexed type families-> 'forall' { Loc $$ KW_Forall } -- universal/existential qualification-> 'group' { Loc $$ KW_Group } -- transform list comprehensions-> 'hiding' { Loc $$ KW_Hiding }-> 'if' { Loc $$ KW_If }-> 'import' { Loc $$ KW_Import }-> 'in' { Loc $$ KW_In }-> 'infix' { Loc $$ KW_Infix }-> 'infixl' { Loc $$ KW_InfixL }-> 'infixr' { Loc $$ KW_InfixR }-> 'instance' { Loc $$ KW_Instance }-> 'let' { Loc $$ KW_Let }-> 'mdo' { Loc $$ KW_MDo }-> 'module' { Loc $$ KW_Module }-> 'newtype' { Loc $$ KW_NewType }-> 'of' { Loc $$ KW_Of }-> 'proc' { Loc $$ KW_Proc } -- arrows-> 'rec' { Loc $$ KW_Rec } -- arrows-> 'then' { Loc $$ KW_Then }-> 'type' { Loc $$ KW_Type }-> 'using' { Loc $$ KW_Using } -- transform list comprehensions-> 'where' { Loc $$ KW_Where }-> 'qualified' { Loc $$ KW_Qualified }--Pragmas--> '{-# INLINE' { Loc _ (INLINE _) }-> '{-# SPECIALISE' { Loc $$ SPECIALISE }-> '{-# SPECIALISE_INLINE' { Loc _ (SPECIALISE_INLINE _) }-> '{-# SOURCE' { Loc $$ SOURCE }-> '{-# RULES' { Loc $$ RULES }-> '{-# CORE' { Loc $$ CORE }-> '{-# SCC' { Loc $$ SCC }-> '{-# GENERATED' { Loc $$ GENERATED }-> '{-# DEPRECATED' { Loc $$ DEPRECATED }-> '{-# WARNING' { Loc $$ WARNING }-> '{-# UNPACK' { Loc $$ UNPACK }-> '{-# OPTIONS' { Loc _ (OPTIONS _) }-> '{-# CFILES' { Loc _ (CFILES _) }-> '{-# INCLUDE' { Loc _ (INCLUDE _) }-> '{-# LANGUAGE' { Loc $$ LANGUAGE }-> '#-}' { Loc $$ PragmaEnd }---> %monad { P }-> %lexer { lexer } { Loc _ EOF }-> %error { parseError }-> %name mparseModule page-> %name mparseExp trueexp-> %name mparsePat pat-> %name mparseDecl topdecl-> %name mparseType truectype-> %partial mfindOptPragmas toppragmas-> %tokentype { Loc Token }-> %expect 6-> %%--------------------------------------------------------------------------------HSP Pages--Any HSP-specific parts requiring the XmlSyntax extension enabled will-be governed by the lexing, since all productions require at least one-special lexeme.--TODO: Yuck, this is messy, needs fixing in the AST!--> page :: { Module L }-> : toppragmas topxml {% checkPageModule $2 $1 }-> | toppragmas '<%' module '%>' topxml {% let (os,ss,l) = $1 in checkHybridModule $5 ($3 os ss l) $2 $4 }-> | toppragmas module { let (os,ss,l) = $1 in $2 os ss l }--> topxml :: { PExp L }-> : '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $2 $8;-> let { cn = reverse $6;-> as = reverse $3; };-> return $ XTag ($1 <^^> $9 <** [$1,$5,$7,$9]) n as $4 cn } }-> | '<' name attrs mattr '/>' { XETag ($1 <^^> $5 <** [$1,$5]) $2 (reverse $3) $4 }---> toppragmas :: { ([OptionPragma L],[S],L) }-> : open toppragmasaux close { let (os,ss,ml) = $2 in (os,$1:ss++[$3],$1 <^^> $3) }--> toppragmasaux :: { ([OptionPragma L],[S],Maybe L) }-> : toppragma ';' toppragmasaux { let (os,ss,ml) = $3 in ($1 : os, $2 : ss, Just $ ann $1 <++> nIS $2 <+?> ml) }-> | {- nothing -} { ([],[],Nothing) }--TODO: the various pragma starts with content don't record where that content is located.--> toppragma :: { OptionPragma L }-> : '{-# LANGUAGE' conids optsemis '#-}' { LanguagePragma ($1 <^^> $4 <** ($1:snd $2 ++ reverse $3 ++ [$4])) (fst $2) }-> | '{-# INCLUDE' optsemis '#-}' { let Loc l (INCLUDE s) = $1 in IncludePragma (l <^^> $3 <** (l:reverse $2 ++ [$3])) s }-> | '{-# OPTIONS' optsemis '#-}' { let Loc l (OPTIONS (mc, s)) = $1-> in OptionsPragma (l <^^> $3 <** (l:reverse $2 ++ [$3])) (readTool mc) s }-> | '{-# CFILES' optsemis '#-}' { let Loc l (CFILES s) = $1-> in CFilesPragma (l <^^> $3 <** (l:reverse $2 ++ [$3])) s }--> conids :: { ([Name L],[S]) }-> : conid ',' conids { ($1 : fst $3, $2 : snd $3) }-> | conid { ([$1],[]) }--------------------------------------------------------------------------------Module Header--> module :: { [OptionPragma L] -> [S] -> L -> Module L }-> : optmodulehead body-> { let (is,ds,ss1,inf) = $2-> in \os ss l -> Module (l <++> inf <** (ss ++ ss1)) $1 os is ds }--> optmodulehead :: { Maybe (ModuleHead L) }-> : 'module' modid maybemodwarning maybeexports 'where' { Just $ ModuleHead ($1 <^^> $5 <** [$1,$5]) $2 $3 $4 }-> | {- empty -} { Nothing }--> maybemodwarning :: { Maybe (WarningText L) }-> : '{-# DEPRECATED' STRING '#-}' { let Loc l (StringTok (s,_)) = $2 in Just $ DeprText ($1 <^^> $3 <** [$1,l,$3]) s }-> | '{-# WARNING' STRING '#-}' { let Loc l (StringTok (s,_)) = $2 in Just $ WarnText ($1 <^^> $3 <** [$1,l,$3]) s }-> | {- empty -} { Nothing }--> body :: { ([ImportDecl L],[Decl L],[S],L) }-> : '{' bodyaux '}' { let (is,ds,ss) = $2 in (is,ds,$1:ss ++ [$3], $1 <^^> $3) }-> | open bodyaux close { let (is,ds,ss) = $2 in (is,ds,$1:ss ++ [$3], $1 <^^> $3) }--> bodyaux :: { ([ImportDecl L],[Decl L],[S]) }-> : optsemis impdecls semis topdecls { (reverse (fst $2), fst $4, reverse $1 ++ snd $2 ++ reverse $3 ++ snd $4) }-> | optsemis topdecls { ([], fst $2, reverse $1 ++ snd $2) }-> | optsemis impdecls optsemis { (reverse (fst $2), [], reverse $1 ++ snd $2 ++ reverse $3) }-> | optsemis { ([], [], reverse $1) }--> semis :: { [S] }-> : optsemis ';' { $2 : $1 }--> optsemis :: { [S] }-> : semis { $1 }-> | {- empty -} { [] }--------------------------------------------------------------------------------The Export List--> maybeexports :: { Maybe (ExportSpecList L) }-> : exports { Just $1 }-> | {- empty -} { Nothing }--> exports :: { ExportSpecList L }-> : '(' exportlist optcomma ')' { ExportSpecList ($1 <^^> $4 <** ($1:reverse (snd $2) ++ $3 ++ [$4])) (reverse (fst $2)) }-> | '(' optcomma ')' { ExportSpecList ($1 <^^> $3 <** ($1:$2++[$3])) [] }--> optcomma :: { [S] }-> : ',' { [$1] }-> | {- empty -} { [ ] }--> exportlist :: { ([ExportSpec L],[S]) }-> : exportlist ',' export { ($3 : fst $1, $2 : snd $1) }-> | export { ([$1],[]) }--> export :: { ExportSpec L }-> : qvar { EVar (ann $1) $1 }-> | qtyconorcls { EAbs (ann $1) $1 }-> | qtyconorcls '(' '..' ')' { EThingAll (ann $1 <++> nIS $4 <** [$2,$3,$4]) $1 }-> | qtyconorcls '(' ')' { EThingWith (ann $1 <++> nIS $3 <** [$2,$3]) $1 [] }-> | qtyconorcls '(' cnames ')' { EThingWith (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) $1 (reverse (fst $3)) }-> | 'module' modid { EModuleContents (nIS $1 <++> ann $2 <** [$1]) $2 }--------------------------------------------------------------------------------Import Declarations--> impdecls :: { ([ImportDecl L],[S]) }-> : impdecls semis impdecl { ($3 : fst $1, snd $1 ++ reverse $2) }-> | impdecl { ([$1],[]) }--> impdecl :: { ImportDecl L }-> : 'import' optsrc optqualified maybepkg modid maybeas maybeimpspec-> { let { (mmn,ss,ml) = $6 ;-> l = nIS $1 <++> ann $5 <+?> ml <+?> (fmap ann) $7 <** ($1:snd $2 ++ snd $3 ++ snd $4 ++ ss)}-> in ImportDecl l $5 (fst $3) (fst $2) (fst $4) mmn $7 }--> optsrc :: { (Bool,[S]) }-> : '{-# SOURCE' '#-}' { (True,[$1,$2]) }-> | {- empty -} { (False,[]) }--> optqualified :: { (Bool,[S]) }-> : 'qualified' { (True,[$1]) }-> | {- empty -} { (False, []) }--Requires the PackageImports extension enabled.-> maybepkg :: { (Maybe String,[S]) }-> : STRING {% do { checkEnabled PackageImports ;-> let { Loc l (StringTok (s,_)) = $1 } ;-> return $ (Just s,[l]) } }-> | {- empty -} { (Nothing,[]) }--> maybeas :: { (Maybe (ModuleName L),[S],Maybe L) }-> : 'as' modid { (Just $2,[$1],Just (nIS $1 <++> ann $2)) }-> | {- empty -} { (Nothing,[],Nothing) }---> maybeimpspec :: { Maybe (ImportSpecList L) }-> : impspec { Just $1 }-> | {- empty -} { Nothing }--> impspec :: { ImportSpecList L }-> : opthiding '(' importlist optcomma ')' { let {(b,ml,s) = $1 ;-> l = (ml <?+> ($2 <^^> $5)) <** (s ++ $2:reverse (snd $3) ++ $4 ++ [$5])}-> in ImportSpecList l b (reverse (fst $3)) }-> | opthiding '(' optcomma ')' { let {(b,ml,s) = $1 ; l = (ml <?+> ($2 <^^> $4)) <** (s ++ $2:$3 ++ [$4])}-> in ImportSpecList l b [] }--> opthiding :: { (Bool, Maybe L,[S]) }-> : 'hiding' { (True,Just (nIS $1),[$1]) }-> | {- empty -} { (False,Nothing,[]) }--> importlist :: { ([ImportSpec L],[S]) }-> : importlist ',' importspec { ($3 : fst $1, $2 : snd $1) }-> | importspec { ([$1],[]) }--> importspec :: { ImportSpec L }-> : var { IVar (ann $1) $1 }-> | tyconorcls { IAbs (ann $1) $1 }-> | tyconorcls '(' '..' ')' { IThingAll (ann $1 <++> nIS $4 <** [$2,$3,$4]) $1 }-> | tyconorcls '(' ')' { IThingWith (ann $1 <++> nIS $3 <** [$2,$3]) $1 [] }-> | tyconorcls '(' cnames ')' { IThingWith (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) $1 (reverse (fst $3)) }--> cnames :: { ([CName L],[S]) }-> : cnames ',' cname { ($3 : fst $1, $2 : snd $1) }-> | cname { ([$1],[]) }--> cname :: { CName L }-> : var { VarName (ann $1) $1 }-> | con { ConName (ann $1) $1 }--------------------------------------------------------------------------------Fixity Declarations--> fixdecl :: { Decl L }-> : infix prec ops { let (ops,ss,l) = $3-> in InfixDecl (ann $1 <++> l <** (snd $2 ++ reverse ss)) $1 (fst $2) (reverse ops) }--> prec :: { (Maybe Int, [S]) }-> : {- empty -} { (Nothing, []) }-> | INT {% let Loc l (IntTok (i,_)) = $1 in checkPrec i >>= \i -> return (Just i, [l]) }--> infix :: { Assoc L }-> : 'infix' { AssocNone $ nIS $1 }-> | 'infixl' { AssocLeft $ nIS $1 }-> | 'infixr' { AssocRight $ nIS $1 }--> ops :: { ([Op L],[S],L) }-> : ops ',' op { let (ops,ss,l) = $1 in ($3 : ops, $2 : ss, l <++> ann $3) }-> | op { ([$1],[],ann $1) }--------------------------------------------------------------------------------Top-Level Declarations--Note: The report allows topdecls to be empty. This would result in another-shift/reduce-conflict, so we don't handle this case here, but in bodyaux.--> topdecls :: { ([Decl L],[S]) }-> : topdecls1 optsemis {% checkRevDecls (fst $1) >>= \ds -> return (ds, snd $1 ++ reverse $2) }--> topdecls1 :: { ([Decl L],[S]) }-> : topdecls1 semis topdecl { ($3 : fst $1, snd $1 ++ reverse $2) }-> | topdecl { ([$1],[]) }--> topdecl :: { Decl L }-> : 'type' dtype '=' truectype-> {% do { dh <- checkSimpleType $2;-> let {l = nIS $1 <++> ann $4 <** [$1,$3]};-> return (TypeDecl l dh $4) } }--Requires the TypeFamilies extension enabled, but the lexer will handle-that through the 'family' keyword.-> | 'type' 'family' type optkind-> {% do { dh <- checkSimpleType $3;-> let {l = nIS $1 <++> ann $3 <+?> (fmap ann) (fst $4) <** ($1:$2:snd $4)};-> return (TypeFamDecl l dh (fst $4)) } }--Here there is no special keyword so we must do the check.-> | 'type' 'instance' truedtype '=' truectype-> {% do { -- no checkSimpleType $4 since dtype may contain type patterns-> checkEnabled TypeFamilies ;-> let {l = nIS $1 <++> ann $5 <** [$1,$2,$4]};-> return (TypeInsDecl l $3 $5) } }-> | data_or_newtype ctype constrs0 deriving-> {% do { (cs,dh) <- checkDataHeader $2;-> let { (qds,ss,minf) = $3;-> l = $1 <> $2 <+?> minf <+?> fmap ann $4 <** ss};-> checkDataOrNew $1 qds;-> return (DataDecl l $1 cs dh (reverse qds) $4) } }--Requires the GADTs extension enabled, handled in gadtlist.-> | data_or_newtype ctype optkind gadtlist deriving-> {% do { (cs,dh) <- checkDataHeader $2;-> let { (gs,ss,minf) = $4;-> l = ann $1 <+?> minf <+?> fmap ann $5 <** (snd $3 ++ ss)};-> checkDataOrNew $1 gs;-> return (GDataDecl l $1 cs dh (fst $3) (reverse gs) $5) } }--Same as above, lexer will handle it through the 'family' keyword.-> | 'data' 'family' ctype optkind-> {% do { (cs,dh) <- checkDataHeader $3;-> let {l = nIS $1 <++> ann $3 <+?> (fmap ann) (fst $4) <** ($1:$2:snd $4)};-> return (DataFamDecl l cs dh (fst $4)) } }--Here we must check for TypeFamilies.-> | data_or_newtype 'instance' truectype constrs0 deriving-> {% do { -- (cs,c,t) <- checkDataHeader $4;-> checkEnabled TypeFamilies ;-> let { (qds,ss,minf) = $4 ;-> l = $1 <> $3 <+?> minf <+?> fmap ann $5 <** $2:ss };-> checkDataOrNew $1 qds;-> return (DataInsDecl l $1 $3 (reverse qds) $5) } }--This style requires both TypeFamilies and GADTs, the latter is handled in gadtlist.-> | data_or_newtype 'instance' truectype optkind gadtlist deriving-> {% do { -- (cs,c,t) <- checkDataHeader $4;-> checkEnabled TypeFamilies ;-> let {(gs,ss,minf) = $5;-> l = ann $1 <+?> minf <+?> fmap ann $6 <** ($2:snd $4 ++ ss)};-> checkDataOrNew $1 gs;-> return (GDataInsDecl l $1 $3 (fst $4) (reverse gs) $6) } }-> | 'class' ctype fds optcbody-> {% do { (cs,dh) <- checkClassHeader $2;-> let {(fds,ss1,minf1) = $3;(mcs,ss2,minf2) = $4} ;-> let { l = nIS $1 <++> ann $2 <+?> minf1 <+?> minf2 <** ($1:ss1 ++ ss2)} ;-> return (ClassDecl l cs dh fds mcs) } }-> | 'instance' ctype optvaldefs-> {% do { (cs,ih) <- checkInstHeader $2;-> let {(mis,ss,minf) = $3};-> return (InstDecl (nIS $1 <++> ann $2 <+?> minf <** ($1:ss)) cs ih mis) } }--Requires the StandaloneDeriving extension enabled.-> | 'deriving' 'instance' ctype-> {% do { checkEnabled StandaloneDeriving ;-> (cs, ih) <- checkInstHeader $3;-> let {l = nIS $1 <++> ann $3 <** [$1,$2]};-> return (DerivDecl l cs ih) } }-> | 'default' '(' typelist ')'-> { DefaultDecl ($1 <^^> $4 <** ($1:$2 : snd $3 ++ [$4])) (fst $3) }--Requires the TemplateHaskell extension, but the lexer will handle that-through the '$(' lexeme.-CHANGE: Arbitrary top-level expressions are considered implicit splices-> | exp0 {% checkEnabled TemplateHaskell >> checkExpr $1 >>= \e -> return (SpliceDecl (ann e) e) }- | '$(' trueexp ')' { let l = $1 <^^> $3 <** [$1,$3] in SpliceDecl l $ ParenSplice l $2 }--These require the ForeignFunctionInterface extension, handled by the-lexer through the 'foreign' (and 'export') keyword.-> | 'foreign' 'import' callconv safety fspec-> { let (s,n,t,ss) = $5 in ForImp (nIS $1 <++> ann t <** ($1:$2:ss)) $3 $4 s n t }-> | 'foreign' 'export' callconv fspec-> { let (s,n,t,ss) = $4 in ForExp (nIS $1 <++> ann t <** ($1:$2:ss)) $3 s n t }--> | '{-# RULES' rules '#-}' { RulePragmaDecl ($1 <^^> $3 <** [$1,$3]) $ reverse $2 }-> | '{-# DEPRECATED' warndeprs '#-}' { DeprPragmaDecl ($1 <^^> $3 <** ($1:snd $2++[$3])) $ reverse (fst $2) }-> | '{-# WARNING' warndeprs '#-}' { WarnPragmaDecl ($1 <^^> $3 <** ($1:snd $2++[$3])) $ reverse (fst $2) }-> | decl { $1 }--> data_or_newtype :: { DataOrNew L }-> : 'data' { DataType $ nIS $1 }-> | 'newtype' { NewType $ nIS $1 }--> typelist :: { ([Type L],[S]) }-> : types {% do { ts <- mapM checkType (fst $1);-> return $ (reverse ts, reverse (snd $1)) } }-> | truetype { ([$1],[]) }-> | {- empty -} { ([],[]) }--> decls :: { ([Decl L],[S]) }-> : optsemis decls1 optsemis {% checkRevDecls (fst $2) >>= \ds -> return (ds, reverse $1 ++ snd $2 ++ reverse $3) }-> | optsemis { ([],reverse $1) }--> decls1 :: { ([Decl L],[S]) }-> : decls1 semis decl { ($3 : fst $1, snd $1 ++ reverse $2) }-> | decl { ([$1],[]) }--> decl :: { Decl L }-> : signdecl { $1 }-> | fixdecl { $1 }-> | valdef { $1 }--> decllist :: { Binds L }-> : '{' decls '}' { BDecls ($1 <^^> $3 <** ($1:snd $2++[$3])) (fst $2) }-> | open decls close { BDecls ($1 <^^> $3 <** ($1:snd $2++[$3])) (fst $2) }--> signdecl :: { Decl L }-> : exp0b '::' truectype {% do { v <- checkSigVar $1;-> return $ TypeSig ($1 <> $3 <** [$2]) [v] $3 } }-> | exp0b ',' vars '::' truectype {% do { v <- checkSigVar $1;-> let {(vs,ss,_) = $3 ; l = $1 <> $5 <** ($2 : reverse ss ++ [$4]) } ;-> return $ TypeSig l (v : reverse vs) $5 } }-> | '{-# INLINE' activation qvar '#-}' { let Loc l (INLINE s) = $1 in InlineSig (l <^^> $4 <** [l,$4]) s $2 $3 }-> | '{-# SPECIALISE' qvar '::' sigtypes '#-}' { SpecSig ($1 <^^> $5 <** ($1:$3 : snd $4 ++ [$5])) $2 (fst $4) }-> | '{-# SPECIALISE_INLINE' activation qvar '::' sigtypes '#-}'-> { let Loc l (SPECIALISE_INLINE s) = $1-> in SpecInlineSig (l <^^> $6 <** (l:$4:snd $5++[$6])) s $2 $3 (fst $5) }-> | '{-# SPECIALISE' 'instance' ctype '#-}' {% do { (cs,ih) <- checkInstHeader $3;-> let {l = $1 <^^> $4 <** [$1,$2,$4]};-> return $ InstSig l cs ih } }--> sigtypes :: { ([Type L],[S]) }-> : sigtype { ([$1],[]) }-> | sigtype ',' sigtypes { ($1 : fst $3, $2 : snd $3) }--> sigtype :: { Type L }-> : ctype {% checkType $ mkTyForall (ann $1) Nothing Nothing $1 }--Binding can be either of implicit parameters, or it can be a normal sequence-of declarations. The two kinds cannot be mixed within the same block of-binding.--> binds :: { Binds L }-> : decllist { $1 }-> | '{' ipbinds '}' { IPBinds ($1 <^^> $3 <** snd $2) (fst $2) }-> | open ipbinds close { IPBinds ($1 <^^> $3 <** snd $2) (fst $2) }--ATTENTION: Dirty Hackery Ahead! If the second alternative of vars is var-instead of qvar, we get another shift/reduce-conflict. Consider the-following programs:-- { (+) :: ... } only var- { (+) x y = ... } could (incorrectly) be qvar--We re-use expressions for patterns, so a qvar would be allowed in patterns-instead of a var only (which would be correct). But deciding what the + is,-would require more lookahead. So let's check for ourselves...--> vars :: { ([Name L],[S],L) }-> : vars ',' var { let (ns,ss,l) = $1 in ($3 : ns, $2 : ss, l <++> ann $3) }-> | qvar {% do { n <- checkUnQual $1;-> return ([n],[],ann n) } }--------------------------------------------------------------------------------FFI--These will only be called on in the presence of a 'foreign' keyword,-so no need to check for extensions.--> callconv :: { CallConv L }-> : 'stdcall' { StdCall (nIS $1) }-> | 'ccall' { CCall (nIS $1) }--> safety :: { Maybe (Safety L) }-> : 'safe' { Just $ PlaySafe (nIS $1) False }-> | 'unsafe' { Just $ PlayRisky (nIS $1) }-> | 'threadsafe' { Just $ PlaySafe (nIS $1) True }-> | {- empty -} { Nothing }--> fspec :: { (Maybe String, Name L, Type L, [S]) }-> : STRING var_no_safety '::' truedtype { let Loc l (StringTok (s,_)) = $1 in (Just s, $2, $4, [l,$3]) }-> | var_no_safety '::' truedtype { (Nothing, $1, $3, [$2]) }--------------------------------------------------------------------------------Pragmas--> rules :: { [Rule L] }-> : rules ';'rule { $3 : $1 }-> | rules ';' { $1 }-> | rule { [$1] }-> | {- empty -} { [] }--> rule :: { Rule L }-> : STRING activation ruleforall exp0 '=' trueexp {% do { let {Loc l (StringTok (s,_)) = $1};-> e <- checkRuleExpr $4;-> return $ Rule (nIS l <++> ann $6 <** l:snd $3 ++ [$5]) s $2 (fst $3) e $6 } }--> activation :: { Maybe (Activation L) }-> : {- empty -} { Nothing }-> | '[' INT ']' { let Loc l (IntTok (i,_)) = $2 in Just $ ActiveFrom ($1 <^^> $3 <** [$1,l,$3]) (fromInteger i) }-> | '[' '~' INT ']' { let Loc l (IntTok (i,_)) = $3 in Just $ ActiveUntil ($1 <^^> $4 <** [$1,$2,l,$4]) (fromInteger i) }--> ruleforall :: { (Maybe [RuleVar L],[S]) }-> : {- empty -} { (Nothing,[]) }-> | 'forall' rulevars '.' { (Just $2,[$1,$3]) }--> rulevars :: { [RuleVar L] }-> : rulevar { [$1] }-> | rulevar rulevars { $1 : $2 }--> rulevar :: { RuleVar L }-> : varid { RuleVar (ann $1) $1 }-> | '(' varid '::' truectype ')' { TypedRuleVar ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }--> warndeprs :: { ([([Name L],String)],[S]) }-> : warndeprs ';' warndepr { (fst $3 : fst $1, snd $1 ++ ($2:snd $3)) }-> | warndeprs ';' { (fst $1, snd $1 ++ [$2]) }-> | warndepr { ([fst $1],snd $1) }-> | {- empty -} { ([],[]) }--> warndepr :: { (([Name L], String),[S]) }-> : namevars STRING { let Loc l (StringTok (s,_)) = $2 in ((fst $1,s),snd $1 ++ [l]) }--> namevars :: { ([Name L],[S]) }-> : namevar { ([$1],[]) }-> | namevar ',' namevars { ($1 : fst $3, $2 : snd $3) }--> namevar :: { Name L }-> : con { $1 }-> | var { $1 }--------------------------------------------------------------------------------Types--Type equality contraints need the TypeFamilies extension.--> truedtype :: { Type L }-> : dtype {% checkType $1 }--> dtype :: { PType L }-> : btype { $1 }-> | btype qtyconop dtype { TyInfix ($1 <> $3) $1 $2 $3 }-> | btype qtyvarop dtype { TyInfix ($1 <> $3) $1 $2 $3 } -- FIXME-> | btype '->' ctype { TyFun ($1 <> $3 <** [$2]) $1 $3 }-> | btype '~' btype {% do { checkEnabled TypeFamilies ;-> let {l = $1 <> $3 <** [$2]};-> return $ TyPred l $ EqualP l $1 $3 } }--Implicit parameters can occur in normal types, as well as in contexts.--> truetype :: { Type L }-> : type {% checkType $1 }--> type :: { PType L }-> : ivar '::' dtype { let l = ($1 <> $3 <** [$2]) in TyPred l $ IParam l $1 $3 }-> | dtype { $1 }--> truebtype :: { Type L }-> : btype {% checkType $1 }--> btype :: { PType L }-> : btype atype { TyApp ($1 <> $2) $1 $2 }-> | atype { $1 }--UnboxedTuples requires the extension, but that will be handled through-the (# and #) lexemes. Kinds will be handled at the kind rule.--> trueatype :: { Type L }-> : atype {% checkType $1 }--> atype :: { PType L }-> : gtycon { TyCon (ann $1) $1 }-> | tyvar { TyVar (ann $1) $1 }-> | '(' types ')' { TyTuple ($1 <^^> $3 <** ($1:reverse ($3:snd $2))) Boxed (reverse (fst $2)) }-> | '(#' types1 '#)' { TyTuple ($1 <^^> $3 <** ($1:reverse ($3:snd $2))) Unboxed (reverse (fst $2)) }-> | '[' type ']' { TyList ($1 <^^> $3 <** [$1,$3]) $2 }-> | '(' ctype ')' { TyParen ($1 <^^> $3 <** [$1,$3]) $2 }-> | '(' ctype '::' kind ')' { TyKind ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }--> gtycon :: { QName L }-> : otycon { $1 }-> | '(' ')' { unit_tycon_name ($1 <^^> $2 <** [$1,$2]) }-> | '(' '->' ')' { fun_tycon_name ($1 <^^> $3 <** [$1,$2,$3]) }-> | '[' ']' { list_tycon_name ($1 <^^> $2 <** [$1,$2]) }-> | '(' commas ')' { tuple_tycon_name ($1 <^^> $3 <** ($1:reverse $2 ++ [$3])) Boxed (length $2) }-> | '(#' '#)' { unboxed_singleton_tycon_name ($1 <^^> $2 <** [$1,$2]) }-> | '(#' commas '#)' { tuple_tycon_name ($1 <^^> $3 <** ($1:reverse $2 ++ [$3])) Unboxed (length $2) }--> otycon :: { QName L }-> : qconid { $1 }-> | '(' gconsym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--These are for infix types--> qtyconop :: { QName L }-> : qconop { $1 }---(Slightly edited) Comment from GHC's hsparser.y:-"context => type" vs "type" is a problem, because you can't distinguish between-- foo :: (Baz a, Baz a)- bar :: (Baz a, Baz a) => [a] -> [a] -> [a]--with one token of lookahead. The HACK is to parse the context as a btype-(more specifically as a tuple type), then check that it has the right form-C a, or (C1 a, C2 b, ... Cn z) and convert it into a context. Blaach!--Forall-quantified types require some extension to enable them, which-is any of the keyword-enabling ones, except ExistentialQuantification.--> truectype :: { Type L }-> : ctype {% checkType $1 }--> ctype :: { PType L }-> : 'forall' ktyvars '.' ctype { TyForall (nIS $1 <++> ann $4 <** [$1,$3]) (Just (reverse (fst $2))) Nothing $4 }-> | context ctype { TyForall ($1 <> $2) Nothing (Just $1) $2 }-> | type { $1 }--Equality constraints require the TypeFamilies extension.--> context :: { PContext L }-> : btype '=>' {% checkPContext $ (amap (\l -> l <++> nIS $2 <** (srcInfoPoints l ++ [$2]))) $1 }-> | btype '~' btype '=>' {% do { checkEnabled TypeFamilies;-> let {l = $1 <> $3 <** [$2,$4]};-> checkPContext (TyPred l $ EqualP l $1 $3) } }--> types :: { ([PType L],[S]) }-> : types1 ',' ctype { ($3 : fst $1, $2 : snd $1) }--> types1 :: { ([PType L],[S]) }-> : ctype { ([$1],[]) }-> | types1 ',' ctype { ($3 : fst $1, $2 : snd $1) }--> ktyvars :: { ([TyVarBind L],Maybe L) }-> : ktyvars ktyvar { ($2 : fst $1, Just (snd $1 <?+> ann $2)) }-> | {- empty -} { ([],Nothing) }--> ktyvar :: { TyVarBind L }-> : tyvar { UnkindedVar (ann $1) $1 }-> | '(' tyvar '::' kind ')' { KindedVar ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }--> tyvars :: { ([Name L],Maybe L) }-> : tyvars tyvar { ($2 : fst $1, Just (snd $1 <?+> ann $2)) }-> | {- empty -} { ([], Nothing) }--> tyvars1 :: { ([Name L],L) }-> : tyvars tyvar { ($2 : fst $1, snd $1 <?+> ann $2) }---------------------------------------------------------------------------------Functional Dependencies--These require the FunctionalDependencies extension to be enabled.--> fds :: { ([FunDep L],[S],Maybe L) }-> : {- empty -} { ([],[], Nothing) }-> | '|' fds1 {% do { checkEnabled FunctionalDependencies ;-> let {(fds,ss,l) = $2} ;-> return (reverse fds, $1 : reverse ss, Just (nIS $1 <++> l)) } }--> fds1 :: { ([FunDep L],[S],L) }-> : fds1 ',' fd { let (fds,ss,l) = $1 in ($3 : fds, $2 : ss, l <++> ann $3) }-> | fd { ([$1],[],ann $1) }--> fd :: { FunDep L }-> : tyvars1 '->' tyvars1 { FunDep (snd $1 <++> snd $3 <** [$2]) (reverse (fst $1)) (reverse (fst $3)) }--------------------------------------------------------------------------------Datatype declarations--GADTs - require the GADTs extension enabled, but we handle that at the calling site.-- gadtlist :: { ([GadtDecl L],[S],L) }- : gadtlist1 {% >> return $1 }--> gadtlist :: { ([GadtDecl L],[S],Maybe L) }-> : 'where' '{' gadtconstrs1 '}' {% checkEnabled GADTs >> return (fst $3, $1 : $2 : snd $3 ++ [$4], Just $ $1 <^^> $4) }-> | 'where' open gadtconstrs1 close {% checkEnabled GADTs >> return (fst $3, $1 : $2 : snd $3 ++ [$4], Just $ $1 <^^> $4) }-> | {- empty -} {% checkEnabled EmptyDataDecls >> return ([],[],Nothing) }--> gadtconstrs1 :: { ([GadtDecl L],[S]) }-> : optsemis gadtconstrs optsemis { (fst $2, reverse $1 ++ snd $2 ++ reverse $3) }--> gadtconstrs :: { ([GadtDecl L],[S]) }-> : gadtconstrs semis gadtconstr { ($3 : fst $1, snd $1 ++ reverse $2) }-> | gadtconstr { ([$1],[]) }--> gadtconstr :: { GadtDecl L }-> : qcon '::' truectype {% do { c <- checkUnQual $1;-> return $ GadtDecl ($1 <> $3 <** [$2]) c $3 } }--To allow the empty case we need the EmptyDataDecls extension.-> constrs0 :: { ([QualConDecl L],[S],Maybe L) }- : {- empty -} {% checkEnabled EmptyDataDecls >> return ([],[],Nothing) }-> : '=' constrs { let (ds,ss,l) = $2 in (ds, $1 : reverse ss, Just $ nIS $1 <++> l) }--> constrs :: { ([QualConDecl L],[S],L) }-> : constrs '|' constr { let (ds,ss,l) = $1 in ($3 : ds, $2 : ss, l <++> ann $3) }-> | constr { ([$1],[],ann $1) }--> constr :: { QualConDecl L }-> : forall context constr1 {% do { checkEnabled ExistentialQuantification ;-> ctxt <- checkContext (Just $2) ;-> let {(mtvs,ss,ml) = $1} ;-> return $ QualConDecl (ml <?+> ann $3 <** ss) mtvs ctxt $3 } }-> | forall constr1 { let (mtvs, ss, ml) = $1 in QualConDecl (ml <?+> ann $2 <** ss) mtvs Nothing $2 }--> forall :: { (Maybe [TyVarBind L], [S], Maybe L) }-> : 'forall' ktyvars '.' {% checkEnabled ExistentialQuantification >> return (Just (fst $2), [$1,$3], Just $ $1 <^^> $3) }-> | {- empty -} { (Nothing, [], Nothing) }--To avoid conflicts when introducing type operators, we need to parse record constructors-as qcon and then check separately that they are truly unqualified.--> constr1 :: { ConDecl L }-> : scontype { let (n,ts,l) = $1 in ConDecl l n ts }-> | sbtype conop sbtype { InfixConDecl ($1 <> $3) $1 $2 $3 }-> | qcon '{' '}' {% do { c <- checkUnQual $1; return $ RecDecl (ann $1 <++> nIS $3 <** [$2,$3]) c [] } }-> | qcon '{' fielddecls '}' {% do { c <- checkUnQual $1;-> return $ RecDecl (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) c (reverse (fst $3)) } }--> scontype :: { (Name L, [BangType L], L) }-> : btype {% do { (c,ts) <- splitTyConApp $1;-> return (c,map (\t -> UnBangedTy (ann t) t) ts,ann $1) } }-> | scontype1 { $1 }--> scontype1 :: { (Name L, [BangType L],L) }-> : btype '!' trueatype {% do { (c,ts) <- splitTyConApp $1;-> return (c,map (\t -> UnBangedTy (ann t) t) ts++-> [BangedTy (nIS $2 <++> ann $3 <** [$2]) $3], $1 <> $3) } }-> | btype '{-# UNPACK' '#-}' '!' trueatype {% do { (c,ts) <- splitTyConApp $1;-> return (c,map (\t -> UnBangedTy (ann t) t) ts++-> [UnpackedTy (nIS $2 <++> ann $5 <** [$2,$3,$4]) $5], $1 <> $5) } }-> | scontype1 satype { let (n,ts,l) = $1 in (n, ts ++ [$2],l <++> ann $2) }--> satype :: { BangType L }-> : trueatype { UnBangedTy (ann $1) $1 }-> | '!' trueatype { BangedTy (nIS $1 <++> ann $2 <** [$1]) $2 }-> | '{-# UNPACK' '#-}' '!' trueatype { UnpackedTy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }--> sbtype :: { BangType L }-> : truebtype { UnBangedTy (ann $1) $1 }-> | '!' trueatype { BangedTy (nIS $1 <++> ann $2 <** [$1]) $2 }-> | '{-# UNPACK' '#-}' '!' trueatype { UnpackedTy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }--> fielddecls :: { ([FieldDecl L],[S]) }-> : fielddecls ',' fielddecl { ($3 : fst $1, $2 : snd $1) }-> | fielddecl { ([$1],[]) }--> fielddecl :: { FieldDecl L }-> : vars '::' stype { let (ns,ss,l) = $1 in FieldDecl (l <++> ann $3 <** (reverse ss ++ [$2])) (reverse ns) $3 }--> stype :: { BangType L }-> : truectype { UnBangedTy (ann $1) $1 }-> | '!' trueatype { BangedTy (nIS $1 <++> ann $2 <** [$1]) $2 }-> | '{-# UNPACK' '#-}' '!' trueatype { UnpackedTy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }--> deriving :: { Maybe (Deriving L) }-> : {- empty -} { Nothing }-> | 'deriving' qtycls1 { let l = nIS $1 <++> ann $2 <** [$1] in Just $ Deriving l [IHead (ann $2) $2 []] }-> | 'deriving' '(' ')' { Just $ Deriving ($1 <^^> $3 <** [$1,$2,$3]) [] }-> | 'deriving' '(' dclasses ')' { Just $ Deriving ($1 <^^> $4 <** $1:$2: reverse (snd $3) ++ [$4]) (reverse (fst $3)) }--> dclasses :: { ([InstHead L],[S]) }-> : types1 {% checkDeriving (fst $1) >>= \ds -> return (ds, snd $1) }--> qtycls1 :: { QName L }-> : qconid { $1 }---------------------------------------------------------------------------------Kinds--> kind :: { Kind L }-> : kind1 {% checkEnabled KindSignatures >> return $1 }--> kind1 :: { Kind L }-> : akind { $1 }-> | akind '->' kind1 { KindFn ($1 <> $3 <** [$2]) $1 $3 }--> akind :: { Kind L }-> : '*' { KindStar (nIS $1) }-> | '!' { KindBang (nIS $1) }-> | '(' kind1 ')' { KindParen ($1 <^^> $3 <** [$1,$3]) $2 }--> optkind :: { (Maybe (Kind L), [S]) }-> : {-empty-} { (Nothing,[]) }-> | '::' kind { (Just $2,[$1]) }-------------------------------------------------------------------------------Class declarations--TODO: Lots of stuff to pass around here.--No implicit parameters in the where clause of a class declaration.-> optcbody :: { (Maybe [ClassDecl L],[S],Maybe L) }-> : 'where' '{' cldecls '}' {% checkClassBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4)) }-> | 'where' open cldecls close {% checkClassBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4)) }-> | {- empty -} { (Nothing,[],Nothing) }--> cldecls :: { ([ClassDecl L],[S]) }-> : optsemis cldecls1 optsemis {% checkRevClsDecls (fst $2) >>= \cs -> return (cs, reverse $1 ++ snd $2 ++ reverse $3) }-> | optsemis { ([],reverse $1) }--> cldecls1 :: { ([ClassDecl L],[S]) }-> : cldecls1 semis cldecl { ($3 : fst $1, snd $1 ++ reverse $2) }-> | cldecl { ([$1],[]) }--Associated types require the TypeFamilies extension.--> cldecl :: { ClassDecl L }-> : decl { ClsDecl (ann $1) $1 }-> | atdecl {% checkEnabled TypeFamilies >> return $1 }--> atdecl :: { ClassDecl L }-> : 'type' type optkind-> {% do { dh <- checkSimpleType $2;-> return (ClsTyFam (nIS $1 <++> ann $2 <+?> (fmap ann) (fst $3) <** $1:snd $3) dh (fst $3)) } }-> | 'type' truedtype '=' truectype-> { ClsTyDef (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }-> | 'data' ctype optkind-> {% do { (cs,dh) <- checkDataHeader $2;-> return (ClsDataFam (nIS $1 <++> ann $2 <+?> (fmap ann) (fst $3) <** $1:snd $3) cs dh (fst $3)) } }--------------------------------------------------------------------------------Instance declarations--> optvaldefs :: { (Maybe [InstDecl L],[S],Maybe L) }-> : 'where' '{' valdefs '}' {% checkInstBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4)) }-> | 'where' open valdefs close {% checkInstBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4)) }-> | {- empty -} { (Nothing, [], Nothing) }--> valdefs :: { ([InstDecl L],[S]) }-> : optsemis valdefs1 optsemis {% checkRevInstDecls (fst $2) >>= \is -> return (is, reverse $1 ++ snd $2 ++ reverse $3) }-> | optsemis { ([],reverse $1) }--> valdefs1 :: { ([InstDecl L],[S]) }-> : valdefs1 semis insvaldef { ($3 : fst $1, snd $1 ++ reverse $2) }-> | insvaldef { ([$1],[]) }--Associated types require the TypeFamilies extension enabled.--> insvaldef :: { InstDecl L }-> : valdef { InsDecl (ann $1) $1 }-> | atinst {% checkEnabled TypeFamilies >> return $1 }-> | inlinst { $1 }--> inlinst :: { InstDecl L }-> : '{-# INLINE' activation qvar '#-}' { let Loc l (INLINE s) = $1 in InsInline (l <^^> $4 <** [l,$4]) s $2 $3 }--> atinst :: { InstDecl L }-> : 'type' truedtype '=' truectype-> {% do { -- no checkSimpleType $4 since dtype may contain type patterns-> return (InsType (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4) } }-> | data_or_newtype truectype constrs0 deriving-> {% do { -- (cs,c,t) <- checkDataHeader $4;-> let {(ds,ss,minf) = $3};-> checkDataOrNew $1 ds;-> return (InsData ($1 <> $2 <+?> minf <+?> fmap ann $4 <** ss ) $1 $2 (reverse ds) $4) } }-> | data_or_newtype truectype optkind gadtlist deriving-> {% do { -- (cs,c,t) <- checkDataHeader $4;-> let { (gs,ss,minf) = $4 } ;-> checkDataOrNew $1 gs;-> return $ InsGData (ann $1 <+?> minf <+?> fmap ann $5 <** (snd $3 ++ ss)) $1 $2 (fst $3) (reverse gs) $5 } }--------------------------------------------------------------------------------Value definitions--> valdef :: { Decl L }-> : exp0b optsig rhs optwhere {% checkValDef (($1 <> $3 <+?> (fmap ann) (fst $4)) <** (snd $2 ++ snd $4)) $1 (fst $2) $3 (fst $4) }-> | '!' aexp rhs optwhere {% do { checkEnabled BangPatterns ;-> let { l = nIS $1 <++> ann $2 <** [$1] };-> p <- checkPattern (BangPat l $2);-> return $ PatBind (p <> $3 <+?> (fmap ann) (fst $4) <** snd $4)-> p Nothing $3 (fst $4) } }--May bind implicit parameters-> optwhere :: { (Maybe (Binds L),[S]) }-> : 'where' binds { (Just $2, [$1]) }-> | {- empty -} { (Nothing, []) }--Type signatures on value definitions require ScopedTypeVariables (or PatternSignatures, which is deprecated).--> optsig :: { (Maybe (Type L),[S]) }-> : '::' truectype {% checkEnabled ScopedTypeVariables >> return (Just $2, [$1]) }-> | {- empty -} { (Nothing,[]) }--> rhs :: { Rhs L }-> : '=' trueexp { UnGuardedRhs (nIS $1 <++> ann $2 <** [$1]) $2 }-> | gdrhs { GuardedRhss (snd $1) (reverse $ fst $1) }--> gdrhs :: { ([GuardedRhs L],L) }-> : gdrhs gdrh { ($2 : fst $1, snd $1 <++> ann $2) }-> | gdrh { ([$1],ann $1) }--Guards may contain patterns if PatternGuards is enabled, hence quals instead of exp.-> gdrh :: { GuardedRhs L }-> : '|' quals '=' trueexp {% do { checkPatternGuards (fst $2);-> return $ GuardedRhs (nIS $1 <++> ann $4 <** ($1:snd $2 ++ [$3])) (reverse (fst $2)) $4 } }--------------------------------------------------------------------------------Expressions--Note: The Report specifies a meta-rule for lambda, let and if expressions-(the exp's that end with a subordinate exp): they extend as far to-the right as possible. That means they cannot be followed by a type-signature or infix application. To implement this without shift/reduce-conflicts, we split exp10 into these expressions (exp10a) and the others-(exp10b). That also means that only an exp0 ending in an exp10b (an exp0b)-can followed by a type signature or infix application. So we duplicate-the exp0 productions to distinguish these from the others (exp0a).--Ugly: We need non-parenthesized post-operators for HaRP, and to parse both-these and normal left sections, we parse both as PostOp and let the post pass-mangle them into the correct form depending on context.--> trueexp :: { Exp L }-> : exp {% checkExpr $1 }--> exp :: { PExp L }-> : exp0b '::' truectype { ExpTypeSig ($1 <> $3 <** [$2]) $1 $3 }-> | exp0 { $1 }-> | exp0b qop { PostOp ($1 <> $2) $1 $2 }-> | exp0b '-<' exp { LeftArrApp ($1 <> $3 <** [$2]) $1 $3 }-> | exp0b '>-' exp { RightArrApp ($1 <> $3 <** [$2]) $1 $3 }-> | exp0b '-<<' exp { LeftArrHighApp ($1 <> $3 <** [$2]) $1 $3 }-> | exp0b '>>-' exp { RightArrHighApp ($1 <> $3 <** [$2]) $1 $3 }--> exp0 :: { PExp L }-> : exp0a { $1 }-> | exp0b { $1 }--> exp0a :: { PExp L }-> : exp0b qop exp10a { InfixApp ($1 <> $3) $1 $2 $3 }-> | exp10a { $1 }--> exp0b :: { PExp L }-> : exp0b qop exp10b { InfixApp ($1 <> $3) $1 $2 $3 }-> | exp10b { $1 }--> exp10a :: { PExp L }-> : '\\' apats '->' exp { Lambda (nIS $1 <++> ann $4 <** [$1,$3]) (reverse $2) $4 }-A let may bind implicit parameters-> | 'let' binds 'in' exp { Let (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }-> | 'if' exp 'then' exp 'else' exp { If (nIS $1 <++> ann $6 <** [$1,$3,$5]) $2 $4 $6 }-> | 'proc' apat '->' exp { Proc (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }-> | exppragma { $1 }--mdo blocks require the RecursiveDo extension enabled, but the lexer handles that.--> exp10b :: { PExp L }-> : 'case' exp 'of' altslist { let (als, inf, ss) = $4 in Case (nIS $1 <++> inf <** ($1:$3:ss)) $2 als }-> | '-' fexp { NegApp (nIS $1 <++> ann $2 <** [$1]) $2 }-> | 'do' stmtlist { let (sts, inf, ss) = $2 in Do (nIS $1 <++> inf <** $1:ss) sts }-> | 'mdo' stmtlist { let (sts, inf, ss) = $2 in MDo (nIS $1 <++> inf <** $1:ss) sts }-> | fexp { $1 }--> exppragma :: { PExp L }-> : '{-# CORE' STRING '#-}' exp { let Loc l (StringTok (s,_)) = $2 in CorePragma (nIS $1 <++> ann $4 <** [l,$3]) s $4 }-> | '{-# SCC' STRING '#-}' exp { let Loc l (StringTok (s,_)) = $2 in SCCPragma (nIS $1 <++> ann $4 <** [l,$3]) s $4 }-> | '{-# GENERATED' STRING INT ':' INT '-' INT ':' INT '#-}' exp-> { let { Loc l0 (StringTok (s,_)) = $2;-> Loc l1 (IntTok (i1,_)) = $3;-> Loc l2 (IntTok (i2,_)) = $5;-> Loc l3 (IntTok (i3,_)) = $7;-> Loc l4 (IntTok (i4,_)) = $9}-> in GenPragma (nIS $1 <++> ann $11 <** [$1,l0,l1,$4,l2,$6,l3,$8,l4,$10])-> s (fromInteger i1, fromInteger i2)-> (fromInteger i3, fromInteger i4) $11 }--> fexp :: { PExp L }-> : fexp aexp { App ($1 <> $2) $1 $2 }-> | aexp { $1 }--> apats :: { [Pat L] }-> : apats apat { $2 : $1 }-> | apat { [$1] }--> apat :: { Pat L }-> : aexp {% checkPattern $1 }-> | '!' aexp {% checkPattern (BangPat (nIS $1 <++> ann $2 <** [$1]) $2) }--UGLY: Because patterns and expressions are mixed, aexp has to be split into-two rules: One right-recursive and one left-recursive. Otherwise we get two-reduce/reduce-errors (for as-patterns and irrefutable patters).--Even though the variable in an as-pattern cannot be qualified, we use-qvar here to avoid a shift/reduce conflict, and then check it ourselves-(as for vars above).--Non-linear name binding, @:, requires RegularPatterns, but the lexer handles that.--> aexp :: { PExp L }-> : qvar '@' aexp {% do { n <- checkUnQual $1;-> return (AsPat ($1 <> $3 <** [$2]) n $3) } }-> | qvar '@:' aexp {% do { n <- checkUnQual $1;-> return (CAsRP ($1 <> $3 <** [$2]) n $3) } }-> | '~' aexp { IrrPat (nIS $1 <++> ann $2 <** [$1]) $2 }-> | aexp1 { $1 }--Note: The first two alternatives of aexp1 are not necessarily record-updates: they could be labeled constructions.-Generics-style explicit type arguments need the Generics extension, but-we check that in the lexer.--> aexp1 :: { PExp L }-> : aexp1 '{' '}' {% liftM (amap (const (ann $1 <++> nIS $3 <** [$2,$3]))) $ mkRecConstrOrUpdate $1 [] }-> | aexp1 '{' fbinds '}' {% liftM (amap (const (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4]))))-> $ mkRecConstrOrUpdate $1 (reverse (fst $3)) }-> | qvar '{|' truetype '|}' { ExplTypeArg (ann $1 <++> nIS $4 <** [$2,$4]) $1 $3 }-> | aexp2 { $1 }--According to the Report, the left section (e op) is legal iff (e op x)-parses equivalently to ((e) op x). Thus e must be an exp0b.-An implicit parameter can be used as an expression, enabled by the lexer.-Extensions using banana brackets are also enabled by the lexer. The only-thing we need to look at here is the erpats that use no non-standard lexemes.--> aexp2 :: { PExp L }-> : ivar { IPVar (ann $1) $1 }-> | qvar { Var (ann $1) $1 }-> | gcon { $1 }-> | literal { Lit (ann $1) $1 }-> | '(' texp ')' { Paren ($1 <^^> $3 <** [$1,$3]) $2 }-> | '(' texp tsectend { TupleSection ($1 <^^> head (snd $3) <** $1:reverse (snd $3)) (Just $2 : fst $3) }-> | '(' commas texp ')' { TupleSection ($1 <^^> $4 <** $1:reverse ($4:$2))-> (replicate (length $2 - 1) Nothing ++ [Just $3]) }-> | '(' commas texp tsectend { TupleSection ($1 <^^> head (snd $4) <** $1:reverse (snd $4 ++ $2))-> (replicate (length $2 - 1) Nothing ++ Just $3 : fst $4) }-> | '[' list ']' { amap (\l -> l <** [$3]) $ $2 ($1 <^^> $3 <** [$1]) }-> | '_' { WildCard (nIS $1) }-> | '(' erpats ')' {% checkEnabled RegularPatterns >> return (Paren ($1 <^^> $3 <** [$1,$3]) $2) }-> | '(|' sexps '|)' { SeqRP ($1 <^^> $3 <** ($1:reverse (snd $2) ++ [$3])) $ reverse (fst $2) }-> | '(|' exp '|' quals '|)' { GuardRP ($1 <^^> $5 <** ($1:$3 : snd $4 ++ [$5])) $2 $ (reverse $ fst $4) }-> | xml { $1 }--Template Haskell - all this is enabled in the lexer.-> | IDSPLICE { let Loc l (THIdEscape s) = $1 in SpliceExp (nIS l) $ IdSplice (nIS l) s }-> | '$(' trueexp ')' { SpliceExp ($1 <^^> $3 <** [$1,$3]) $ ParenSplice (ann $2) $2 }-> | '[|' trueexp '|]' { BracketExp ($1 <^^> $3 <** [$1,$3]) $ ExpBracket (ann $2) $2 }-> | '[p|' exp0 '|]' {% do { p <- checkPattern $2;-> return $ BracketExp ($1 <^^> $3 <** [$1,$3]) $ PatBracket (ann p) p } }-> | '[t|' truectype '|]' { let l = $1 <^^> $3 <** [$1,$3] in BracketExp l $ TypeBracket l $2 }-> | '[d|' open topdecls close '|]' { let l = $1 <^^> $5 <** ($1:snd $3 ++ [$5]) in BracketExp l $ DeclBracket l (fst $3) }-> | VARQUOTE qvar { VarQuote (nIS $1 <++> ann $2 <** [$1]) $2 }-> | VARQUOTE qcon { VarQuote (nIS $1 <++> ann $2 <** [$1]) $2 }-> | TYPQUOTE tyvar { TypQuote (nIS $1 <++> ann $2 <** [$1]) (UnQual (ann $2) $2) }-> | TYPQUOTE gtycon { TypQuote (nIS $1 <++> ann $2 <** [$1]) $2 }-> | QUASIQUOTE { let Loc l (THQuasiQuote (n,q)) = $1 in QuasiQuote (nIS l) n q }-End Template Haskell--> commas :: { [S] }-> : commas ',' { $2 : $1 }-> | ',' { [$1] }--> texp :: { PExp L }-> : exp { $1 }-> | qopm exp0 { PreOp ($1 <> $2) $1 $2 }-> | exp '->' exp {% do {checkEnabled ViewPatterns;-> return $ ViewPat ($1 <> $3 <** [$2]) $1 $3} }--> tsectend :: { ([Maybe (PExp L)],[S]) }-> : commas texp tsectend { let (mes, ss) = $3 in (replicate (length $1 - 1) Nothing ++ Just $2 : mes, ss ++ $1) }-> | commas texp ')' { (replicate (length $1 - 1) Nothing ++ [Just $2], $3 : $1) }-> | commas ')' { (replicate (length $1) Nothing, $2 : $1) }--------------------------------------------------------------------------------Harp Extensions--> sexps :: { ([PExp L],[S]) }-> : sexps ',' exp { ($3 : fst $1, $2 : snd $1) }-> | exp { ([$1],[]) }--Either patterns are left associative-> erpats :: { PExp L }-> : exp '|' erpats { EitherRP ($1 <> $3 <** [$2]) $1 $3 }-> | exp '|' exp { EitherRP ($1 <> $3 <** [$2]) $1 $3 }--------------------------------------------------------------------------------Hsx Extensions - requires XmlSyntax, but the lexer handles all that.--> xml :: { PExp L }-> : '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $2 $8;-> let { cn = reverse $6;-> as = reverse $3;-> l = $1 <^^> $9 <** [$1,$5,$7,srcInfoSpan (ann $8),$9] };-> return $ XTag l n as $4 cn } }-> | '<' name attrs mattr '/>' { XETag ($1 <^^> $5 <** [$1,$5]) $2 (reverse $3) $4 }-> | '<%' exp '%>' { XExpTag ($1 <^^> $3 <** [$1,$3]) $2 }--> children :: { [PExp L] }-> : children child { $2 : $1 }-> | {- empty -} { [] }--> child :: { PExp L }-> : PCDATA { let Loc l (XPCDATA pcd) = $1 in XPcdata (nIS l) pcd }-> | '<[' sexps ']>' { XRPats ($1 <^^> $3 <** (snd $2 ++ [$1,$3])) $ reverse (fst $2) }-> | xml { $1 }--> name :: { XName L }-> : xmlname ':' xmlname { let {Loc l1 s1 = $1; Loc l2 s2 = $3}-> in XDomName (nIS l1 <++> nIS l2 <** [l1,$2,l2]) s1 s2 }-> | xmlname { let Loc l str = $1 in XName (nIS l) str }--> xmlname :: { Loc String }-> : VARID { let Loc l (VarId s) = $1 in Loc l s }-> | CONID { let Loc l (ConId s) = $1 in Loc l s }-> | DVARID { let Loc l (DVarId s) = $1 in Loc l $ mkDVar s }-> | xmlkeyword { $1 }--> xmlkeyword :: { Loc String }-> : 'type' { Loc $1 "type" }-> | 'class' { Loc $1 "class" }-> | 'data' { Loc $1 "data" }-> | 'foreign' { Loc $1 "foreign" }-> | 'export' { Loc $1 "export" }-> | 'safe' { Loc $1 "safe" }-> | 'unsafe' { Loc $1 "unsafe" }-> | 'threadsafe' { Loc $1 "threadsafe" }-> | 'stdcall' { Loc $1 "stdcall" }-> | 'ccall' { Loc $1 "ccall" }-> | 'as' { Loc $1 "as" }-> | 'by' { Loc $1 "by" }-> | 'case' { Loc $1 "case" }-> | 'default' { Loc $1 "default" }-> | 'deriving' { Loc $1 "deriving" }-> | 'do' { Loc $1 "do" }-> | 'else' { Loc $1 "else" }-> | 'family' { Loc $1 "family" }-> | 'forall' { Loc $1 "forall" }-> | 'group' { Loc $1 "group" }-> | 'hiding' { Loc $1 "hiding" }-> | 'if' { Loc $1 "if" }-> | 'import' { Loc $1 "import" }-> | 'in' { Loc $1 "in" }-> | 'infix' { Loc $1 "infix" }-> | 'infixl' { Loc $1 "infixl" }-> | 'infixr' { Loc $1 "infixr" }-> | 'instance' { Loc $1 "instance" }-> | 'let' { Loc $1 "let" }-> | 'mdo' { Loc $1 "mdo" }-> | 'module' { Loc $1 "module" }-> | 'newtype' { Loc $1 "newtype" }-> | 'of' { Loc $1 "of" }-> | 'proc' { Loc $1 "proc" }-> | 'rec' { Loc $1 "rec" }-> | 'then' { Loc $1 "then" }-> | 'using' { Loc $1 "using" }-> | 'where' { Loc $1 "where" }-> | 'qualified' { Loc $1 "qualified" }---> attrs :: { [ParseXAttr L] }-> : attrs attr { $2 : $1 }-> | {- empty -} { [] }--> attr :: { ParseXAttr L }-> : name '=' aexp { XAttr ($1 <> $3 <** [$2]) $1 $3 }--> mattr :: { Maybe (PExp L) }--> : aexp { Just $1 }-> | {-empty-} { Nothing }--------------------------------------------------------------------------------List expressions--The rules below are little bit contorted to keep lexps left-recursive while-avoiding another shift/reduce-conflict.--> list :: { L -> PExp L }-> : texp { \l -> List l [$1] }-> | lexps { \l -> let (ps,ss) = $1 in List (l <** reverse ss) (reverse ps) }-> | texp '..' { \l -> EnumFrom (l <** [$2]) $1 }-> | texp ',' exp '..' { \l -> EnumFromThen (l <** [$2,$4]) $1 $3 }-> | texp '..' exp { \l -> EnumFromTo (l <** [$2]) $1 $3 }-> | texp ',' exp '..' exp { \l -> EnumFromThenTo (l <** [$2,$4]) $1 $3 $5 }-> | texp '|' pqualstmts { \l -> let (stss, ss) = $3 in ParComp (l <** ($2:ss)) $1 (reverse stss) }--> lexps :: { ([PExp L],[S]) }-> : lexps ',' texp { let (es, ss) = $1 in ($3 : es, $2 : ss) }-> | texp ',' texp { ([$3,$1], [$2]) }--------------------------------------------------------------------------------List comprehensions--> pqualstmts :: { ([[QualStmt L]],[S]) }-> : pqualstmts '|' qualstmts { let { (stss, ss1) = $1;-> (sts, ss2) = $3 }-> in (reverse sts : stss, ss1 ++ [$2] ++ reverse ss2) }-> | qualstmts { let (sts, ss) = $1 in ([reverse sts], reverse ss) }--> qualstmts :: { ([QualStmt L],[S]) }-> : qualstmts ',' qualstmt { let (sts, ss) = $1 in ($3 : sts, $2 : ss) }-> | qualstmt { ([$1],[]) }--> qualstmt :: { QualStmt L }-> : transformqual { $1 }-> | qual { QualStmt (ann $1) $1 }--> transformqual :: { QualStmt L }-> : 'then' trueexp { ThenTrans (nIS $1 <++> ann $2 <** [$1]) $2 }-> | 'then' trueexp 'by' trueexp { ThenBy (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }-> | 'then' 'group' 'by' trueexp { GroupBy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }-> | 'then' 'group' 'using' trueexp { GroupUsing (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }-> | 'then' 'group' 'by' trueexp 'using' trueexp { GroupByUsing (nIS $1 <++> ann $6 <** [$1,$2,$3,$5]) $4 $6 }--> quals :: { ([Stmt L],[S]) }-> : quals ',' qual { let (sts, ss) = $1 in ($3 : sts, $2 : ss) }-> | qual { ([$1],[]) }--> qual :: { Stmt L }-> : pat '<-' trueexp { Generator ($1 <> $3 <** [$2]) $1 $3 }-> | trueexp { Qualifier (ann $1) $1 }-> | 'let' binds { LetStmt (nIS $1 <++> ann $2 <** [$1]) $2 }---------------------------------------------------------------------------------Case alternatives--> altslist :: { ([Alt L],L,[S]) }-> : '{' alts '}' { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3]) }-> | open alts close { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3]) }--> alts :: { ([Alt L],[S]) }-> : optsemis alts1 optsemis { (reverse $ fst $2, $1 ++ snd $2 ++ $3) }--> alts1 :: { ([Alt L],[S]) }-> : alts1 semis alt { ($3 : fst $1, snd $1 ++ $2) }-> | alt { ([$1],[]) }--> alt :: { Alt L }-> : pat ralt optwhere { Alt ($1 <> $2 <+?> (fmap ann) (fst $3) <** snd $3) $1 $2 (fst $3) }--> ralt :: { GuardedAlts L }-> : '->' trueexp { UnGuardedAlt (nIS $1 <++> ann $2 <** [$1]) $2 }-> | gdpats { GuardedAlts (snd $1) (reverse $ fst $1) }--> gdpats :: { ([GuardedAlt L],L) }-> : gdpats gdpat { ($2 : fst $1, snd $1 <++> ann $2) }-> | gdpat { ([$1], ann $1) }--A guard can be a pattern guard if PatternGuards is enabled, hence quals instead of exp0.-> gdpat :: { GuardedAlt L }-> : '|' quals '->' trueexp {% do { checkPatternGuards (fst $2);-> let {l = nIS $1 <++> ann $4 <** ($1:snd $2 ++ [$3])};-> return (GuardedAlt l (reverse (fst $2)) $4) } }--> pat :: { Pat L }-> : exp {% checkPattern $1 }-> | '!' aexp {% checkPattern (BangPat (nIS $1 <++> ann $2 <** [$1]) $2) }-------------------------------------------------------------------------------Statement sequences--As per the Report, but with stmt expanded to simplify building the list-without introducing conflicts. This also ensures that the last stmt is-an expression.--TODO: The points can't be added here, must be propagated!--> stmtlist :: { ([Stmt L],L,[S]) }-> : '{' stmts '}' { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3]) }-> | open stmts close { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3]) }--> stmts :: { ([Stmt L],[S]) }-> : stmt stmts1 { ($1 : fst $2, snd $2) }-> | ';' stmts { (fst $2, $1 : snd $2) }-> | {- empty -} { ([],[]) }--> stmts1 :: { ([Stmt L],[S]) }-> : ';' stmts { (fst $2, $1 : snd $2) }-> | {- empty -} { ([],[]) }--A let statement may bind implicit parameters.-> stmt :: { Stmt L }-> : 'let' binds { LetStmt (nIS $1 <++> ann $2 <** [$1]) $2 }-> | pat '<-' trueexp { Generator ($1 <> $3 <** [$2]) $1 $3 }-> | trueexp { Qualifier (ann $1) $1 }-> | 'rec' stmtlist { let (stms,inf,ss) = $2 in RecStmt (nIS $1 <++> inf <** $1:ss) stms }--------------------------------------------------------------------------------Record Field Update/Construction--> fbinds :: { ([PFieldUpdate L],[S]) }-> : fbinds ',' fbind { let (fbs, ss) = $1 in ($3 : fbs, $2 : ss) }-> | fbind { ([$1],[]) }--Puns and wild cards need the respective extensions enabled.--> fbind :: { PFieldUpdate L }-> : qvar '=' exp { FieldUpdate ($1 <>$3 <** [$2]) $1 $3 }-> | qvar {% checkEnabled NamedFieldPuns >> checkUnQual $1 >>= return . FieldPun (ann $1) }-> | '..' {% checkEnabled RecordWildCards >> return (FieldWildcard (nIS $1)) }--------------------------------------------------------------------------------Implicit parameter bindings - need the ImplicitParameter extension enabled, but the lexer handles that.--> ipbinds :: { ([IPBind L],[S]) }-> : optsemis ipbinds1 optsemis { (reverse (fst $2), reverse $1 ++ snd $2 ++ reverse $3) }--> ipbinds1 :: { ([IPBind L],[S]) }-> : ipbinds1 semis ipbind { ($3 : fst $1, snd $1 ++ reverse $2) }-> | ipbind { ([$1],[]) }--> ipbind :: { IPBind L }-> : ivar '=' trueexp { IPBind ($1 <> $3 <** [$2]) $1 $3 }--------------------------------------------------------------------------------Variables, Constructors and Operators.--> gcon :: { PExp L }-> : '(' ')' { p_unit_con ($1 <^^> $2 <** [$1,$2]) }-> | '[' ']' { List ($1 <^^> $2 <** [$1,$2]) [] }-> | '(' commas ')' { p_tuple_con ($1 <^^> $3 <** $1:reverse ($3:$2)) Boxed (length $2) }-> | '(#' '#)' { p_unboxed_singleton_con ($1 <^^> $2 <** [$1,$2]) }-> | '(#' commas '#)' { p_tuple_con ($1 <^^> $3 <** $1:reverse ($3:$2)) Unboxed (length $2) }-> | qcon { Con (ann $1) $1 }--> var :: { Name L }-> : varid { $1 }-> | '(' varsym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> var_no_safety :: { Name L }-> : varid_no_safety { $1 }-> | '(' varsym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> qvar :: { QName L }-> : qvarid { $1 }-> | '(' qvarsym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--Implicit parameter-> ivar :: { IPName L }-> : ivarid { $1 }--> con :: { Name L }-> : conid { $1 }-> | '(' consym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> qcon :: { QName L }-> : qconid { $1 }-> | '(' gconsym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> varop :: { Name L }-> : varsym { $1 }-> | '`' varid '`' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> qvarop :: { QName L }-> : qvarsym { $1 }-> | '`' qvarid '`' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> qvaropm :: { QName L }-> : qvarsymm { $1 }-> | '`' qvarid '`' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> conop :: { Name L }-> : consym { $1 }-> | '`' conid '`' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> qconop :: { QName L }-> : gconsym { $1 }-> | '`' qconid '`' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }--> op :: { Op L }-> : varop { VarOp (ann $1) $1 }-> | conop { ConOp (ann $1) $1 }--> qop :: { QOp L }-> : qvarop { QVarOp (ann $1) $1 }-> | qconop { QConOp (ann $1) $1 }--> qopm :: { QOp L }-> : qvaropm { QVarOp (ann $1) $1 }-> | qconop { QConOp (ann $1) $1 }--> gconsym :: { QName L }-> : ':' { list_cons_name (nIS $1) }-> | qconsym { $1 }--------------------------------------------------------------------------------Identifiers and Symbols--> qvarid :: { QName L }-> : varid { UnQual (ann $1) $1 }-> | QVARID { let {Loc l (QVarId q) = $1; nis = nIS l}-> in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) }--> varid_no_safety :: { Name L }-> : VARID { let Loc l (VarId v) = $1 in Ident (nIS l) v }-> | 'as' { as_name (nIS $1) }-> | 'qualified' { qualified_name (nIS $1) }-> | 'hiding' { hiding_name (nIS $1) }-> | 'export' { export_name (nIS $1) }-> | 'stdcall' { stdcall_name (nIS $1) }-> | 'ccall' { ccall_name (nIS $1) }--> varid :: { Name L }-> : varid_no_safety { $1 }-> | 'safe' { safe_name (nIS $1) }-> | 'unsafe' { unsafe_name (nIS $1) }-> | 'threadsafe' { threadsafe_name (nIS $1) }---Implicit parameter-> ivarid :: { IPName L }-> : IDUPID { let Loc l (IDupVarId i) = $1 in IPDup (nIS l) i }-> | ILINID { let Loc l (ILinVarId i) = $1 in IPLin (nIS l) i }--> qconid :: { QName L }-> : conid { UnQual (ann $1) $1 }-> | QCONID { let {Loc l (QConId q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) }--> conid :: { Name L }-> : CONID { let Loc l (ConId c) = $1 in Ident (nIS l) c }--> qconsym :: { QName L }-> : consym { UnQual (ann $1) $1 }-> | QCONSYM { let {Loc l (QConSym q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) }--> consym :: { Name L }-> : CONSYM { let Loc l (ConSym c) = $1 in Symbol (nIS l) c }--> qvarsym :: { QName L }-> : varsym { UnQual (ann $1) $1 }-> | qvarsym1 { $1 }--> qvarsymm :: { QName L }-> : varsymm { UnQual (ann $1) $1 }-> | qvarsym1 { $1 }--> varsym :: { Name L }-> : VARSYM { let Loc l (VarSym v) = $1 in Symbol (nIS l) v }-> | '-' { minus_name (nIS $1) }-> | '!' { bang_name (nIS $1) }-> | '.' { dot_name (nIS $1) }-> | '*' { star_name (nIS $1) }--> varsymm :: { Name L } -- varsym not including '-'-> : VARSYM { let Loc l (VarSym v) = $1 in Symbol (nIS l) v }-> | '!' { bang_name (nIS $1) }-> | '.' { dot_name (nIS $1) }-> | '*' { star_name (nIS $1) }--> qvarsym1 :: { QName L }-> : QVARSYM { let {Loc l (QVarSym q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) }--> literal :: { Literal L }-> : INT { let Loc l (IntTok (i,raw)) = $1 in Int (nIS l) i raw }-> | CHAR { let Loc l (Character (c,raw)) = $1 in Char (nIS l) c raw }-> | RATIONAL { let Loc l (FloatTok (r,raw)) = $1 in Frac (nIS l) r raw }-> | STRING { let Loc l (StringTok (s,raw)) = $1 in String (nIS l) s raw }-> | PRIMINT { let Loc l (IntTokHash (i,raw)) = $1 in PrimInt (nIS l) i raw }-> | PRIMWORD { let Loc l (WordTokHash (w,raw)) = $1 in PrimWord (nIS l) w raw }-> | PRIMFLOAT { let Loc l (FloatTokHash (f,raw)) = $1 in PrimFloat (nIS l) f raw }-> | PRIMDOUBLE { let Loc l (DoubleTokHash (d,raw)) = $1 in PrimDouble (nIS l) d raw }-> | PRIMCHAR { let Loc l (CharacterHash (c,raw)) = $1 in PrimChar (nIS l) c raw }-> | PRIMSTRING { let Loc l (StringHash (s,raw)) = $1 in PrimString (nIS l) s raw }--------------------------------------------------------------------------------Layout--> open :: { S } : {% pushCurrentContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x) (return x) -} }--> close :: { S }-> : vccurly { $1 {- >>= \x -> trace (show x ++ show x ++ show x) (return x) -} } -- context popped in lexer.-> | error {% popContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x ++ show x) (return x) -} }--------------------------------------------------------------------------------Miscellaneous (mostly renamings)--> modid :: { ModuleName L }-> : CONID { let Loc l (ConId n) = $1 in ModuleName (nIS l) n }-> | QCONID { let Loc l (QConId n) = $1 in ModuleName (nIS l) (fst n ++ '.':snd n) }--> tyconorcls :: { Name L }-> : con { $1 }--> qtyconorcls :: { QName L }-> : qcon { $1 }--> tyvar :: { Name L }-> : varid { $1 }--> qtyvarop :: { QName L }-> qtyvarop : '`' tyvar '`' { UnQual ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }-> | tyvarsym { UnQual (ann $1) $1 }--> tyvarsym :: { Name L }-> tyvarsym : VARSYM { let Loc l (VarSym x) = $1 in Symbol (nIS l) x }---------------------------------------------------------------------------------> {--> type L = SrcSpanInfo -- just for convenience-> type S = SrcSpan--> parseError :: Loc Token -> P a-> parseError t = fail $ "Parse error: " ++ show t--> (<>) :: (Annotated a, Annotated b) => a SrcSpanInfo -> b SrcSpanInfo -> SrcSpanInfo-> a <> b = ann a <++> ann b->-> infixl 6 <>--> nIS = noInfoSpan-> iS = infoSpan---> -- | Parse of a string, which should contain a complete Haskell module.-> parseModule :: String -> ParseResult (Module L)-> parseModule = simpleParse mparseModule--> -- | Parse of a string containing a complete Haskell module, using an explicit mode.-> parseModuleWithMode :: ParseMode -> String -> ParseResult (Module L)-> parseModuleWithMode = modeParse mparseModule--> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.-> parseModuleWithComments :: ParseMode -> String -> ParseResult (Module L, [Comment])-> parseModuleWithComments = commentParse mparseModule--> -- | Parse of a string containing a Haskell expression.-> parseExp :: String -> ParseResult (Exp L)-> parseExp = simpleParse mparseExp--> -- | Parse of a string containing a Haskell expression, using an explicit mode.-> parseExpWithMode :: ParseMode -> String -> ParseResult (Exp L)-> parseExpWithMode = modeParse mparseExp--> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.-> parseExpWithComments :: ParseMode -> String -> ParseResult (Exp L, [Comment])-> parseExpWithComments = commentParse mparseExp--> -- | Parse of a string containing a Haskell pattern.-> parsePat :: String -> ParseResult (Pat L)-> parsePat = simpleParse mparsePat--> -- | Parse of a string containing a Haskell pattern, using an explicit mode.-> parsePatWithMode :: ParseMode -> String -> ParseResult (Pat L)-> parsePatWithMode = modeParse mparsePat--> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.-> parsePatWithComments :: ParseMode -> String -> ParseResult (Pat L, [Comment])-> parsePatWithComments = commentParse mparsePat--> -- | Parse of a string containing a Haskell top-level declaration.-> parseDecl :: String -> ParseResult (Decl L)-> parseDecl = simpleParse mparseDecl--> -- | Parse of a string containing a Haskell top-level declaration, using an explicit mode.-> parseDeclWithMode :: ParseMode -> String -> ParseResult (Decl L)-> parseDeclWithMode = modeParse mparseDecl--> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.-> parseDeclWithComments :: ParseMode -> String -> ParseResult (Decl L, [Comment])-> parseDeclWithComments = commentParse mparseDecl--> -- | Parse of a string containing a Haskell type.-> parseType :: String -> ParseResult (Type L)-> parseType = runParser mparseType--> -- | Parse of a string containing a Haskell type, using an explicit mode.-> parseTypeWithMode :: ParseMode -> String -> ParseResult (Type L)-> parseTypeWithMode mode = runParserWithMode mode mparseType--> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.-> parseTypeWithComments :: ParseMode -> String -> ParseResult (Type L, [Comment])-> parseTypeWithComments mode str = runParserWithModeComments mode mparseType str---> simpleParse :: AppFixity a => P (a L) -> String -> ParseResult (a L)-> simpleParse p = fmap (applyFixities preludeFixities) . runParser p--> modeParse :: AppFixity a => P (a L) -> ParseMode -> String -> ParseResult (a L)-> modeParse p mode = fmap (applyFixities (fixities mode)) . runParserWithMode mode p--> commentParse :: AppFixity a => P (a L) -> ParseMode -> String -> ParseResult (a L, [Comment])-> commentParse p mode str = runParserWithModeComments mode p str-> >>= \(ast, cs) -> return (applyFixities (fixities mode) ast, cs)--> -- | Partial parse of a string starting with a series of top-level option pragmas.-> getTopPragmas :: String -> ParseResult [OptionPragma L]-> getTopPragmas = runParser (mfindOptPragmas >>= \(ps,_,_) -> return ps)-->+> {-# LANGUAGE CPP #-}+> {-# OPTIONS_HADDOCK hide #-}+> +> -----------------------------------------------------------------------------+> -- |+> -- Module : Language.Haskell.Exts.Annotated.Parser+> -- Copyright : (c) Niklas Broberg 2004-2009,+> -- Original (c) Simon Marlow, Sven Panne 1997-2000+> -- License : BSD-style (see the file LICENSE.txt)+> --+> -- Maintainer : Niklas Broberg, d00nibro@chalmers.se+> -- Stability : stable+> -- Portability : portable+> --+> --+> -----------------------------------------------------------------------------+>+> module Language.Haskell.Exts.InternalParser (+> mparseModule,+> mparseExp,+> mparsePat,+> mparseDecl,+> mparseType,+> mparseStmt,+> mparseImportDecl,+> ngparseModulePragmas,+> ngparseModuleHeadAndImports,+> ngparsePragmasAndModuleHead,+> ngparsePragmasAndModuleName+> ) where+>+> import Language.Haskell.Exts.Syntax hiding ( Type(..), Exp(..), Asst(..), XAttr(..), FieldUpdate(..) )+> import Language.Haskell.Exts.Syntax ( Type, Exp, Asst )+> import Language.Haskell.Exts.ParseMonad+> import Language.Haskell.Exts.InternalLexer+> import Language.Haskell.Exts.ParseUtils+> import Language.Haskell.Exts.Fixity+> import Language.Haskell.Exts.SrcLoc+> import Language.Haskell.Exts.Extension++> import Control.Monad ( liftM, (<=<), when )+> import Control.Applicative ( (<$>) )+> import Data.Maybe+> #if MIN_VERSION_base(4,11,0)+> import Prelude hiding ((<>))+> #endif+import Debug.Trace (trace)++> }++-----------------------------------------------------------------------------+This module comprises a parser for Haskell 98 with the following extensions++* Multi-parameter type classes with functional dependencies+* Implicit parameters+* Pattern guards+* Mdo notation+* FFI+* HaRP+* HSP++Most of the code is blatantly stolen from the GHC module Language.Haskell.Parser.+Some of the code for extensions is greatly influenced by GHC's internal parser+library, ghc/compiler/parser/Parser.y.+-----------------------------------------------------------------------------+Conflicts: 7 shift/reduce++2 for ambiguity in 'case x of y | let z = y in z :: Bool -> b' [State 99, 186]+ (don't know whether to reduce 'Bool' as a btype or shift the '->'.+ Similarly lambda and if. The default resolution in favour of the+ shift means that a guard can never end with a type signature.+ In mitigation: it's a rare case and no Haskell implementation+ allows these, because it would require unbounded lookahead.)+ There are 2 conflicts rather than one because contexts are parsed+ as btypes (cf ctype).++1 for ambiguity in 'let ?x ...' [State 604]+ the parser can't tell whether the ?x is the lhs of a normal binding or+ an implicit binding. Fortunately resolving as shift gives it the only+ sensible meaning, namely the lhs of an implicit binding.++1 for ambiguity using hybrid modules [State 159]+ For HSP pages that start with a <% %> block, the parser cannot tell whether+ to reduce a srcloc or shift the starting <%. Since any other body could not+ start with <%, shifting is the only sensible thing to do.++1 for ambiguity using toplevel xml modules [State 158]+ For HSP xml pages starting with a <, the parser cannot tell whether to shift+ that < or reduce an implicit 'open'. Since no other body could possibly start+ with <, shifting is the only sensible thing to do.++1 for ambiguity in '{-# RULES "name" [ ... #-}' [State 177]+ we don't know whether the '[' starts the activation or not: it+ might be the start of the declaration with the activation being+ empty. Resolving with shift means the declaration cannot start with '['.++1 for ambiguity in '{-# RULES "name" forall = ... #-}' [State 544]+ since 'forall' is a valid variable name, we don't know whether+ to treat a forall on the input as the beginning of a quantifier+ or the beginning of the rule itself. Resolving to shift means+ it's always treated as a quantifier, hence the above is disallowed.+ This saves explicitly defining a grammar for the rule lhs that+ doesn't include 'forall'.++-----------------------------------------------------------------------------++> %token+> VARID { Loc _ (VarId _) } -- 1+> LABELVARID { Loc _ (LabelVarId _) }+> QVARID { Loc _ (QVarId _) }+> IDUPID { Loc _ (IDupVarId _) } -- duplicable implicit parameter ?x+> ILINID { Loc _ (ILinVarId _) } -- linear implicit parameter %x+> CONID { Loc _ (ConId _) }+> QCONID { Loc _ (QConId _) }+> DVARID { Loc _ (DVarId _) } -- VARID containing dashes+> VARSYM { Loc _ (VarSym _) }+> CONSYM { Loc _ (ConSym _) }+> QVARSYM { Loc _ (QVarSym _) } -- 10+> QCONSYM { Loc _ (QConSym _) }+> INT { Loc _ (IntTok _) }+> RATIONAL { Loc _ (FloatTok _) }+> CHAR { Loc _ (Character _) }+> STRING { Loc _ (StringTok _) }++> PRIMINT { Loc _ (IntTokHash _) }+> PRIMWORD { Loc _ (WordTokHash _) }+> PRIMFLOAT { Loc _ (FloatTokHash _) }+> PRIMDOUBLE { Loc _ (DoubleTokHash _) }+> PRIMCHAR { Loc _ (CharacterHash _) } -- 20+> PRIMSTRING { Loc _ (StringHash _) }++Symbols++> '(' { Loc $$ LeftParen }+> ')' { Loc $$ RightParen }+> '(#' { Loc $$ LeftHashParen }+> '#)' { Loc $$ RightHashParen }+> ';' { Loc $$ SemiColon }+> '{' { Loc $$ LeftCurly }+> '}' { Loc $$ RightCurly } -- 30+> vccurly { Loc $$ VRightCurly } -- a virtual close brace+> '[' { Loc $$ LeftSquare }+> ']' { Loc $$ RightSquare }+> '[:' { Loc $$ ParArrayLeftSquare }+> ':]' { Loc $$ ParArrayRightSquare }+> ',' { Loc $$ Comma }+> '_' { Loc $$ Underscore }+> '`' { Loc $$ BackQuote }++Reserved operators++> '.' { Loc $$ Dot }+> '..' { Loc $$ DotDot }+> ':' { Loc $$ Colon }+> '::' { Loc $$ DoubleColon } -- 40+> '=' { Loc $$ Equals }+> '\\' { Loc $$ Backslash }+> '|' { Loc $$ Bar }+> '<-' { Loc $$ LeftArrow }+> '->' { Loc $$ RightArrow }+> '@' { Loc $$ At }+> TYPEAPP { Loc $$ TApp }+> '~' { Loc $$ Tilde }+> '=>' { Loc $$ DoubleArrow }+> '-' { Loc $$ Minus }+> '!' { Loc $$ Exclamation } -- 50+> '*' { Loc $$ Star }++Arrows++> '-<' { Loc $$ LeftArrowTail }+> '>-' { Loc $$ RightArrowTail }+> '-<<' { Loc $$ LeftDblArrowTail }+> '>>-' { Loc $$ RightDblArrowTail }+> '(|' { Loc $$ OpenArrowBracket }+> '|)' { Loc $$ CloseArrowBracket }++Harp++> '(/' { Loc $$ RPGuardOpen }+> '/)' { Loc $$ RPGuardClose }+> '@:' { Loc $$ RPCAt }++Template Haskell++> IDSPLICE { Loc _ (THIdEscape _) } -- $x+> TIDSPLICE { Loc _ (THTIdEscape _) } -- $$x+> '$(' { Loc $$ THParenEscape } -- 60+> '$$(' { Loc $$ THTParenEscape }+> '[|' { Loc $$ THExpQuote }+> '[||' { Loc $$ THTExpQuote }+> '[p|' { Loc $$ THPatQuote }+> '[t|' { Loc $$ THTypQuote }+> '[d|' { Loc $$ THDecQuote }+> '|]' { Loc $$ THCloseQuote }+> '||]' { Loc $$ THTCloseQuote }+> VARQUOTE { Loc $$ THVarQuote } -- 'x+> TYPQUOTE { Loc $$ THTyQuote } -- ''T+> QUASIQUOTE { Loc _ (THQuasiQuote _) }++Hsx++> PCDATA { Loc _ (XPCDATA _) }+> '<' { Loc $$ XStdTagOpen } -- 70+> '</' { Loc $$ XCloseTagOpen }+> '<%' { Loc $$ XCodeTagOpen }+> '<%>' { Loc $$ XChildTagOpen }+> '>' { Loc $$ XStdTagClose }+> '/>' { Loc $$ XEmptyTagClose }+> '%>' { Loc $$ XCodeTagClose }+> '<[' { Loc $$ XRPatOpen }+> ']>' { Loc $$ XRPatClose }++FFI++> 'foreign' { Loc $$ KW_Foreign }+> 'export' { Loc $$ KW_Export } -- 80+> 'safe' { Loc $$ KW_Safe }+> 'unsafe' { Loc $$ KW_Unsafe }+> 'threadsafe' { Loc $$ KW_Threadsafe }+> 'interruptible' { Loc $$ KW_Interruptible }+> 'stdcall' { Loc $$ KW_StdCall }+> 'ccall' { Loc $$ KW_CCall }+> 'cplusplus' { Loc $$ KW_CPlusPlus }+> 'dotnet' { Loc $$ KW_DotNet }+> 'jvm' { Loc $$ KW_Jvm }+> 'js' { Loc $$ KW_Js } -- 90+> 'javascript' { Loc $$ KW_JavaScript }+> 'capi' { Loc $$ KW_CApi }++Reserved Ids++> 'as' { Loc $$ KW_As }+> 'by' { Loc $$ KW_By } -- transform list comprehensions+> 'case' { Loc $$ KW_Case }+> 'class' { Loc $$ KW_Class }+> 'data' { Loc $$ KW_Data }+> 'default' { Loc $$ KW_Default }+> 'deriving' { Loc $$ KW_Deriving }+> 'do' { Loc $$ KW_Do }+> 'else' { Loc $$ KW_Else } -- 100+> 'family' { Loc $$ KW_Family } -- indexed type families+> 'forall' { Loc $$ KW_Forall } -- universal/existential qualification+> 'group' { Loc $$ KW_Group } -- transform list comprehensions+> 'hiding' { Loc $$ KW_Hiding }+> 'if' { Loc $$ KW_If }+> 'import' { Loc $$ KW_Import }+> 'in' { Loc $$ KW_In }+> 'infix' { Loc $$ KW_Infix }+> 'infixl' { Loc $$ KW_InfixL }+> 'infixr' { Loc $$ KW_InfixR } -- 110+> 'instance' { Loc $$ KW_Instance }+> 'let' { Loc $$ KW_Let }+> 'mdo' { Loc $$ KW_MDo }+> 'module' { Loc $$ KW_Module } -- 114+> 'newtype' { Loc $$ KW_NewType }+> 'of' { Loc $$ KW_Of }+> 'proc' { Loc $$ KW_Proc } -- arrows+> 'rec' { Loc $$ KW_Rec } -- arrows or RecursiveDo+> 'then' { Loc $$ KW_Then }+> 'type' { Loc $$ KW_Type } -- 120+> 'using' { Loc $$ KW_Using } -- transform list comprehensions+> 'where' { Loc $$ KW_Where }+> 'qualified' { Loc $$ KW_Qualified }+> 'role' { Loc $$ KW_Role }+> 'pattern' { Loc $$ KW_Pattern }+> 'stock' { Loc $$ KW_Stock } -- for DerivingStrategies extension+> 'anyclass' { Loc $$ KW_Anyclass } -- for DerivingStrategies extension+> 'via' { Loc $$ KW_Via } -- for DerivingStrategies extension++Pragmas++> '{-# INLINE' { Loc _ (INLINE _) }+> '{-# INLINE CONLIKE' { Loc $$ INLINE_CONLIKE }+> '{-# SPECIALISE' { Loc $$ SPECIALISE }+> '{-# SPECIALISE INLINE' { Loc _ (SPECIALISE_INLINE _) }+> '{-# SOURCE' { Loc $$ SOURCE }+> '{-# RULES' { Loc $$ RULES }+> '{-# CORE' { Loc $$ CORE } -- 130+> '{-# SCC' { Loc $$ SCC }+> '{-# GENERATED' { Loc $$ GENERATED }+> '{-# DEPRECATED' { Loc $$ DEPRECATED }+> '{-# WARNING' { Loc $$ WARNING }+> '{-# UNPACK' { Loc $$ UNPACK }+> '{-# NOUNPACK' { Loc $$ NOUNPACK }+> '{-# OPTIONS' { Loc _ (OPTIONS _) }+ '{-# CFILES' { Loc _ (CFILES _) }+ '{-# INCLUDE' { Loc _ (INCLUDE _) }+> '{-# LANGUAGE' { Loc $$ LANGUAGE } -- 137+> '{-# ANN' { Loc $$ ANN }+> '{-# MINIMAL' { Loc $$ MINIMAL }+> '{-# NO_OVERLAP' { Loc $$ NO_OVERLAP }+> '{-# OVERLAP' { Loc $$ OVERLAP }+> '{-# OVERLAPS' { Loc $$ OVERLAPS }+> '{-# OVERLAPPING' { Loc $$ OVERLAPPING }+> '{-# OVERLAPPABLE' { Loc $$ OVERLAPPABLE }+> '{-# INCOHERENT' { Loc $$ INCOHERENT }+> '{-# COMPLETE' { Loc $$ COMPLETE }+> '#-}' { Loc $$ PragmaEnd } -- 139++Utility++> NEVER { Loc $$@SrcSpan{srcSpanStartLine= -1} _ } -- never-matching terminal of type SrcSpan++> %monad { P }+> %lexer { lexer } { Loc _ EOF }+> %error { parseError }+> %name mparseModule page+> %name mparseExp trueexp+> %name mparsePat pat+> %name mparseDeclAux body+> %name mparseType truectype+> %name mparseStmt stmt+> %name mparseImportDecl impdecl+> %partial ngparseModulePragmas toppragmas+> %partial ngparseModuleHeadAndImports moduletopimps+> %partial ngparsePragmasAndModuleHead moduletophead+> %partial ngparsePragmasAndModuleName moduletopname+> %tokentype { Loc Token }+> %expect 13+> %%++-----------------------------------------------------------------------------+Testing multiple modules in one file++> modules :: { [Module L] }+> : toppragmas modules1 { let (os,ss,l) = $1 in map (\x -> x os ss l) $2 }++> modules1 :: { [[ModulePragma L] -> [S] -> L -> Module L] }+> : module modules1 { $1 : $2 }+> | module { [$1] }++-----------------------------------------------------------------------------+HSP Pages++Any HSP-specific parts requiring the XmlSyntax extension enabled will+be governed by the lexing, since all productions require at least one+special lexeme.++TODO: Yuck, this is messy, needs fixing in the AST!++> page :: { Module L }+> : toppragmas topxml {% checkPageModule $2 $1 }+> | toppragmas '<%' module '%>' topxml {% let (os,ss,l) = $1 in checkHybridModule $5 ($3 os ss l) $2 $4 }+> | toppragmas module { let (os,ss,l) = $1 in $2 os ss l }++> topxml :: { PExp L }+> : '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $2 $8;+> let { cn = reverse $6;+> as = reverse $3; };+> return $ XTag ($1 <^^> $9 <** [$1,$5,$7,$9]) n as $4 cn } }+> | '<' name attrs mattr '/>' { XETag ($1 <^^> $5 <** [$1,$5]) $2 (reverse $3) $4 }+++> toppragmas :: { ([ModulePragma L],[S],L) }+> : open toppragmasaux close { let (os,ss,ml) = $2 in (os,$1:ss++[$3],$1 <^^> $3) }++> toppragmasaux :: { ([ModulePragma L],[S],Maybe L) }+> : toppragma optsemis toppragmasaux { let (os,ss,ml) = $3;+> ss' = reverse $2 ++ ss;+> l' = case $2 of+> [] -> ann $1+> _ -> ann $1 <++> nIS (last $2);+> in ($1 : os, ss', Just $ l' <+?> ml) }+> | {- nothing -} { ([],[],Nothing) }++> toppragma :: { ModulePragma L }+> : '{-# LANGUAGE' conids optsemis '#-}' { LanguagePragma ($1 <^^> $4 <** ($1:snd $2 ++ reverse $3 ++ [$4])) (fst $2) }+> | '{-# OPTIONS' optsemis '#-}' { let Loc l (OPTIONS (mc, s)) = $1+> in OptionsPragma (l <^^> $3 <** (l:reverse $2 ++ [$3])) (readTool mc) s }+> | '{-# ANN' annotation '#-}' { AnnModulePragma ($1 <^^> $3 <** [$1,$3]) $2 }+++> conids :: { ([Name L],[S]) }+> : conids ',' conid { (fst $1 ++ [$3], snd $1 ++ [$2]) }+> | optsemis conid { ([$2],[]) }++-----------------------------------------------------------------------------+Module Header++> module :: { [ModulePragma L] -> [S] -> L -> Module L }+> : optmodulehead body+> { let (is,ds,ss1,inf) = $2+> in \os ss l -> Module (l <++> inf <** (ss ++ ss1)) $1 os is ds }++> optmodulehead :: { Maybe (ModuleHead L) }+> : 'module' modid maybemodwarning maybeexports 'where' { Just $ ModuleHead ($1 <^^> $5 <** [$1,$5]) $2 $3 $4 }+> | {- empty -} { Nothing }++> maybemodwarning :: { Maybe (WarningText L) }+> : '{-# DEPRECATED' STRING '#-}' { let Loc l (StringTok (s,_)) = $2 in Just $ DeprText ($1 <^^> $3 <** [$1,l,$3]) s }+> | '{-# WARNING' STRING '#-}' { let Loc l (StringTok (s,_)) = $2 in Just $ WarnText ($1 <^^> $3 <** [$1,l,$3]) s }+> | {- empty -} { Nothing }++> body :: { ([ImportDecl L],[Decl L],[S],L) }+> : '{' bodyaux '}' { let (is,ds,ss) = $2 in (is,ds,$1:ss ++ [$3], $1 <^^> $3) }++Trailing optsemis in the next line is a workaround for #25. Having the optsemis+here causes one more shift/reduce conflict.++> | open bodyaux close optsemis { let (is,ds,ss) = $2 in (is,ds,$1:ss ++ [$3], $1 <^^> $3) }++> bodyaux :: { ([ImportDecl L],[Decl L],[S]) }+> : optsemis impdecls semis topdecls { (reverse (fst $2), fst $4, reverse $1 ++ snd $2 ++ reverse $3 ++ snd $4) }+> | optsemis topdecls { ([], fst $2, reverse $1 ++ snd $2) }+> | optsemis impdecls optsemis { (reverse (fst $2), [], reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([], [], reverse $1) }++> semis :: { [S] }+> : optsemis ';' { $2 : $1 }++> optsemis :: { [S] }+> : semis { $1 }+> | {- empty -} { [] }++-----------------------------------------------------------------------------+The Export List++> maybeexports :: { Maybe (ExportSpecList L) }+> : exports { Just $1 }+> | {- empty -} { Nothing }++> exports :: { ExportSpecList L }+> : '(' exportlist optcomma ')' { ExportSpecList ($1 <^^> $4 <** ($1:reverse (snd $2) ++ $3 ++ [$4])) (reverse (fst $2)) }+> | '(' optcomma ')' { ExportSpecList ($1 <^^> $3 <** ($1:$2++[$3])) [] }++> optcomma :: { [S] }+> : ',' { [$1] }+> | {- empty -} { [ ] }++> exportlist :: { ([ExportSpec L],[S]) }+> : exportlist ',' export { ($3 : fst $1, $2 : snd $1) }+> | export { ([$1],[]) }++> export :: { ExportSpec L }+> : qvar { EVar (ann $1) $1 }+> | 'type' qcname {% do { checkEnabled ExplicitNamespaces;+> return (EAbs (nIS $1 <++> ann $2 <** [$1, srcInfoSpan (ann $2)]) (TypeNamespace (nIS $1 <** [$1])) $2) } }+> | qtyconorcls { EAbs (ann $1) (NoNamespace (ann $1)) $1 }+> | qtyconorcls '(' ')' { EThingWith (ann $1 <++> nIS $3 <** [$2,$3]) (NoWildcard noSrcSpan) $1 [] }+> | qtyconorcls '(' export_names ')' {% mkEThingWith (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) $1 (reverse $ fst $3) }+> | 'module' modid { EModuleContents (nIS $1 <++> ann $2 <** [$1]) $2 }+> | 'pattern' qcon {% do { checkEnabled PatternSynonyms;+> return $ EAbs (nIS $1 <++> (ann $2) <** [$1])+> (PatternNamespace (nIS $1)) $2 }}++> export_names :: { ([Either S (CName L)],[S]) }+> : export_names ',' cname_w_wildcard { ($3 : fst $1, $2 : snd $1) }+> | cname_w_wildcard { ([$1],[]) }++> cname_w_wildcard :: { Either S (CName L) }+> : '..' { Left $1 }+> | cname { Right $1 }++>+> qcname :: { QName L }+> : qvar { $1 }+> | qcon { $1 }++-----------------------------------------------------------------------------+Import Declarations++> impdecls :: { ([ImportDecl L],[S]) }+> : impdecls semis impdecl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | impdecl { ([$1],[]) }++> impdecl :: { ImportDecl L }+> : 'import' optsrc optsafe optqualified maybepkg modid optqualified_post maybeas maybeimpspec+> { let { (mmn,ss,ml) = $8 ;+> l = nIS $1 <++> ann $6 <+?> ml <+?> (fmap ann) $9 <** ($1:snd $2 ++ snd $3 ++ snd $4 ++ snd $5 ++ snd $7 ++ ss)}+> in ImportDecl l $6 (fst $4 || fst $7) (fst $2) (fst $3) (fst $5) mmn $9 }++> optsrc :: { (Bool,[S]) }+> : '{-# SOURCE' '#-}' { (True,[$1,$2]) }+> | {- empty -} { (False,[]) }++> optsafe :: { (Bool,[S]) }+> : 'safe' {% do { checkEnabledOneOf [Safe, SafeImports, Trustworthy] ;+> return (True, [$1]) } }+> | {- empty -} { (False, []) }++> optqualified :: { (Bool,[S]) }+> : 'qualified' { (True,[$1]) }+> | {- empty -} { (False, []) }++> optqualified_post :: { (Bool,[S]) }+> : 'qualified' {% do { checkEnabled ImportQualifiedPost;+> return (True,[$1]) } }+> | {- empty -} { (False, []) }++Requires the PackageImports extension enabled.+> maybepkg :: { (Maybe String,[S]) }+> : STRING {% do { checkEnabled PackageImports ;+> let { Loc l (StringTok (s,_)) = $1 } ;+> return $ (Just s,[l]) } }+> | {- empty -} { (Nothing,[]) }++> maybeas :: { (Maybe (ModuleName L),[S],Maybe L) }+> : 'as' modid { (Just $2,[$1],Just (nIS $1 <++> ann $2)) }+> | {- empty -} { (Nothing,[],Nothing) }+++> maybeimpspec :: { Maybe (ImportSpecList L) }+> : impspec { Just $1 }+> | {- empty -} { Nothing }++> impspec :: { ImportSpecList L }+> : opthiding '(' importlist optcomma ')' { let {(b,ml,s) = $1 ;+> l = (ml <?+> ($2 <^^> $5)) <** (s ++ $2:reverse (snd $3) ++ $4 ++ [$5])}+> in ImportSpecList l b (reverse (fst $3)) }+> | opthiding '(' optcomma ')' { let {(b,ml,s) = $1 ; l = (ml <?+> ($2 <^^> $4)) <** (s ++ $2:$3 ++ [$4])}+> in ImportSpecList l b [] }++> opthiding :: { (Bool, Maybe L,[S]) }+> : 'hiding' { (True,Just (nIS $1),[$1]) }+> | {- empty -} { (False,Nothing,[]) }++> importlist :: { ([ImportSpec L],[S]) }+> : importlist ',' importspec { ($3 : fst $1, $2 : snd $1) }+> | importspec { ([$1],[]) }++> importspec :: { ImportSpec L }+> : var { IVar (ann $1) $1 }+> | 'type' var {% do { checkEnabled ExplicitNamespaces;+> return (IAbs (nIS $1 <++> ann $2 <** [$1, srcInfoSpan (ann $2)]) (TypeNamespace (nIS $1 <** [$1])) $2) } }+> | 'pattern' con {% do { checkEnabled PatternSynonyms;+> return (IAbs (nIS $1 <++> ann $2 <** [$1, srcInfoSpan (ann $2)]) (PatternNamespace (nIS $1 <** [$1])) $2) } }+> | tyconorcls { IAbs (ann $1) (NoNamespace (ann $1)) $1 }+> | tyconorcls '(' '..' ')' { IThingAll (ann $1 <++> nIS $4 <** [$2,$3,$4]) $1 }+> | tyconorcls '(' ')' { IThingWith (ann $1 <++> nIS $3 <** [$2,$3]) $1 [] }+> | tyconorcls '(' import_names ')' { IThingWith (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) $1 (reverse (fst $3)) }++> import_names :: { ([CName L],[S]) }+> : import_names ',' cname { ($3 : fst $1, $2 : snd $1) }+> | cname { ([$1],[]) }++> cname :: { CName L }+> : var { VarName (ann $1) $1 }+> | con { ConName (ann $1) $1 }++-----------------------------------------------------------------------------+Fixity Declarations++> fixdecl :: { Decl L }+> : infix prec ops { let (ops,ss,l) = $3+> in InfixDecl (ann $1 <++> l <** (snd $2 ++ reverse ss)) $1 (fst $2) (reverse ops) }++> prec :: { (Maybe Int, [S]) }+> : {- empty -} { (Nothing, []) }+> | INT {% let Loc l (IntTok (i,_)) = $1 in checkPrec i >>= \i -> return (Just i, [l]) }++> infix :: { Assoc L }+> : 'infix' { AssocNone $ nIS $1 }+> | 'infixl' { AssocLeft $ nIS $1 }+> | 'infixr' { AssocRight $ nIS $1 }++> ops :: { ([Op L],[S],L) }+> : ops ',' op { let (ops,ss,l) = $1 in ($3 : ops, $2 : ss, l <++> ann $3) }+> | op { ([$1],[],ann $1) }+++> opt_injectivity_info :: { Maybe (InjectivityInfo L) }+> : {- empty -} { Nothing }+> | injectivity_info { Just $1 }++> injectivity_info :: { InjectivityInfo L }+> : '|' tyvarid '->' inj_varids+> { InjectivityInfo (nIS $1 <++> ann (last $4) <** [$1,$3]) $2 (reverse $4) }+>+>+> inj_varids :: { [Name L] }+> : inj_varids tyvarid { $2 : $1 }+> | tyvarid { [$1] }++-----------------------------------------------------------------------------+Top-Level Declarations++Note: The report allows topdecls to be empty. This would result in another+shift/reduce-conflict, so we don't handle this case here, but in bodyaux.++> topdecls :: { ([Decl L],[S]) }+> : topdecls1 optsemis {% checkRevDecls (fst $1) >>= \ds -> return (ds, snd $1 ++ reverse $2) }++> topdecls1 :: { ([Decl L],[S]) }+> : topdecls1 semis topdecl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | topdecl { ([$1],[]) }++> topdecl :: { Decl L }+> : role_annot {% checkEnabled RoleAnnotations >> return $1 }+> | 'type' dtype '=' truectype+> {% do { dh <- checkSimpleType $2;+> let {l = nIS $1 <++> ann $4 <** [$1,$3]};+> return (TypeDecl l dh $4) } }++Requires the TypeFamilies extension enabled, but the lexer will handle+that through the 'family' keyword.+> | 'type' 'family' type opt_tyfam_kind_sig opt_injectivity_info where_type_family+> {% do { dh <- checkSimpleType $3;+> let {l = nIS $1 <++> ann $3 <** [$1,$2]};+> case $6 of {+> Nothing -> return (TypeFamDecl l dh $4 $5);+> Just (x,a) -> return (ClosedTypeFamDecl (l <** [a]) dh $4 $5 x); }}}++Here there is no special keyword so we must do the check.+> | 'type' 'instance' truedtype '=' truectype+> {% do { -- no checkSimpleType $4 since dtype may contain type patterns+> checkEnabled TypeFamilies ;+> let {l = nIS $1 <++> ann $5 <** [$1,$2,$4]};+> return (TypeInsDecl l $3 $5) } }+> | data_or_newtype ctype constrs0 maybe_derivings+> {% do { (cs,dh) <- checkDataHeader $2;+> let { (qds,ss,minf) = $3;+> l = $1 <> $2 <+?> minf <+?> fmap ann (listToMaybe $4) <** ss};+> checkDataOrNew $1 qds;+> return (DataDecl l $1 cs dh (reverse qds) (reverse $4)) } }++Requires the GADTs extension enabled, handled in gadtlist.+> | data_or_newtype ctype optkind gadtlist maybe_derivings+> {% do { (cs,dh) <- checkDataHeader $2;+> let { (gs,ss,minf) = $4;+> derivs' = reverse $5;+> l = ann $1 <+?> minf <+?> fmap ann (listToMaybe $5) <** (snd $3 ++ ss)};+> checkDataOrNewG $1 gs;+> case (gs, fst $3) of+> ([], Nothing) -> return (DataDecl l $1 cs dh [] derivs')+> _ -> checkEnabled GADTs >> return (GDataDecl l $1 cs dh (fst $3) (reverse gs) derivs') } }++Same as above, lexer will handle it through the 'family' keyword.+> | 'data' 'family' ctype opt_datafam_kind_sig+> {% do { (cs,dh) <- checkDataHeader $3;+> let {l = nIS $1 <++> ann $3 <+?> (fmap ann) $4 <** [$1,$2]};+> return (DataFamDecl l cs dh $4) } }++Here we must check for TypeFamilies.+> | data_or_newtype 'instance' truectype constrs0 maybe_derivings+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkEnabled TypeFamilies ;+> let { (qds,ss,minf) = $4 ;+> l = $1 <> $3 <+?> minf <+?> fmap ann (listToMaybe $5) <** $2:ss };+> checkDataOrNew $1 qds;+> return (DataInsDecl l $1 $3 (reverse qds) (reverse $5)) } }++This style requires both TypeFamilies and GADTs, the latter is handled in gadtlist.+> | data_or_newtype 'instance' truectype optkind gadtlist maybe_derivings+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkEnabled TypeFamilies ;+> let {(gs,ss,minf) = $5;+> derivs' = reverse $6;+> l = ann $1 <+?> minf <+?> fmap ann (listToMaybe derivs') <** ($2:snd $4 ++ ss)};+> checkDataOrNewG $1 gs;+> return (GDataInsDecl l $1 $3 (fst $4) (reverse gs) derivs') } }+> | 'class' ctype fds optcbody+> {% do { (cs,dh) <- checkClassHeader $2;+> let {(fds,ss1,minf1) = $3;(mcs,ss2,minf2) = $4} ;+> let { l = nIS $1 <++> ann $2 <+?> minf1 <+?> minf2 <** ($1:ss1 ++ ss2)} ;+> return (ClassDecl l cs dh fds mcs) } }+> | 'instance' optoverlap ctype optvaldefs+> {% do { ih <- checkInstHeader $3;+> let {(mis,ss,minf) = $4};+> return (InstDecl (nIS $1 <++> ann $3 <+?> minf <** ($1:ss)) $2 ih mis) } }++Requires the StandaloneDeriving extension enabled.+> | 'deriving' deriv_standalone_strategy 'instance' optoverlap ctype+> {% do { checkEnabled StandaloneDeriving ;+> ih <- checkInstHeader $5;+> let {l = nIS $1 <++> ann $5 <** [$1,$3]};+> return (DerivDecl l $2 $4 ih) } }+> | 'default' '(' typelist ')'+> { DefaultDecl ($1 <^^> $4 <** ($1:$2 : snd $3 ++ [$4])) (fst $3) }++Requires the TemplateHaskell extension, but the lexer will handle that+through the '$(' lexeme.+CHANGE: Arbitrary top-level expressions are considered implicit splices+> | exp0 {% do+> checkToplevel $1+> checkExpr $1 >>= \e -> return (SpliceDecl (ann e) e)+> }++ | '$(' trueexp ')' { let l = $1 <^^> $3 <** [$1,$3] in SpliceDecl l $ ParenSplice l $2 }+ | '$$(' trueexp ')' { let l = $1 <^^> $3 <** [$1,$3] in TSpliceDecl l $ TParenSplice l $2 }++These require the ForeignFunctionInterface extension, handled by the+lexer through the 'foreign' (and 'export') keyword.+> | 'foreign' 'import' callconv safety fspec+> { let (s,n,t,ss) = $5 in ForImp (nIS $1 <++> ann t <** ($1:$2:ss)) $3 $4 s n t }+> | 'foreign' 'export' callconv fspec+> { let (s,n,t,ss) = $4 in ForExp (nIS $1 <++> ann t <** ($1:$2:ss)) $3 s n t }++> | '{-# RULES' rules '#-}' { RulePragmaDecl ($1 <^^> $3 <** [$1,$3]) $ reverse $2 }+> | '{-# DEPRECATED' warndeprs '#-}' { DeprPragmaDecl ($1 <^^> $3 <** ($1:snd $2++[$3])) $ reverse (fst $2) }+> | '{-# WARNING' warndeprs '#-}' { WarnPragmaDecl ($1 <^^> $3 <** ($1:snd $2++[$3])) $ reverse (fst $2) }+> | '{-# ANN' annotation '#-}' { AnnPragma ($1 <^^> $3 <** [$1,$3]) $2 }+> | '{-# COMPLETE' con_list opt_tyconsig '#-}'+> { let com = maybe [] ((:[]) . fst) $3; ts = fmap snd $3 in+> (CompletePragma ($1 <^^> $4 <** ([$1] ++ fst $2 ++ com ++ [$4])) (snd $2) ts) }+> | decl { $1 }++> -- Family result/return kind signatures+>+> opt_datafam_kind_sig :: { Maybe (ResultSig L) }+> : { Nothing }+> | '::' kind { (Just $ KindSig (nIS $1 <++> ann $2 <** [$1]) $2) }+>+> opt_tyfam_kind_sig :: { Maybe (ResultSig L) }+> : { Nothing }+> | '::' kind { (Just $ KindSig (nIS $1 <++> ann $2 <** [$1]) $2) }+> | '=' ktyvar { (Just $ TyVarSig (nIS $1 <++> ann $2 <** [$1]) $2) }+>+> opt_at_kind_inj_sig :: { (Maybe (ResultSig L), Maybe (InjectivityInfo L))}+> : { (Nothing, Nothing) }+> | '::' kind { (Just (KindSig (nIS $1 <++> ann $2 <** [$1]) $2), Nothing) }+> | '=' ktyvar injectivity_info+> { (Just (TyVarSig (nIS $1 <++> ann $2 <** [$1]) $2), Just $3) }++> opt_at_kind_inj_sig2 :: { (Maybe (ResultSig L), Maybe (S, Type L), Maybe (InjectivityInfo L))}+> : { (Nothing, Nothing, Nothing) }+> | '::' kind { (Just (KindSig (nIS $1 <++> ann $2 <** [$1]) $2), Nothing, Nothing) }+> | '=' truectype opt_injectivity_info { (Nothing, Just ($1, $2), $3) }+++Role annotations++> role_annot :: { Decl L }+> role_annot : 'type' 'role' otycon roles+> {% mkRoleAnnotDecl $1 $2 $3 (reverse $4) }++-- Reversed!+> roles :: { [(Maybe String, L)] }+> roles : {- empty -} { [] }+> | roles role { $2 : $1 }++> -- read it in as a varid for better error messages+> role :: { (Maybe String, L) }+> role : VARID { let (VarId v) = unLoc $1 in (Just v, nIS $ loc $1) }+> | '_' { (Nothing, nIS $1) }++++> optoverlap :: { Maybe (Overlap L) }+> : '{-# OVERLAP' '#-}' { Just (Overlap (nIS $1)) }+> | '{-# OVERLAPS' '#-}' { Just (Overlaps (nIS $1)) }+> | '{-# OVERLAPPING' '#-}' { Just (Overlapping (nIS $1)) }+> | '{-# OVERLAPPABLE' '#-}' { Just (Overlappable (nIS $1)) }+> | '{-# INCOHERENT' '#-}' { Just (Incoherent (nIS $1)) }+> | '{-# NO_OVERLAP' '#-}' { Just (NoOverlap (nIS $1)) }+> | {- empty -} { Nothing }++Parsing the body of a closed type family, partially stolen from the source of GHC.+> where_type_family :: { Maybe ([TypeEqn L], S) }+> : {- empty -} { Nothing }+> | 'where' ty_fam_inst_eqn_list { Just ($2, $1) }++> ty_fam_inst_eqn_list :: { [TypeEqn L] }+> : '{' ty_fam_inst_eqns '}' { $2 }+> | open ty_fam_inst_eqns close { $2 }++> ty_fam_inst_eqns :: { [TypeEqn L] }+> : ty_fam_inst_eqns ';' ty_fam_inst_eqn { $1 ++ [$3] }+> | ty_fam_inst_eqns ';' { $1 }+> | ty_fam_inst_eqn { [$1] }+> | { [] }++> ty_fam_inst_eqn :: { TypeEqn L }+> : truectype '=' truectype+> {% do { checkEnabled TypeFamilies ;+> return (TypeEqn (ann $1 <++> ann $3 <** [$2]) $1 $3) } }++> data_or_newtype :: { DataOrNew L }+> : 'data' { DataType $ nIS $1 }+> | 'newtype' { NewType $ nIS $1 }++> typelist :: { ([Type L],[S]) }+> : types {% do { ts <- mapM checkType (fst $1);+> return $ (reverse ts, reverse (snd $1)) } }+> | truetype { ([$1],[]) }+> | {- empty -} { ([],[]) }++> decls :: { ([Decl L],[S]) }+> : optsemis decls1 optsemis {% checkRevDecls (fst $2) >>= \ds -> return (ds, reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([],reverse $1) }++> decls1 :: { ([Decl L],[S]) }+> : decls1 semis decl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | decl { ([$1],[]) }++> decl :: { Decl L }+> : signdecl { $1 }+> | fixdecl { $1 }+> | valdef { $1 }+> | pat_syn { $1 }+> | pattern_synonym_sig { $1 }++> decllist :: { Binds L }+> : '{' decls '}' { BDecls ($1 <^^> $3 <** ($1:snd $2++[$3])) (fst $2) }+> | open decls close { let l' = if null (fst $2) then nIS $3 else (ann . last $ fst $2)+> in BDecls (nIS $1 <++> l' <** ($1:snd $2++[$3])) (fst $2) }++> signdecl :: { Decl L }+> : signdecl0 { $1 }+> | specinldecl { $1 }++> signdecl0 :: { Decl L }+> : exp0b '::' truectype {% do { v <- checkSigVar $1;+> return $ TypeSig ($1 <> $3 <** [$2]) [v] $3 } }+> | exp0b ',' vars '::' truectype {% do { v <- checkSigVar $1;+> let {(vs,ss,_) = $3 ; l = $1 <> $5 <** ($2 : reverse ss ++ [$4]) } ;+> return $ TypeSig l (v : reverse vs) $5 } }++> specinldecl :: { Decl L }+> : '{-# INLINE' activation qvar '#-}' { let Loc l (INLINE s) = $1 in InlineSig (l <^^> $4 <** [l,$4]) s $2 $3 }+> | '{-# INLINE CONLIKE' activation qvar '#-}' { InlineConlikeSig ($1 <^^> $4 <** [$1,$4]) $2 $3 }+> | '{-# SPECIALISE' activation qvar '::' sigtypes '#-}'+> { SpecSig ($1 <^^> $6 <** ($1: $4 : snd $5 ++ [$6])) $2 $3 (fst $5) }+> | '{-# SPECIALISE INLINE' activation qvar '::' sigtypes '#-}'+> { let Loc l (SPECIALISE_INLINE s) = $1+> in SpecInlineSig (l <^^> $6 <** (l:$4:snd $5++[$6])) s $2 $3 (fst $5) }+> | '{-# SPECIALISE' 'instance' ctype '#-}' {% do { ih <- checkInstHeader $3;+> let {l = $1 <^^> $4 <** [$1,$2,$4]};+> return $ InstSig l ih } }+> | '{-# MINIMAL' name_boolformula '#-}' { MinimalPragma ($1 <^^> $3 <** [$1,$3]) $2 }++> sigtypes :: { ([Type L],[S]) }+> : sigtype { ([$1],[]) }+> | sigtype ',' sigtypes { ($1 : fst $3, $2 : snd $3) }++> sigtype :: { Type L }+> : ctype {% checkType $ mkTyForall (ann $1) Nothing Nothing $1 }++> name_boolformula :: { Maybe (BooleanFormula L) }+> : name_boolformula1 { Just $1 }+> | {- empty -} { Nothing }++> name_boolformula1 :: { BooleanFormula L }+> : name_boolformula_and { $1 }+> | name_boolformula_and '|' name_boolformula1 { OrFormula (ann $1 <++> ann $3 <** [$2]) [$1,$3] }++> name_boolformula_and :: { BooleanFormula L }+> : name_boolformula_atom { $1 }+> | name_boolformula_atom ',' name_boolformula_and { AndFormula (ann $1 <++> ann $3 <** [$2]) [$1,$3] }++> name_boolformula_atom :: { BooleanFormula L }+> : '(' name_boolformula1 ')' { ParenFormula ($1 <^^> $3 <** [$1,$3]) $2 }+> | var { VarFormula (ann $1) $1 }++Binding can be either of implicit parameters, or it can be a normal sequence+of declarations. The two kinds cannot be mixed within the same block of+binding.++> binds :: { Binds L }+> : decllist { $1 }+> | '{' ipbinds '}' { IPBinds ($1 <^^> $3 <** snd $2) (fst $2) }+> | open ipbinds close { let l' = ann . last $ fst $2+> in IPBinds (nIS $1 <++> l' <** snd $2) (fst $2) }++ATTENTION: Dirty Hackery Ahead! If the second alternative of vars is var+instead of qvar, we get another shift/reduce-conflict. Consider the+following programs:++ { (+) :: ... } only var+ { (+) x y = ... } could (incorrectly) be qvar++We re-use expressions for patterns, so a qvar would be allowed in patterns+instead of a var only (which would be correct). But deciding what the + is,+would require more lookahead. So let's check for ourselves...++> vars :: { ([Name L],[S],L) }+> : vars ',' var { let (ns,ss,l) = $1 in ($3 : ns, $2 : ss, l <++> ann $3) }+> | qvar {% do { n <- checkUnQual $1;+> return ([n],[],ann n) } }++-----------------------------------------------------------------------------+FFI++These will only be called on in the presence of a 'foreign' keyword,+so no need to check for extensions.++> callconv :: { CallConv L }+> : 'stdcall' { StdCall (nIS $1) }+> | 'ccall' { CCall (nIS $1) }+> | 'cplusplus' { CPlusPlus (nIS $1) }+> | 'dotnet' { DotNet (nIS $1) }+> | 'jvm' { Jvm (nIS $1) }+> | 'js' { Js (nIS $1) }+> | 'javascript' { JavaScript (nIS $1) }+> | 'capi' { CApi (nIS $1) }+++> safety :: { Maybe (Safety L) }+> : 'safe' { Just $ PlaySafe (nIS $1) False }+> | 'unsafe' { Just $ PlayRisky (nIS $1) }+> | 'threadsafe' { Just $ PlaySafe (nIS $1) True }+> | 'interruptible' { Just $ PlayInterruptible (nIS $1) }+> | {- empty -} { Nothing }++> fspec :: { (Maybe String, Name L, Type L, [S]) }+> : STRING var_no_safety '::' truedtype { let Loc l (StringTok (s,_)) = $1 in (Just s, $2, $4, [l,$3]) }+> | var_no_safety '::' truedtype { (Nothing, $1, $3, [$2]) }++-----------------------------------------------------------------------------+Pragmas++> rules :: { [Rule L] }+> : rules ';'rule { $3 : $1 }+> | rules ';' { $1 }+> | rule { [$1] }+> | {- empty -} { [] }++> rule :: { Rule L }+> : STRING activation ruleforall exp0 '=' trueexp {% do { let {Loc l (StringTok (s,_)) = $1};+> e <- checkRuleExpr $4;+> return $ Rule (nIS l <++> ann $6 <** l:snd $3 ++ [$5]) s $2 (fst $3) e $6 } }++> activation :: { Maybe (Activation L) }+> : {- empty -} { Nothing }+> | '[' INT ']' { let Loc l (IntTok (i,_)) = $2 in Just $ ActiveFrom ($1 <^^> $3 <** [$1,l,$3]) (fromInteger i) }+> | '[' '~' INT ']' { let Loc l (IntTok (i,_)) = $3 in Just $ ActiveUntil ($1 <^^> $4 <** [$1,$2,l,$4]) (fromInteger i) }++> ruleforall :: { (Maybe [RuleVar L],[S]) }+> : {- empty -} { (Nothing,[]) }+> | 'forall' rulevars '.' { (Just $2,[$1,$3]) }++> rulevars :: { [RuleVar L] }+> : rulevar { [$1] }+> | rulevar rulevars { $1 : $2 }++> rulevar :: { RuleVar L }+> : varid { RuleVar (ann $1) $1 }+> | '(' varid '::' truectype ')' { TypedRuleVar ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }++> warndeprs :: { ([([Name L],String)],[S]) }+> : warndeprs ';' warndepr { (fst $3 : fst $1, snd $1 ++ ($2:snd $3)) }+> | warndeprs ';' { (fst $1, snd $1 ++ [$2]) }+> | warndepr { ([fst $1],snd $1) }+> | {- empty -} { ([],[]) }++> warndepr :: { (([Name L], String),[S]) }+> : namevars STRING { let Loc l (StringTok (s,_)) = $2 in ((fst $1,s),snd $1 ++ [l]) }++> namevars :: { ([Name L],[S]) }+> : namevar { ([$1],[]) }+> | namevar ',' namevars { ($1 : fst $3, $2 : snd $3) }++> namevar :: { Name L }+> : con { $1 }+> | var { $1 }++> annotation :: { Annotation L }+> : 'type' conid aexp {% checkExpr $3 >>= \e -> return (TypeAnn (nIS $1 <++> ann e <** [$1]) $2 e) }+> | 'module' aexp {% checkExpr $2 >>= \e -> return (ModuleAnn (nIS $1 <++> ann e <** [$1]) e) }+> | namevar aexp {% checkExpr $2 >>= \e -> return (Ann ($1 <> e) $1 e) }++-----------------------------------------------------------------------------+Types++Type equality contraints need the TypeFamilies extension.++> truedtype :: { Type L }+> : dtype {% checkType $1 }++> dtype :: { PType L }+> : dtype_('*',NEVER) { $1 }++> dtype_(ostar,kstar) :: { PType L }+> : btype_(ostar,kstar) { splitTilde $1 }+> | btype_(ostar,kstar) qtyconop dtype_(ostar,kstar) { TyInfix ($1 <> $3) $1 $2 $3 }+> | btype_(ostar,kstar) qtyvarop_(ostar) dtype_(ostar,kstar) { TyInfix ($1 <> $3) $1 (UnpromotedName (ann $2) $2) $3 } -- FIXME+> | btype_(ostar,kstar) '->' ctype_(ostar,kstar) { TyFun ($1 <> $3 <** [$2]) (splitTilde $1) $3 }+ | btype_(ostar,kstar) '~' btype_(ostar,kstar) {% do { checkEnabledOneOf [TypeFamilies, GADTs] ;+ let {l = $1 <> $3 <** [$2]};+ return $ TyPred l $ EqualP l $1 $3 } }++Implicit parameters can occur in normal types, as well as in contexts.++> truetype :: { Type L }+> : type {% checkType $1 }++> type :: { PType L }+> : type_('*',NEVER) { $1 }++> type_(ostar,kstar) :: { PType L }+> : ivar '::' dtype_(ostar,kstar) { let l = ($1 <> $3 <** [$2]) in TyPred l $ IParam l $1 $3 }+> | dtype_(ostar,kstar) { $1 }++> truebtype :: { Type L }+> : btype {% checkType (splitTilde $1) }+> trueatype :: { Type L }+> : atype {% checkType $1 }++> btype :: { PType L }+> : btype_('*',NEVER) { $1 }++> btype_(ostar,kstar) :: { PType L }+> : btype_(ostar,kstar) atype_(ostar,kstar) { TyApp ($1 <> $2) $1 $2 }+> | atype_(ostar,kstar) { $1 }++UnboxedTuples requires the extension, but that will be handled through+the (# and #) lexemes. Kinds will be handled at the kind rule.++> atype :: { PType L }+> : atype_('*',NEVER) { $1 }++> atype_(ostar,kstar) :: { PType L }+> : kstar { TyStar (nIS $1) }+> | gtycon_(ostar) { TyCon (ann $1) $1 }+> | tyvar {% checkTyVar $1 }+> | strict_mark atype { let (mstrict, mupack) = $1+> in bangType mstrict mupack $2 }+> | '(' types_(ostar,kstar) ')' { TyTuple ($1 <^^> $3 <** ($1:reverse ($3:snd $2))) Boxed (reverse (fst $2)) }+> | '(#' types_bars2(ostar,kstar) '#)' { TyUnboxedSum ($1 <^^> $3 <** ($1: reverse ($3: snd $2))) (reverse (fst $2)) }+> | '(#' types1_(ostar,kstar) '#)' { TyTuple ($1 <^^> $3 <** ($1:reverse ($3:snd $2))) Unboxed (reverse (fst $2)) }+> | '[' type_(ostar,kstar) ']' { TyList ($1 <^^> $3 <** [$1,$3]) $2 }+> | '[:' type_(ostar,kstar) ':]' { TyParArray ($1 <^^> $3 <** [$1,$3]) $2 }+> | '(' ctype_(ostar,kstar) ')' { TyParen ($1 <^^> $3 <** [$1,$3]) $2 }+> | '(' ctype_(ostar,kstar) '::' kind ')' { TyKind ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }+> | '$(' trueexp ')' { let l = ($1 <^^> $3 <** [$1,$3]) in TySplice l $ ParenSplice l $2 }+> | '$$(' trueexp ')' { let l = ($1 <^^> $3 <** [$1,$3]) in TySplice l $ TParenSplice l $2 }+> | IDSPLICE { let Loc l (THIdEscape s) = $1 in TySplice (nIS l) $ IdSplice (nIS l) s }+> | TIDSPLICE { let Loc l (THTIdEscape s) = $1 in TySplice (nIS l) $ TIdSplice (nIS l) s }+> | '_' { TyWildCard (nIS $1) Nothing }+> | QUASIQUOTE { let Loc l (THQuasiQuote (n,q)) = $1 in TyQuasiQuote (nIS l) n q }+> | ptype_(ostar,kstar) { % checkEnabled DataKinds >> return (TyPromoted (ann $1) $1) }++> ptype_(ostar,kstar) :: { Promoted L }+> : VARQUOTE gcon_nolist {% fmap (PromotedCon (nIS $1 <++> ann $2 <** [$1]) True) (pexprToQName $2) }+> | VARQUOTE '[' types1_(ostar,kstar) ']' {% PromotedList ($1 <^^> $4 <** ($1:reverse($4:snd $3))) True . reverse <\$> mapM checkType (fst $3) }+> | '[' types_(ostar,kstar) ']' {% PromotedList ($1 <^^> $3 <** ($1:reverse($3:snd $2))) False . reverse <\$> mapM checkType (fst $2) }+> | VARQUOTE '[' ']' { PromotedList ($1 <^^> $3 <** [$1, $3]) True [] }+ | '[' ']' {% PromotedList ($1 <^^> $2 <** [$1, $2]) False [] }+> | VARQUOTE '(' types1 ')' {% PromotedTuple ($1 <^^> $4 <** ($1:reverse($4:snd $3))) . reverse <\$> mapM checkType (fst $3) }+> | INT { let Loc l (IntTok (i,raw)) = $1 in PromotedInteger (nIS l) i raw }+> | STRING { let Loc l (StringTok (s,raw)) = $1 in PromotedString (nIS l) s raw }+++> strict_mark :: { (Maybe (L -> BangType L,S), Maybe (Unpackedness L)) }+> : strictness { (Just $1, Nothing) }+> | unpackedness { (Nothing, Just $1) }+> | unpackedness strictness { (Just $2, Just $1) }++> strictness :: { (L -> BangType L, S) }+> : '!' { (BangedTy, $1) }+> | '~' { (LazyTy, $1) }++> unpackedness :: { Unpackedness L }+> : '{-# UNPACK' '#-}' { (Unpack ((nIS $1 <++> nIS $2) <** [$1,$2])) }+> | '{-# NOUNPACK' '#-}' { (NoUnpack ((nIS $1 <++> nIS $2) <** [$1,$2])) }+++> gtycon :: { QName L }+> : gtycon_('*') { $1 }++> gtycon_(ostar) :: { QName L }+> : otycon_(ostar) { $1 }+> | '(' ')' { unit_tycon_name ($1 <^^> $2 <** [$1,$2]) }+> | '(' '->' ')' { fun_tycon_name ($1 <^^> $3 <** [$1,$2,$3]) }+> | '[' ']' { list_tycon_name ($1 <^^> $2 <** [$1,$2]) }+> | '(' commas ')' { tuple_tycon_name ($1 <^^> $3 <** ($1:reverse $2 ++ [$3])) Boxed (length $2) }+> | '(#' '#)' { unboxed_singleton_tycon_name ($1 <^^> $2 <** [$1,$2]) }+> | '(#' commas '#)' { tuple_tycon_name ($1 <^^> $3 <** ($1:reverse $2 ++ [$3])) Unboxed (length $2) }++> otycon :: { QName L }+> : otycon_('*') { $1 }++> otycon_(ostar) :: { QName L }+> : qconid { $1 }+> | '(' gconsym ')' { updateQNameLoc ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }+> | '(' qvarsym_(ostar) ')' { updateQNameLoc ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }++These are for infix types++> qtyconop :: { MaybePromotedName L }+> : qconop { UnpromotedName (ann $1) $1 }+> | VARQUOTE gconsym { PromotedName (nIS $1 <++> ann $2 <** [$1]) $2 }+++(Slightly edited) Comment from GHC's hsparser.y:+"context => type" vs "type" is a problem, because you can't distinguish between++ foo :: (Baz a, Baz a)+ bar :: (Baz a, Baz a) => [a] -> [a] -> [a]++with one token of lookahead. The HACK is to parse the context as a btype+(more specifically as a tuple type), then check that it has the right form+C a, or (C1 a, C2 b, ... Cn z) and convert it into a context. Blaach!++Forall-quantified types require some extension to enable them, which+is any of the keyword-enabling ones, except ExistentialQuantification.++> truectype :: { Type L }+> : ctype {% checkType $1 }++> ctype :: { PType L }+> : ctype_('*',NEVER) { $1 }++> ctype_(ostar,kstar) :: { PType L }+> : 'forall' ktyvars '.' ctype_(ostar,kstar) { mkTyForall (nIS $1 <++> ann $4 <** [$1,$3]) (Just (reverse (fst $2))) Nothing $4 }+> | context_(ostar,kstar) ctype_(ostar,kstar) { mkTyForall ($1 <> $2) Nothing (Just $1) $2 }+> | type_(ostar,kstar) { $1 }++Equality constraints require the TypeFamilies extension.++> context :: { PContext L }+> : context_('*',NEVER) { $1 }++> context_(ostar,kstar) :: { PContext L }+> : btype_(ostar,kstar) '=>' {% checkPContext $ (amap (\l -> l <++> nIS $2 <** (srcInfoPoints l ++ [$2]))) (splitTilde $1) }++> types :: { ([PType L],[S]) }+> : types_('*',NEVER) { $1 }++> types_(ostar,kstar) :: { ([PType L],[S]) }+> : types1_(ostar,kstar) ',' ctype_(ostar,kstar) { ($3 : fst $1, $2 : snd $1) }++> types1 :: { ([PType L],[S]) }+> : types1_('*',NEVER) { $1 }++> types1_(ostar,kstar) :: { ([PType L],[S]) }+> : ctype_(ostar,kstar) { ([$1],[]) }+> | types1_(ostar,kstar) ',' ctype_(ostar,kstar) { ($3 : fst $1, $2 : snd $1) }++> types_bars2(ostar,kstar) :: { ([PType L],[S]) }+> : ctype_(ostar,kstar) '|' ctype_(ostar,kstar) { ([$3, $1], [$2]) }+> | types_bars2(ostar,kstar) '|' ctype_(ostar,kstar) { ($3 : fst $1, $2 : snd $1) }++> ktyvars :: { ([TyVarBind L],Maybe L) }+> : ktyvars ktyvar { ($2 : fst $1, Just (snd $1 <?+> ann $2)) }+> | {- empty -} { ([],Nothing) }++> ktyvar :: { TyVarBind L }+> : tyvar { UnkindedVar (ann $1) $1 }+> | '(' tyvar '::' kind ')' { KindedVar ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }++> tyvars :: { ([Name L],Maybe L) }+> : tyvars tyvar { ($2 : fst $1, Just (snd $1 <?+> ann $2)) }+> | {- empty -} { ([], Nothing) }++> tyvars1 :: { ([Name L],L) }+> : tyvars tyvar { ($2 : fst $1, snd $1 <?+> ann $2) }+++-----------------------------------------------------------------------------+Functional Dependencies++These require the FunctionalDependencies extension to be enabled.++> fds :: { ([FunDep L],[S],Maybe L) }+> : {- empty -} { ([],[], Nothing) }+> | '|' fds1 {% do { checkEnabled FunctionalDependencies ;+> let {(fds,ss,l) = $2} ;+> return (reverse fds, $1 : reverse ss, Just (nIS $1 <++> l)) } }++> fds1 :: { ([FunDep L],[S],L) }+> : fds1 ',' fd { let (fds,ss,l) = $1 in ($3 : fds, $2 : ss, l <++> ann $3) }+> | fd { ([$1],[],ann $1) }++> fd :: { FunDep L }+> : tyvars '->' tyvars1 { FunDep (snd $1 <?+> nIS $2 <++> snd $3 <** [$2]) (reverse (fst $1)) (reverse (fst $3)) }++-----------------------------------------------------------------------------+Datatype declarations++GADTs - require the GADTs extension enabled, but we handle that at the calling site.++ gadtlist :: { ([GadtDecl L],[S],L) }+ : gadtlist1 {% >> return $1 }++> gadtlist :: { ([GadtDecl L],[S],Maybe L) }+> : 'where' '{' gadtconstrs1 '}' {% return (fst $3, $1 : $2 : snd $3 ++ [$4], Just $ $1 <^^> $4) }+> | 'where' open gadtconstrs1 close {% return (fst $3, $1 : $2 : snd $3 ++ [$4], Just $ $1 <^^> $4) }+> | {- empty -} {% checkEnabled EmptyDataDecls >> return ([],[],Nothing) }++> gadtconstrs1 :: { ([GadtDecl L],[S]) }+> : optsemis gadtconstrs optsemis { (fst $2, reverse $1 ++ snd $2 ++ reverse $3) }++> gadtconstrs :: { ([GadtDecl L],[S]) }+> : gadtconstrs semis gadtconstr { ($3 ++ fst $1, snd $1 ++ reverse $2) }+> | gadtconstr { ($1,[]) }++> gadtconstr :: { [GadtDecl L] }+> : qcon '::' truectype {% do { c <- checkUnQual $1;+> return [GadtDecl ($1 <> $3 <** [$2]) c Nothing Nothing Nothing $3] } }+> | qcon '::' context '{' fielddecls '}' '->' truectype+> {% do { c <- checkUnQual $1;+> ctxt <- checkContext (Just $3) ;+> return [GadtDecl ($1 <> $8 <** [$2,$4,$6,$7] ++ snd $5) c Nothing ctxt (Just (reverse $ fst $5)) $8] } }+> | qcon '::' '{' fielddecls '}' '->' truectype+> {% do { c <- checkUnQual $1;+> return [GadtDecl ($1 <> $7 <** [$2,$3,$5,$6] ++ snd $4) c Nothing Nothing (Just (reverse $ fst $4)) $7] } }++To allow the empty case we need the EmptyDataDecls extension.+> constrs0 :: { ([QualConDecl L],[S],Maybe L) }+ : {- empty -} {% checkEnabled EmptyDataDecls >> return ([],[],Nothing) }+> : '=' constrs { let (ds,ss,l) = $2 in (ds, $1 : reverse ss, Just $ nIS $1 <++> l) }++> constrs :: { ([QualConDecl L],[S],L) }+> : constrs '|' constr { let (ds,ss,l) = $1 in ($3 : ds, $2 : ss, l <++> ann $3) }+> | constr { ([$1],[],ann $1) }++> constr :: { QualConDecl L }+> : forall context constr1 {% do { checkEnabled ExistentialQuantification ;+> ctxt <- checkContext (Just $2) ;+> let {(mtvs,ss,ml) = $1} ;+> return $ QualConDecl (ml <?+> ann $3 <** ss) mtvs ctxt $3 } }+> | forall constr1 { let (mtvs, ss, ml) = $1 in QualConDecl (ml <?+> ann $2 <** ss) mtvs Nothing $2 }++> forall :: { (Maybe [TyVarBind L], [S], Maybe L) }+> : 'forall' ktyvars '.' {% checkEnabled ExistentialQuantification >> return (Just (fst $2), [$1,$3], Just $ $1 <^^> $3) }+> | {- empty -} { (Nothing, [], Nothing) }++To avoid conflicts when introducing type operators, we need to parse record constructors+as qcon and then check separately that they are truly unqualified.++> constr1 :: { ConDecl L }+> : scontype { let (n,ts,l) = $1 in ConDecl l n ts }+> | truebtype conop truebtype { InfixConDecl ($1 <> $3) $1 $2 $3 }+> | qcon '{' '}' {% do { c <- checkUnQual $1; return $ RecDecl (ann $1 <++> nIS $3 <** [$2,$3]) c [] } }+> | qcon '{' fielddecls '}' {% do { c <- checkUnQual $1;+> return $ RecDecl (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) c (reverse (fst $3)) } }++> scontype :: { (Name L, [Type L], L) }+> : btype {% do { (c,ts) <- splitTyConApp $1;+> return (c, ts, ann $1) } }++> fielddecls :: { ([FieldDecl L],[S]) }+> : fielddecls ',' fielddecl { ($3 : fst $1, $2 : snd $1) }+> | fielddecl { ([$1],[]) }++> fielddecl :: { FieldDecl L }+> : vars '::' truectype { let (ns,ss,l) = $1 in FieldDecl (l <++> ann $3 <** (reverse ss ++ [$2])) (reverse ns) $3 }++> maybe_derivings :: { [Deriving L] }+> : {- empty -} { [] }+> | derivings { $1 }++> derivings :: { [Deriving L] }+> : derivings deriving { $2 : $1 }+> | deriving { [$1] }++> deriving :: { Deriving L }+> : 'deriving' deriv_clause_types+> { let (ihs, last_ss, sss) = $2+> in Deriving ($1 <^^> last_ss <** $1:sss) Nothing ihs }+> | 'deriving' deriv_strategy_no_via deriv_clause_types+> { let (ihs, last_ss, sss) = $3+> in Deriving ($1 <^^> last_ss <** $1:sss) (Just $2) ihs }+> | 'deriving' deriv_clause_types deriv_strategy_via+> { let (ihs, last_ss, sss) = $2+> in Deriving ($1 <^^> last_ss <** $1:sss) (Just $3) ihs }++> dclasses :: { ([InstRule L],[S]) }+> : types1 {% checkDeriving (fst $1) >>= \ds -> return (ds, snd $1) }++> qtycls1 :: { InstHead L }+> : qconid { IHCon (ann $1) $1 }++> deriv_clause_types :: { ([InstRule L], SrcSpan, [SrcSpan]) }+> : qtycls1 { [IRule (ann $1) Nothing Nothing $1], srcInfoSpan (ann $1), [] }+> | '(' ')' { [], $2, [$1, $2] }+> | '(' dclasses ')' { case fst $2 of+> [ts] -> ([IParen ($1 <^^> $3 <** [$1,$3]) ts], $3, [])+> tss -> (reverse tss, $3, $1: reverse (snd $2) ++ [$3]) }++-----------------------------------------------------------------------------+Kinds++> kind :: { Kind L }+> : kind1 {% checkEnabled KindSignatures >> return $1 }++> kind1 :: { Kind L }+> : ctype_(NEVER,'*') {% checkType $1 }++> optkind :: { (Maybe (Kind L), [S]) }+> : {-empty-} { (Nothing,[]) }+> | '::' kind { (Just $2,[$1]) }++> opt_tyconsig :: { Maybe ( S, QName L ) }+> : {- empty -} { Nothing }+> | '::' gtycon { Just ($1, $2) }+-----------------------------------------------------------------------------+Class declarations++TODO: Lots of stuff to pass around here.++No implicit parameters in the where clause of a class declaration.+> optcbody :: { (Maybe [ClassDecl L],[S],Maybe L) }+> : 'where' '{' cldecls '}' {% checkClassBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4)) }+> | 'where' open cldecls close {% do { vs <- checkClassBody (fst $3);+> let { l' = if null (fst $3) then nIS $4 else (ann . last $ fst $3) };+> return (Just vs, $1:$2: snd $3 ++ [$4], Just (nIS $1 <++> l')) } }+> | {- empty -} { (Nothing,[],Nothing) }++> cldecls :: { ([ClassDecl L],[S]) }+> : optsemis cldecls1 optsemis {% checkRevClsDecls (fst $2) >>= \cs -> return (cs, reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([],reverse $1) }++> cldecls1 :: { ([ClassDecl L],[S]) }+> : cldecls1 semis cldecl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | cldecl { ([$1],[]) }++Associated types require the TypeFamilies extension.++> cldecl :: { ClassDecl L }+> : decl { ClsDecl (ann $1) $1 }+> | atdecl {% checkEnabled TypeFamilies >> return $1 }+> | 'default' signdecl {% checkEnabled DefaultSignatures >> checkDefSigDef $2 >>= \(n,t,l) -> return (ClsDefSig (nIS $1 <++> ann $2 <** [$1,l]) n t) }++> opt_family :: { [S] }+> : {- empty -} { [] }+> | 'family' { [$1] }++> atdecl :: { ClassDecl L }+> : 'data' opt_family type opt_datafam_kind_sig+> {% do { (cs,dh) <- checkDataHeader $3;+> return (ClsDataFam (nIS $1 <++> ann $3 <+?> (fmap ann) $4 <** [$1]) cs dh $4) } }+> | 'type' type opt_at_kind_inj_sig2+> {% mkAssocType $1 $2 $3 }+> | 'type' 'family' type opt_at_kind_inj_sig+> {% do { dh <- checkSimpleType $3;+> return (ClsTyFam (nIS $1 <++> ann $3 <+?> (fmap ann) (fst $4)+> <+?> (fmap ann) (snd $4)+> <** [$1]) dh (fst $4) (snd $4)) } }+> | 'type' 'instance' ty_fam_inst_eqn+> { ClsTyDef (nIS $1 <++> ann $3 <** [$1,$2]) $3 }++-----------------------------------------------------------------------------+Instance declarations++> optvaldefs :: { (Maybe [InstDecl L],[S],Maybe L) }+> : 'where' '{' valdefs '}' {% checkInstBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4)) }+> | 'where' open valdefs close {% checkInstBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4)) }+> | {- empty -} { (Nothing, [], Nothing) }++> valdefs :: { ([InstDecl L],[S]) }+> : optsemis valdefs1 optsemis {% checkRevInstDecls (fst $2) >>= \is -> return (is, reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([],reverse $1) }++> valdefs1 :: { ([InstDecl L],[S]) }+> : valdefs1 semis insvaldef { ($3 : fst $1, snd $1 ++ reverse $2) }+> | insvaldef { ([$1],[]) }++Associated types require the TypeFamilies extension enabled.++> insvaldef :: { InstDecl L }+> : valdef { InsDecl (ann $1) $1 }+> | atinst {% checkEnabled TypeFamilies >> return $1 }+> | specinldecl { InsDecl (ann $1) $1 }+> | signdecl0 {% checkEnabled InstanceSigs >> return (InsDecl (ann $1) $1) }++ inlinst :: { InstDecl L }+ : '{-# INLINE' activation qvar '#-}' { let Loc l (INLINE s) = $1 in InsInline (l <^^> $4 <** [l,$4]) s $2 $3 }++> atinst :: { InstDecl L }+> : 'type' truedtype '=' truectype+> {% do { -- no checkSimpleType $4 since dtype may contain type patterns+> return (InsType (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4) } }+> | data_or_newtype truectype constrs0 maybe_derivings+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> let {(ds,ss,minf) = $3};+> checkDataOrNew $1 ds;+> return (InsData ($1 <> $2 <+?> minf <+?> fmap ann (listToMaybe $4) <** ss ) $1 $2 (reverse ds) (reverse $4)) } }+> | data_or_newtype truectype optkind gadtlist maybe_derivings+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> let { (gs,ss,minf) = $4 } ;+> checkDataOrNewG $1 gs;+> return $ InsGData (ann $1 <+?> minf <+?> fmap ann (listToMaybe $5) <** (snd $3 ++ ss)) $1 $2 (fst $3) (reverse gs) (reverse $5) } }++-----------------------------------------------------------------------------+Value definitions++> valdef :: { Decl L }+> : exp0b optsig rhs optwhere {% checkValDef (($1 <> $3 <+?> (fmap ann) (fst $4)) <** (snd $4)) $1 $2 $3 (fst $4) }+> | '!' aexp rhs optwhere {% do { checkEnabled BangPatterns ;+> let { l = nIS $1 <++> ann $2 <** [$1] };+> p <- checkPattern (BangPat l $2);+> return $ PatBind (p <> $3 <+?> (fmap ann) (fst $4) <** snd $4)+> p $3 (fst $4) } }++May bind implicit parameters+> optwhere :: { (Maybe (Binds L),[S]) }+> : 'where' binds { (Just $2, [$1]) }+> | {- empty -} { (Nothing, []) }++Type signatures on value definitions require ScopedTypeVariables (or PatternSignatures, which is deprecated).++> optsig :: { (Maybe (Type L, S)) }+> : '::' truectype {% checkEnabled ScopedTypeVariables >> return (Just ($2, $1)) }+> | {- empty -} { Nothing }++> rhs :: { Rhs L }+> : '=' trueexp { UnGuardedRhs (nIS $1 <++> ann $2 <** [$1]) $2 }+> | gdrhs { GuardedRhss (snd $1) (reverse $ fst $1) }++> gdrhs :: { ([GuardedRhs L],L) }+> : gdrhs gdrh { ($2 : fst $1, snd $1 <++> ann $2) }+> | gdrh { ([$1],ann $1) }++Guards may contain patterns if PatternGuards is enabled, hence quals instead of exp.+> gdrh :: { GuardedRhs L }+> : '|' quals '=' trueexp {% do { checkPatternGuards (fst $2);+> return $ GuardedRhs (nIS $1 <++> ann $4 <** ($1:snd $2 ++ [$3])) (reverse (fst $2)) $4 } }++-----------------------------------------------------------------------------+Expressions++Note: The Report specifies a meta-rule for lambda, let and if expressions+(the exp's that end with a subordinate exp): they extend as far to+the right as possible. That means they cannot be followed by a type+signature or infix application. To implement this without shift/reduce+conflicts, we split exp10 into these expressions (exp10a) and the others+(exp10b). That also means that only an exp0 ending in an exp10b (an exp0b)+can followed by a type signature or infix application. So we duplicate+the exp0 productions to distinguish these from the others (exp0a).++Ugly: We need non-parenthesized post-operators for HaRP, and to parse both+these and normal left sections, we parse both as PostOp and let the post pass+mangle them into the correct form depending on context.++> trueexp :: { Exp L }+> : exp {% checkExpr $1 }++> exp :: { PExp L }+> : exp0b '::' truectype { ExpTypeSig ($1 <> $3 <** [$2]) $1 $3 }+> | exp0 { $1 }+> | exp0b qop { PostOp ($1 <> $2) $1 $2 }+> | exp0b '-<' exp { LeftArrApp ($1 <> $3 <** [$2]) $1 $3 }+> | exp0b '>-' exp { RightArrApp ($1 <> $3 <** [$2]) $1 $3 }+> | exp0b '-<<' exp { LeftArrHighApp ($1 <> $3 <** [$2]) $1 $3 }+> | exp0b '>>-' exp { RightArrHighApp ($1 <> $3 <** [$2]) $1 $3 }++> exp0 :: { PExp L }+> : exp0a { $1 }+> | exp0b { $1 }++> exp0a :: { PExp L }+> : exp0b qop exp10a { InfixApp ($1 <> $3) $1 $2 $3 }+> | exp10a { $1 }++> exp0b :: { PExp L }+> : exp0b qop exp10b { InfixApp ($1 <> $3) $1 $2 $3 }+> | exp10b { $1 }++> exp10a :: { PExp L }+> : expblocka { $1 }+> | fexp expblocka {% checkEnabled BlockArguments >>+> return (App ($1 <> $2) $1 $2) }++> expblocka :: { PExp L }+> : '\\' apats '->' exp { Lambda (nIS $1 <++> ann $4 <** [$1,$3]) (reverse $2) $4 }+A let may bind implicit parameters+> | 'let' binds 'in' exp { Let (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }+> | 'if' exp optlayoutsemi 'then' exp optlayoutsemi 'else' exp+> { If (nIS $1 <++> ann $8 <** ($1:$3 ++ $4:$6 ++ [$7])) $2 $5 $8 }+> | 'if' ifaltslist {% checkEnabled MultiWayIf >>+> let (alts, inf, ss) = $2+> in return (MultiIf (nIS $1 <++> inf <** ($1:ss)) alts) }+> | 'proc' apat '->' exp { Proc (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }+> | exppragma { $1 }++> optlayoutsemi :: { [S] }+> : ';' {% checkEnabled DoAndIfThenElse >> return [$1] }+> | {- empty -} { [] }++We won't come here unless XmlSyntax is already checked.+> opthsxsemi :: { [S] }+> : ';' { [$1] }+> | {- empty -} { [] }+++mdo blocks require the RecursiveDo extension enabled, but the lexer handles that.++> exp10b :: { PExp L }+> : expblockb { $1 }+> | '-' fexp { NegApp (nIS $1 <++> ann $2 <** [$1]) $2 }+> | fexp { $1 }++> expblockb :: { PExp L }+> : 'case' exp 'of' altslist { let (als, inf, ss) = $4 in Case (nIS $1 <++> inf <** ($1:$3:ss)) $2 als }+> | '\\' 'case' altslist {% do { checkEnabled LambdaCase ;+> let { (als, inf, ss) = $3 } ;+> return (LCase (nIS $1 <++> inf <** ($1:$2:ss)) als) } }+> | 'do' stmtlist { let (sts, inf, ss) = $2 in Do (nIS $1 <++> inf <** $1:ss) sts }+> | 'mdo' stmtlist { let (sts, inf, ss) = $2 in MDo (nIS $1 <++> inf <** $1:ss) sts }++> exppragma :: { PExp L }+> : '{-# CORE' STRING '#-}' exp { let Loc l (StringTok (s,_)) = $2 in CorePragma (nIS $1 <++> ann $4 <** [l,$3]) s $4 }+> | '{-# SCC' STRING '#-}' exp { let Loc l (StringTok (s,_)) = $2 in SCCPragma (nIS $1 <++> ann $4 <** [l,$3]) s $4 }+> | '{-# GENERATED' STRING INT ':' INT '-' INT ':' INT '#-}' exp+> { let { Loc l0 (StringTok (s,_)) = $2;+> Loc l1 (IntTok (i1,_)) = $3;+> Loc l2 (IntTok (i2,_)) = $5;+> Loc l3 (IntTok (i3,_)) = $7;+> Loc l4 (IntTok (i4,_)) = $9}+> in GenPragma (nIS $1 <++> ann $11 <** [$1,l0,l1,$4,l2,$6,l3,$8,l4,$10])+> s (fromInteger i1, fromInteger i2)+> (fromInteger i3, fromInteger i4) $11 }++> fexp :: { PExp L }+> : fexp aexp { App ($1 <> $2) $1 $2 }+> | fexp expblockb {% checkEnabled BlockArguments >>+> return (App ($1 <> $2) $1 $2) }+> | aexp { $1 }++> apats :: { [Pat L] }+> : apats apat { $2 : $1 }+> | apat { [$1] }++> apat :: { Pat L }+> : aexp {% checkPattern $1 }+> | '!' aexp {% checkPattern (BangPat (nIS $1 <++> ann $2 <** [$1]) $2) }++UGLY: Because patterns and expressions are mixed, aexp has to be split into+two rules: One right-recursive and one left-recursive. Otherwise we get two+reduce/reduce-errors (for as-patterns and irrefutable patters).++Even though the variable in an as-pattern cannot be qualified, we use+qvar here to avoid a shift/reduce conflict, and then check it ourselves+(as for vars above).++Non-linear name binding, @:, requires RegularPatterns, but the lexer handles that.++> aexp :: { PExp L }+> : qvar '@' aexp {% do { n <- checkUnQual $1;+> return (AsPat ($1 <> $3 <** [$2]) n $3) } }+> | qvar '@:' aexp {% do { n <- checkUnQual $1;+> return (CAsRP ($1 <> $3 <** [$2]) n $3) } }+> | '~' aexp { IrrPat (nIS $1 <++> ann $2 <** [$1]) $2 }+> | TYPEAPP trueatype { TypeApp (nIS $1 <++> ann $2 <** [$1]) $2 }+> | aexp1 { $1 }++Note: The first two alternatives of aexp1 are not necessarily record+updates: they could be labeled constructions.++> aexp1 :: { PExp L }+> : aexp1 '{' '}' {% liftM (amap (const (ann $1 <++> nIS $3 <** [$2,$3]))) $ mkRecConstrOrUpdate $1 [] }+> | aexp1 '{' fbinds '}' {% liftM (amap (const (ann $1 <++> nIS $4 <** ($2:snd $3 ++ [$4]))))+> $ mkRecConstrOrUpdate $1 (fst $3) }+> | aexp2 { $1 }++According to the Report, the left section (e op) is legal iff (e op x)+parses equivalently to ((e) op x). Thus e must be an exp0b.+An implicit parameter can be used as an expression, enabled by the lexer.+Extensions using banana brackets are also enabled by the lexer. The only+thing we need to look at here is the erpats that use no non-standard lexemes.++> aexp2 :: { PExp L }+> : ivar { IPVar (ann $1) $1 }+> | overloaded_label { $1 }+> | qvar { Var (ann $1) $1 }+> | gcon { $1 }+> | literal { Lit (ann $1) $1 }+> | '(' texp ')' { Paren ($1 <^^> $3 <** [$1,$3]) $2 }+> | '(' tup_exprs ')' {% do { e <- mkSumOrTuple Boxed ($1 <^^> $3) (snd $2)+> ; return $ amap (\l -> l <** [$1] ++ fst $2 ++ [$3]) e } }+> | '(#' texp '#)' { TupleSection ($1 <^^> $3 <** [$1,$3]) Unboxed [Just $2] }+> | '(#' tup_exprs '#)' {% do { e <- mkSumOrTuple Unboxed ($1 <^^> $3) (snd $2)+> ; return $ amap (\l -> l <** [$1] ++ fst $2 ++ [$3]) e } }+> | '[' list ']' { amap (\l -> l <** [$3]) $ $2 ($1 <^^> $3 <** [$1]) }+> | '[:' parr ':]' { amap (\l -> l <** [$3]) $ $2 ($1 <^^> $3 <** [$1]) }+> | '(' erpats ')' {% checkEnabled RegularPatterns >> return (Paren ($1 <^^> $3 <** [$1,$3]) $2) }+> | '(|' exp '|)' { ArrOp ($1 <^^> $3 <** [$1,$3]) $2 }+> | '(/' sexps '/)' { SeqRP ($1 <^^> $3 <** ($1:reverse (snd $2) ++ [$3])) $ reverse (fst $2) }+> | '(/' exp '|' quals '/)' { GuardRP ($1 <^^> $5 <** ($1:$3 : snd $4 ++ [$5])) $2 $ (reverse $ fst $4) }+> | xml { $1 }+++Template Haskell - all this is enabled in the lexer.+> | IDSPLICE { let Loc l (THIdEscape s) = $1 in SpliceExp (nIS l) $ IdSplice (nIS l) s }+> | TIDSPLICE { let Loc l (THTIdEscape s) = $1 in SpliceExp (nIS l) $ TIdSplice (nIS l) s }+> | '$(' trueexp ')' { let l = ($1 <^^> $3 <** [$1,$3]) in SpliceExp l $ ParenSplice l $2 }+> | '$$(' trueexp ')' { let l = ($1 <^^> $3 <** [$1,$3]) in SpliceExp l $ TParenSplice l $2 }+> | '[|' trueexp '|]' { let l = ($1 <^^> $3 <** [$1,$3]) in BracketExp l $ ExpBracket l $2 }+> | '[||' trueexp '||]' { let l = ($1 <^^> $3 <** [$1,$3]) in BracketExp l $ TExpBracket l $2 }+> | '[p|' exp0 '|]' {% do { p <- checkPattern $2;+> let {l = ($1 <^^> $3 <** [$1,$3]) };+> return $ BracketExp l $ PatBracket l p } }+> | '[t|' truectype '|]' { let l = $1 <^^> $3 <** [$1,$3] in BracketExp l $ TypeBracket l $2 }+> | '[d|' open topdecls close '|]' { let l = $1 <^^> $5 <** ($1:snd $3 ++ [$5])+> in BracketExp l $ DeclBracket ($1 <^^> $5 <** ($2:snd $3 ++ [$4,$5])) (fst $3) }+> | VARQUOTE '(' ')' { let {l1 = $1 <^^> $3 <** [$1];+> l2 = $2 <^^> $3 <** [$2,$3];}+> in VarQuote l1 (unit_con_name l2) }+> | VARQUOTE '[' ']' { let {l1 = $1 <^^> $3 <** [$1];+> l2 = $2 <^^> $3 <** [$2,$3];}+> in VarQuote l1 (list_con_name l2) }+> | VARQUOTE qvar { VarQuote (nIS $1 <++> ann $2 <** [$1]) $2 }+> | VARQUOTE qcon { VarQuote (nIS $1 <++> ann $2 <** [$1]) $2 }+> | TYPQUOTE tyvar { TypQuote (nIS $1 <++> ann $2 <** [$1]) (UnQual (ann $2) $2) }+> | TYPQUOTE gtycon { TypQuote (nIS $1 <++> ann $2 <** [$1]) $2 }+> | QUASIQUOTE { let Loc l (THQuasiQuote (n,q)) = $1 in QuasiQuote (nIS l) n q }+End Template Haskell++> tup_exprs :: { ([S], SumOrTuple L) }+> : texp commas_tup_tail { (fst $2, STuple (Just $1 : snd $2)) }+> | texp bars { ($2, SSum 0 (length $2) $1) }+> | commas tup_tail { ($1 ++ (fst $2), STuple ((map (const Nothing) $1) ++ snd $2)) }+> | bars texp bars0 { ($1 ++ $3, SSum (length $1) (length $3) $2) }++> commas_tup_tail :: { ([S], [Maybe (PExp L)]) }+> : commas tup_tail { (reverse $1 ++ fst $2, map (const Nothing) (tail $1) ++ snd $2) }++> tup_tail :: { ([S], [Maybe (PExp L)]) }+> : texp commas_tup_tail { (fst $2, Just $1 : snd $2) }+> | texp { ([], [Just $1]) }+> | {- empty -} { ([], [Nothing]) }++> commas :: { [S] }+> : commas ',' { $2 : $1 }+> | ',' { [$1] }++> bars :: { [S] }+> : bars '|' { $2 : $1 }+> | '|' { [$1] }++> bars0 :: { [S] }+> : bars { $1 }+> | { [] }++> texp :: { PExp L }+> : exp { $1 }+> | qopm exp0 { PreOp ($1 <> $2) $1 $2 }+> | exp '->' pat {% do {checkEnabled ViewPatterns;+> return $ ViewPat ($1 <> $3 <** [$2]) $1 $3} }++-----------------------------------------------------------------------------+Harp Extensions++> sexps :: { ([PExp L],[S]) }+> : sexps ',' exp { ($3 : fst $1, $2 : snd $1) }+> | exp { ([$1],[]) }++Either patterns are left associative+> erpats :: { PExp L }+> : exp '|' erpats { EitherRP ($1 <> $3 <** [$2]) $1 $3 }+> | exp '|' exp { EitherRP ($1 <> $3 <** [$2]) $1 $3 }++-----------------------------------------------------------------------------+Hsx Extensions - requires XmlSyntax, but the lexer handles all that.++> xml :: { PExp L }+> : '<' name attrs mattr '>' children opthsxsemi '</' name '>'+> {% do { n <- checkEqNames $2 $9;+> let { cn = reverse $6;+> as = reverse $3;+> l = $1 <^^> $10 <** [$1,$5] ++ $7 ++ [$8,srcInfoSpan (ann $9),$10] };+> return $ XTag l n as $4 cn } }+> | '<' name attrs mattr '/>' { XETag ($1 <^^> $5 <** [$1,$5]) $2 (reverse $3) $4 }+> | '<%' exp '%>' { XExpTag ($1 <^^> $3 <** [$1,$3]) $2 }+> | '<%>' children opthsxsemi '</' '%>' { XChildTag ($1 <^^> $5 <** ($1:$3++[$4,$5])) (reverse $2) }++> children :: { [PExp L] }+> : children child { $2 : $1 }+> | {- empty -} { [] }++> child :: { PExp L }+> : PCDATA { let Loc l (XPCDATA pcd) = $1 in XPcdata (nIS l) pcd }+> | '<[' sexps ']>' { XRPats ($1 <^^> $3 <** (snd $2 ++ [$1,$3])) $ reverse (fst $2) }+> | xml { $1 }++> name :: { XName L }+> : xmlname ':' xmlname { let {Loc l1 s1 = $1; Loc l2 s2 = $3}+> in XDomName (nIS l1 <++> nIS l2 <** [l1,$2,l2]) s1 s2 }+> | xmlname { let Loc l str = $1 in XName (nIS l) str }++> xmlname :: { Loc String }+> : VARID { let Loc l (VarId s) = $1 in Loc l s }+> | CONID { let Loc l (ConId s) = $1 in Loc l s }+> | DVARID { let Loc l (DVarId s) = $1 in Loc l $ mkDVar s }+> | xmlkeyword { $1 }++> xmlkeyword :: { Loc String }+> : 'type' { Loc $1 "type" }+> | 'class' { Loc $1 "class" }+> | 'data' { Loc $1 "data" }+> | 'foreign' { Loc $1 "foreign" }+> | 'export' { Loc $1 "export" }+> | 'safe' { Loc $1 "safe" }+> | 'unsafe' { Loc $1 "unsafe" }+> | 'interruptible' { Loc $1 "interruptible" }+> | 'threadsafe' { Loc $1 "threadsafe" }+> | 'stdcall' { Loc $1 "stdcall" }+> | 'ccall' { Loc $1 "ccall" }+> | 'cplusplus' { Loc $1 "cplusplus" }+> | 'dotnet' { Loc $1 "dotnet" }+> | 'jvm' { Loc $1 "jvm" }+> | 'js' { Loc $1 "js" }+> | 'javascript' { Loc $1 "javascript" }+> | 'capi' { Loc $1 "capi" }+> | 'as' { Loc $1 "as" }+> | 'by' { Loc $1 "by" }+> | 'case' { Loc $1 "case" }+> | 'default' { Loc $1 "default" }+> | 'deriving' { Loc $1 "deriving" }+> | 'do' { Loc $1 "do" }+> | 'else' { Loc $1 "else" }+> | 'family' { Loc $1 "family" }+> | 'forall' { Loc $1 "forall" }+> | 'group' { Loc $1 "group" }+> | 'hiding' { Loc $1 "hiding" }+> | 'if' { Loc $1 "if" }+> | 'import' { Loc $1 "import" }+> | 'in' { Loc $1 "in" }+> | 'infix' { Loc $1 "infix" }+> | 'infixl' { Loc $1 "infixl" }+> | 'infixr' { Loc $1 "infixr" }+> | 'instance' { Loc $1 "instance" }+> | 'let' { Loc $1 "let" }+> | 'mdo' { Loc $1 "mdo" }+> | 'module' { Loc $1 "module" }+> | 'newtype' { Loc $1 "newtype" }+> | 'of' { Loc $1 "of" }+> | 'proc' { Loc $1 "proc" }+> | 'rec' { Loc $1 "rec" }+> | 'then' { Loc $1 "then" }+> | 'using' { Loc $1 "using" }+> | 'where' { Loc $1 "where" }+> | 'qualified' { Loc $1 "qualified" }+++> attrs :: { [ParseXAttr L] }+> : attrs attr { $2 : $1 }+> | {- empty -} { [] }++> attr :: { ParseXAttr L }+> : name '=' aexp { XAttr ($1 <> $3 <** [$2]) $1 $3 }++> mattr :: { Maybe (PExp L) }++> : aexp { Just $1 }+> | {-empty-} { Nothing }++-----------------------------------------------------------------------------+List expressions++The rules below are little bit contorted to keep lexps left-recursive while+avoiding another shift/reduce-conflict.++> list :: { L -> PExp L }+> : texp { \l -> List l [$1] }+> | lexps { \l -> let (ps,ss) = $1 in List (l <** reverse ss) (reverse ps) }+> | texp '..' { \l -> EnumFrom (l <** [$2]) $1 }+> | texp ',' exp '..' { \l -> EnumFromThen (l <** [$2,$4]) $1 $3 }+> | texp '..' exp { \l -> EnumFromTo (l <** [$2]) $1 $3 }+> | texp ',' exp '..' exp { \l -> EnumFromThenTo (l <** [$2,$4]) $1 $3 $5 }+> | texp '|' pqualstmts { \l -> let (stss, ss) = $3 in ParComp (l <** ($2:ss)) $1 (reverse stss) }++> lexps :: { ([PExp L],[S]) }+> : lexps ',' texp { let (es, ss) = $1 in ($3 : es, $2 : ss) }+> | texp ',' texp { ([$3,$1], [$2]) }++-----------------------------------------------------------------------------+List comprehensions++> pqualstmts :: { ([[QualStmt L]],[S]) }+> : pqualstmts '|' qualstmts { let { (stss, ss1) = $1;+> (sts, ss2) = $3 }+> in (reverse sts : stss, ss1 ++ [$2] ++ reverse ss2) }+> | qualstmts { let (sts, ss) = $1 in ([reverse sts], reverse ss) }++> qualstmts :: { ([QualStmt L],[S]) }+> : qualstmts ',' qualstmt { let (sts, ss) = $1 in ($3 : sts, $2 : ss) }+> | qualstmt { ([$1],[]) }++> qualstmt :: { QualStmt L }+> : transformqual { $1 }+> | qual { QualStmt (ann $1) $1 }++> transformqual :: { QualStmt L }+> : 'then' trueexp { ThenTrans (nIS $1 <++> ann $2 <** [$1]) $2 }+> | 'then' trueexp 'by' trueexp { ThenBy (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }+> | 'then' 'group' 'by' trueexp { GroupBy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }+> | 'then' 'group' 'using' trueexp { GroupUsing (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }+> | 'then' 'group' 'by' trueexp 'using' trueexp { GroupByUsing (nIS $1 <++> ann $6 <** [$1,$2,$3,$5]) $4 $6 }++> quals :: { ([Stmt L],[S]) }+> : quals ',' qual { let (sts, ss) = $1 in ($3 : sts, $2 : ss) }+> | qual { ([$1],[]) }++> qual :: { Stmt L }+> : pat '<-' trueexp { Generator ($1 <> $3 <** [$2]) $1 $3 }+> | trueexp { Qualifier (ann $1) $1 }+> | 'let' binds { LetStmt (nIS $1 <++> ann $2 <** [$1]) $2 }++-----------------------------------------------------------------------------+Parallel array expressions++See comments on list expressions. Parallel arrays are finite sequences.+This definition also allows empty arrays.++> parr :: { L -> PExp L }+> : { \l -> ParArray l [] }+> | texp { \l -> ParArray l [$1] }+> | lexps { \l -> let (ps,ss) = $1 in ParArray (l <** reverse ss) (reverse ps) }+> | texp '..' exp { \l -> ParArrayFromTo (l <** [$2]) $1 $3 }+> | texp ',' exp '..' exp { \l -> ParArrayFromThenTo (l <** [$2,$4]) $1 $3 $5 }+> | texp '|' pqualstmts { \l -> let (stss, ss) = $3 in ParArrayComp (l <** ($2:ss)) $1 (reverse stss) }++-----------------------------------------------------------------------------+Case alternatives++> altslist :: { ([Alt L],L,[S]) }+> : '{' alts '}' { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3]) }+> | open alts close { let l' = ann . last $ fst $2+> in (fst $2, nIS $1 <++> l', $1:snd $2 ++ [$3]) }+> | '{' '}' {% do { checkEnabled EmptyCase;+> return ([], $1 <^^> $2, [$1, $2]) } }+++> alts :: { ([Alt L],[S]) }+> : optsemis alts1 optsemis { (reverse $ fst $2, $1 ++ snd $2 ++ $3) }++> alts1 :: { ([Alt L],[S]) }+> : alts1 semis alt { ($3 : fst $1, snd $1 ++ $2) }+> | alt { ([$1],[]) }++> alt :: { Alt L }+> : pat ralt optwhere { Alt ($1 <> $2 <+?> (fmap ann) (fst $3) <** snd $3) $1 $2 (fst $3) }++> ralt :: { Rhs L }+> : '->' trueexp { UnGuardedRhs (nIS $1 <++> ann $2 <** [$1]) $2 }+> | gdpats { GuardedRhss (snd $1) (reverse $ fst $1) }++> gdpats :: { ([GuardedRhs L],L) }+> : gdpats gdpat { ($2 : fst $1, snd $1 <++> ann $2) }+> | gdpat { ([$1], ann $1) }++A guard can be a pattern guard if PatternGuards is enabled, hence quals instead of exp0.+> gdpat :: { GuardedRhs L }+> : '|' quals '->' trueexp {% do { checkPatternGuards (fst $2);+> let {l = nIS $1 <++> ann $4 <** ($1:snd $2 ++ [$3])};+> return (GuardedRhs l (reverse (fst $2)) $4) } }++> pat :: { Pat L }+> : exp {% checkPattern $1 }+> | '!' aexp {% checkPattern (BangPat (nIS $1 <++> ann $2 <** [$1]) $2) }++> ifaltslist :: { ([GuardedRhs L], L, [S]) }+> : '{' ifalts '}' { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3]) }+> | open ifalts close { let l' = ann . last $ fst $2+> in (fst $2, nIS $1 <++> l', $1:snd $2 ++ [$3]) }++> ifalts :: { ([GuardedRhs L], [S]) }+> : optsemis ifalts1 optsemis { (reverse $ fst $2, $1 ++ snd $2 ++ $3) }++> ifalts1 :: { ([GuardedRhs L], [S]) }+> : ifalts1 optsemis gdpat { ($3 : fst $1, snd $1 ++ $2) }+> | gdpat { ([$1], []) }++-----------------------------------------------------------------------------+Statement sequences++As per the Report, but with stmt expanded to simplify building the list+without introducing conflicts. This also ensures that the last stmt is+an expression.++TODO: The points can't be added here, must be propagated!++> stmtlist :: { ([Stmt L],L,[S]) }+> : '{' stmts '}' { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3]) }+> | open stmts close { let l' = ann . last $ fst $2+> in (fst $2, nIS $1 <++> l', $1:snd $2 ++ [$3]) }++> stmts :: { ([Stmt L],[S]) }+> : stmt stmts1 { ($1 : fst $2, snd $2) }+> | ';' stmts { (fst $2, $1 : snd $2) }+> | {- empty -} { ([],[]) }++> stmts1 :: { ([Stmt L],[S]) }+> : ';' stmts { (fst $2, $1 : snd $2) }+> | {- empty -} { ([],[]) }++A let statement may bind implicit parameters.+> stmt :: { Stmt L }+> : 'let' binds { LetStmt (nIS $1 <++> ann $2 <** [$1]) $2 }+> | pat '<-' trueexp { Generator ($1 <> $3 <** [$2]) $1 $3 }+> | trueexp { Qualifier (ann $1) $1 }+> | 'rec' stmtlist { let (stms,inf,ss) = $2 in RecStmt (nIS $1 <++> inf <** $1:ss) stms }++-----------------------------------------------------------------------------+Record Field Update/Construction++> fbinds :: { ([PFieldUpdate L],[S]) }+> : fbind ',' fbinds { let (fbs, ss) = $3 in ($1 : fbs, $2 : ss) }+> | fbind { ([$1],[]) }+> | '..' {% do { checkEnabled RecordWildCards `atSrcLoc` (getPointLoc $1);+> return ([FieldWildcard (nIS $1)], []) } }++Puns and wild cards need the respective extensions enabled.++> fbind :: { PFieldUpdate L }+> : qvar '=' exp { FieldUpdate ($1 <>$3 <** [$2]) $1 $3 }+> | qvar {% checkEnabled NamedFieldPuns >> checkQualOrUnQual $1 >>= return . FieldPun (ann $1) }++-----------------------------------------------------------------------------+Implicit parameter bindings - need the ImplicitParameter extension enabled, but the lexer handles that.++> ipbinds :: { ([IPBind L],[S]) }+> : optsemis ipbinds1 optsemis { (reverse (fst $2), reverse $1 ++ snd $2 ++ reverse $3) }++> ipbinds1 :: { ([IPBind L],[S]) }+> : ipbinds1 semis ipbind { ($3 : fst $1, snd $1 ++ reverse $2) }+> | ipbind { ([$1],[]) }++> ipbind :: { IPBind L }+> : ivar '=' trueexp { IPBind ($1 <> $3 <** [$2]) $1 $3 }++-----------------------------------------------------------------------------+Variables, Constructors and Operators.++> gcon :: { PExp L }+> : sysdcon { $1 }+> | qcon { Con (ann $1) $1 }++> gcon_nolist :: { PExp L }+> : sysdcon_nolist { $1 }+> | qcon { Con (ann $1) $1 }++> sysdcon_nolist :: { PExp L }+> : '(' ')' { p_unit_con ($1 <^^> $2 <** [$1,$2]) }+> | '(#' '#)' { p_unboxed_singleton_con ($1 <^^> $2 <** [$1,$2]) }+> | '(#' commas '#)' { p_tuple_con ($1 <^^> $3 <** $1:reverse ($3:$2)) Unboxed (length $2) }+> | '(' commas ')' { p_tuple_con ($1 <^^> $3 <** $1:reverse ($3:$2)) Boxed (length $2) }+++> sysdcon :: { PExp L }+> : '[' ']' { List ($1 <^^> $2 <** [$1,$2]) [] }+> | sysdcon_nolist { $1 }++> var :: { Name L }+> : varid { $1 }+> | '(' varsym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> var_no_safety :: { Name L }+> : varid_no_safety { $1 }+> | '(' varsym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qvar :: { QName L }+> : qvarid { $1 }+> | '(' qvarsym ')' { updateQNameLoc ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }++Implicit parameter+> ivar :: { IPName L }+> : ivarid { $1 }++> con :: { Name L }+> : conid { $1 }+> | '(' consym ')' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> con_list :: { ([S], [Name L]) }+> : con { ([], [$1]) }+> | con ',' con_list { let (ss, cs) = $3+> in ($2 : ss, $1 :cs) }++> qcon :: { QName L }+> : qconid { $1 }+> | '(' gconsym ')' { updateQNameLoc ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }++> varop :: { Name L }+> : varsym { $1 }+> | '`' varid '`' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qvarop :: { QName L }+> : qvarsym { $1 }+> | '`' qvarid '`' { updateQNameLoc ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }++> qvaropm :: { QName L }+> : qvarsymm { $1 }+> | '`' qvarid '`' { updateQNameLoc ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }++> conop :: { Name L }+> : consym { $1 }+> | '`' conid '`' { fmap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qconop :: { QName L }+> : gconsym { $1 }+> | '`' qconid '`' { updateQNameLoc ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }++> op :: { Op L }+> : varop { VarOp (ann $1) $1 }+> | conop { ConOp (ann $1) $1 }++> qop :: { QOp L }+> : qvarop { QVarOp (ann $1) $1 }+> | qconop { QConOp (ann $1) $1 }++> qopm :: { QOp L }+> : qvaropm { QVarOp (ann $1) $1 }+> | qconop { QConOp (ann $1) $1 }++> gconsym :: { QName L }+> : ':' { list_cons_name (nIS $1) }+> | qconsym { $1 }++> overloaded_label :: { PExp L }+> : LABELVARID { let Loc l (LabelVarId v) = $1 in OverloadedLabel+> (nIS l) v }++-----------------------------------------------------------------------------+Identifiers and Symbols++> qvarid :: { QName L }+> : varid { UnQual (ann $1) $1 }+> | QVARID { let {Loc l (QVarId q) = $1; nis = nIS l}+> in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) }+> | '_' { hole_name (nIS $1) }++> varid_no_safety :: { Name L }+> : VARID { let Loc l (VarId v) = $1 in Ident (nIS l) v }+> | 'as' { as_name (nIS $1) }+> | 'qualified' { qualified_name (nIS $1) }+> | 'hiding' { hiding_name (nIS $1) }+> | 'export' { export_name (nIS $1) }+> | 'stdcall' { stdcall_name (nIS $1) }+> | 'ccall' { ccall_name (nIS $1) }+> | 'cplusplus' { cplusplus_name (nIS $1) }+> | 'dotnet' { dotnet_name (nIS $1) }+> | 'jvm' { jvm_name (nIS $1) }+> | 'js' { js_name (nIS $1) }+> | 'javascript' { javascript_name (nIS $1) }+> | 'capi' { capi_name (nIS $1) }+> | 'stock' { stock_name (nIS $1) }+> | 'anyclass' { anyclass_name (nIS $1) }++> varid :: { Name L }+> : varid_no_safety { $1 }+> | 'safe' { safe_name (nIS $1) }+> | 'unsafe' { unsafe_name (nIS $1) }+> | 'interruptible' { interruptible_name (nIS $1) }+> | 'threadsafe' { threadsafe_name (nIS $1) }+> | 'forall' { forall_name (nIS $1) }+> | 'family' { family_name (nIS $1) }+> | 'role' { role_name (nIS $1) }+++Implicit parameter+> ivarid :: { IPName L }+> : IDUPID { let Loc l (IDupVarId i) = $1 in IPDup (nIS l) i }+> | ILINID { let Loc l (ILinVarId i) = $1 in IPLin (nIS l) i }++> qconid :: { QName L }+> : conid { UnQual (ann $1) $1 }+> | QCONID { let {Loc l (QConId q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) }++> conid :: { Name L }+> : CONID { let Loc l (ConId c) = $1 in Ident (nIS l) c }++> qconsym :: { QName L }+> : consym { UnQual (ann $1) $1 }+> | QCONSYM { let {Loc l (QConSym q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) }++> consym :: { Name L }+> : CONSYM { let Loc l (ConSym c) = $1 in Symbol (nIS l) c }++> qvarsym :: { QName L }+> : qvarsym_('*') { $1 }++> qvarsym_(ostar) :: { QName L }+> : varsym_(ostar) { UnQual (ann $1) $1 }+> | qvarsym1 { $1 }++> qvarsymm :: { QName L }+> : varsymm { UnQual (ann $1) $1 }+> | qvarsym1 { $1 }++> varsym :: { Name L }+> : varsym_('*') { $1 }++> varsym_(ostar) :: { Name L }+> : varsymm_(ostar) { $1 }+> | '-' { minus_name (nIS $1) }++> varsymm :: { Name L }+> : varsymm_('*') { $1 }++> varsymm_(ostar) :: { Name L } -- varsym not including '-'+> : VARSYM { let Loc l (VarSym v) = $1 in Symbol (nIS l) v }+> | '!' { bang_name (nIS $1) }+> | '.' { dot_name (nIS $1) }+> | ostar { star_name (nIS $1) }++> qvarsym1 :: { QName L }+> : QVARSYM { let {Loc l (QVarSym q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) }++> literal :: { Literal L }+> : INT { let Loc l (IntTok (i,raw)) = $1 in Int (nIS l) i raw }+> | CHAR { let Loc l (Character (c,raw)) = $1 in Char (nIS l) c raw }+> | RATIONAL { let Loc l (FloatTok (r,raw)) = $1 in Frac (nIS l) r raw }+> | STRING { let Loc l (StringTok (s,raw)) = $1 in String (nIS l) s raw }+> | PRIMINT { let Loc l (IntTokHash (i,raw)) = $1 in PrimInt (nIS l) i raw }+> | PRIMWORD { let Loc l (WordTokHash (w,raw)) = $1 in PrimWord (nIS l) w raw }+> | PRIMFLOAT { let Loc l (FloatTokHash (f,raw)) = $1 in PrimFloat (nIS l) f raw }+> | PRIMDOUBLE { let Loc l (DoubleTokHash (d,raw)) = $1 in PrimDouble (nIS l) d raw }+> | PRIMCHAR { let Loc l (CharacterHash (c,raw)) = $1 in PrimChar (nIS l) c raw }+> | PRIMSTRING { let Loc l (StringHash (s,raw)) = $1 in PrimString (nIS l) s raw }++-----------------------------------------------------------------------------+Layout++> open :: { S } : {% pushCurrentContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x) (return x) -} }++> close :: { S }+> : vccurly { $1 {- >>= \x -> trace (show x ++ show x ++ show x) (return x) -} } -- context popped in lexer.+> | error {% popContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x ++ show x) (return x) -} }++-----------------------------------------------------------------------------+Pattern Synonyms+-- Pattern synonyms++> pat_syn :: { Decl L }+> : pattern_synonym_decl {% checkEnabled PatternSynonyms >> return $1 }++-- Glasgow extension: pattern synonyms+> pattern_synonym_decl :: { Decl L }+> : 'pattern' pattern_synonym_lhs '=' pat+> { let l = nIS $1 <++> ann $4 <** [$1,$3]+> in PatSyn l $2 $4 ImplicitBidirectional+> }+> | 'pattern' pattern_synonym_lhs '<-' pat+> { let l = nIS $1 <++> ann $4 <** [$1,$3]+> in PatSyn l $2 $4 Unidirectional+> }+> | 'pattern' pattern_synonym_lhs '<-' pat where_decls+> { let l = nIS $1 <++> ann $4 <** [$1, $3]+> in PatSyn l $2 $4 $5}++>+> pattern_synonym_lhs :: { Pat L }+> : con vars0 { let l = case $2 of+> [] -> ann $1+> (_:_) -> ann $1 <++> (ann $ last $2)+> in PApp l (UnQual (ann $1) $1) $2 }+> | varid qconsym varid { PInfixApp (ann $1 <++> ann $3) (PVar (ann $1) $1) $2 (PVar (ann $3) $3) }+> | con '{' commavars '}' { let { (ss, ns) = $3 ;+> qnames = (map (\n -> UnQual (ann n) n) ns) }+> in PRec (ann $1 <++> nIS $4 <** ($2 : ss ++ [$4]))+> (UnQual (ann $1) $1) (map (\q -> PFieldPun (ann q) q) qnames) }+>+> vars0 :: { [Pat L] }+> : {- empty -} { [] }+> | varid vars0 { PVar (ann $1) $1 : $2 }++> commavars :: { ([S], [Name L]) }+> : varid { ([], [$1] ) }+> | varid ',' commavars { let (ss, ns) = $3 in ($2 : ss, $1 : ns) }++> where_decls :: { PatternSynDirection L }+> : 'where' '{' decls '}' {% checkExplicitPatSyn $1 $2 $3 $4 }+> | 'where' open decls close {% checkExplicitPatSyn $1 $2 $3 $4 }++> pattern_synonym_sig :: { Decl L }+> : 'pattern' con_list '::' pstype+> {% do { checkEnabled PatternSynonyms ;+> let {(qtvs, ps, prov, req_vars, req, ty) = $4} ;+> let {sig = PatSynSig (nIS $1 <++> ann ty <** [$1] ++ fst $2 ++ [$3] ++ ps) (snd $2) qtvs prov req_vars req ty} ;+> return sig } }++> pstype :: { (Maybe [TyVarBind L], [S], Maybe (Context L), Maybe [TyVarBind L]+> , Maybe (Context L), Type L )}+> : 'forall' ktyvars '.' pstype+> { let (qtvs, ps, prov, req_vars, req, ty) = $4+> in (Just (reverse (fst $2) ++ fromMaybe [] qtvs), ($1 : $3 : ps), prov, req_vars, req, ty) }+> | context context type+> {% do { c1 <- checkContext (Just $1) ;+> c2 <- checkContext (Just $2) ;+> t <- checkType $3 ;+> return $ (Nothing, [], c1, Nothing, c2, t) }}+> | context 'forall' ktyvars '.' context type+> {% do { c1 <- checkContext (Just $1) ;+> c2 <- checkContext (Just $5) ;+> t <- checkType $6 ;+> return $ (Nothing, [], c1, Just (reverse (fst $3)), c2, t) }}+> | context type+> {% do { c1 <- checkContext (Just $1);+> t <- checkType $2;+> return (Nothing, [], c1, Nothing, Nothing, t) } }+> | type+> {% checkType $1 >>= \t -> return (Nothing, [], Nothing, Nothing, Nothing, t) }++-----------------------------------------------------------------------------+Deriving strategies++> deriv_strategy_no_via :: { DerivStrategy L }+> : 'stock' {% do { checkEnabled DerivingStrategies+> ; return (DerivStock (nIS $1)) } }+> | 'anyclass' {% do { checkEnabled DerivingStrategies+> ; checkEnabled DeriveAnyClass+> ; return (DerivAnyclass (nIS $1)) } }+> | 'newtype' {% do { checkEnabled DerivingStrategies+> ; checkEnabled GeneralizedNewtypeDeriving+> ; return (DerivNewtype (nIS $1)) } }++> deriv_strategy_via :: { DerivStrategy L }+> : 'via' truedtype {% do { checkEnabled DerivingVia+> ; return (DerivVia (nIS $1) $2) } }++> deriv_standalone_strategy :: { Maybe (DerivStrategy L) }+> : deriv_strategy_no_via { Just $1 }+> | deriv_strategy_via { Just $1 }+> | {- empty -} { Nothing }++-----------------------------------------------------------------------------+Miscellaneous (mostly renamings)++> modid :: { ModuleName L }+> : CONID { let Loc l (ConId n) = $1 in ModuleName (nIS l) n }+> | QCONID { let Loc l (QConId n) = $1 in ModuleName (nIS l) (fst n ++ '.':snd n) }++> tyconorcls :: { Name L }+> : con { $1 }++> qtyconorcls :: { QName L }+> : qcon { $1 }++> tyvar :: { Name L }+> : tyvarid { $1 }++> tyvarid :: { Name L }+> : varid_no_safety { $1 }+> | 'safe' { safe_name (nIS $1) }+> | 'unsafe' { unsafe_name (nIS $1) }+> | 'threadsafe' { threadsafe_name (nIS $1) }+ | 'forall' { forall_name (nIS $1) }+ | 'family' { family_name (nIS $1) }++> qtyvarop_(ostar) :: { QName L }+> qtyvarop_ : '`' tyvar '`' { UnQual ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }+> | tyvarsym_(ostar) { UnQual (ann $1) $1 }++> tyvarsym_(ostar) :: { Name L }+> tyvarsym : VARSYM { let Loc l (VarSym x) = $1 in Symbol (nIS l) x }+> | '-' { Symbol (nIS $1) "-" }+> | ostar { Symbol (nIS $1) "*" }++> impdeclsblock :: { ([ImportDecl L],[S],L) }+> : '{' optsemis impdecls optsemis '}' { let (ids, ss) = $3 in (ids, $1 : reverse $2 ++ ss ++ reverse $4 ++ [$5], $1 <^^> $5) }+> | open optsemis impdecls optsemis close { let (ids, ss) = $3 in (ids, $1 : reverse $2 ++ ss ++ reverse $4 ++ [$5], $1 <^^> $5) }++Exported as partial parsers:++> moduletopname :: { (([ModulePragma L], [S], L), Maybe (ModuleName L)) }+> : toppragmas 'module' modid { ($1, Just $3) }+> | toppragmas {- empty -} { ($1, Nothing) }++> moduletophead :: { (([ModulePragma L], [S], L), Maybe (ModuleHead L)) }+> : toppragmas optmodulehead { ($1, $2) }++> moduletopimps :: { (([ModulePragma L], [S], L), Maybe (ModuleHead L), Maybe ([ImportDecl L],[S],L)) }+> : toppragmas optmodulehead impdeclsblock { ($1, $2, Just $3) }+> | toppragmas optmodulehead {- empty -} { ($1, $2, Nothing) }++-----------------------------------------------------------------------------++> {++> type L = SrcSpanInfo -- just for convenience+> type S = SrcSpan++> parseError :: Loc Token -> P a+> parseError t = fail $ "Parse error: " ++ showToken (unLoc t)++> (<>) :: (Annotated a, Annotated b) => a SrcSpanInfo -> b SrcSpanInfo -> SrcSpanInfo+> a <> b = ann a <++> ann b+>+> infixl 6 <>++> nIS = noInfoSpan+> iS = infoSpan++> mparseDecl :: P (Decl SrcSpanInfo)+> mparseDecl = do+> (is, ds, _, _) <- mparseDeclAux+> when (not $ null is) $+> fail $ "Expected single declaration, found import declaration"+> checkSingleDecl ds > }
@@ -1,1066 +1,47 @@-{-# OPTIONS_HADDOCK hide #-}--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Exts.Annotated.Lexer--- Copyright : (c) The GHC Team, 1997-2000--- (c) Niklas Broberg, 2004-2009--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@chalmers.se--- Stability : stable--- Portability : portable------ Lexer for Haskell, with some extensions.------------------------------------------------------------------------------------- ToDo: Introduce different tokens for decimal, octal and hexadecimal (?)--- ToDo: FloatTok should have three parts (integer part, fraction, exponent) (?)--- ToDo: Use a lexical analyser generator (lx?)--module Language.Haskell.Exts.Lexer (Token(..), lexer) where--import Language.Haskell.Exts.ParseMonad-import Language.Haskell.Exts.SrcLoc-import Language.Haskell.Exts.Comments-import Language.Haskell.Exts.Extension-import Language.Haskell.Exts.ExtScheme--import Data.Char-import Data.Ratio-import Control.Monad (when)---- import Debug.Trace (trace)--data Token- = VarId String- | QVarId (String,String)- | IDupVarId (String) -- duplicable implicit parameter- | ILinVarId (String) -- linear implicit parameter- | ConId String- | QConId (String,String)- | DVarId [String] -- to enable varid's with '-' in them- | VarSym String- | ConSym String- | QVarSym (String,String)- | QConSym (String,String)- | IntTok (Integer, String)- | FloatTok (Rational, String)- | Character (Char, String)- | StringTok (String, String)- | IntTokHash (Integer, String) -- 1#- | WordTokHash (Integer, String) -- 1##- | FloatTokHash (Rational, String) -- 1.0#- | DoubleTokHash (Rational, String) -- 1.0##- | CharacterHash (Char, String) -- c#- | StringHash (String, String) -- "Hello world!"#---- Symbols-- | LeftParen- | RightParen- | LeftHashParen- | RightHashParen- | LeftCurlyBar- | RightCurlyBar- | SemiColon- | LeftCurly- | RightCurly- | VRightCurly -- a virtual close brace- | LeftSquare- | RightSquare- | Comma- | Underscore- | BackQuote---- Reserved operators-- | Dot -- reserved for use with 'forall x . x'- | DotDot- | Colon- | DoubleColon- | Equals- | Backslash- | Bar- | LeftArrow- | RightArrow- | At- | Tilde- | DoubleArrow- | Minus- | Exclamation- | Star- | LeftArrowTail -- >-- | RightArrowTail -- -<- | LeftDblArrowTail -- >>-- | RightDblArrowTail -- -<<---- Template Haskell- | THExpQuote -- [| or [e|- | THPatQuote -- [p|- | THDecQuote -- [d|- | THTypQuote -- [t|- | THCloseQuote -- |]- | THIdEscape (String) -- dollar x- | THParenEscape -- dollar (- | THVarQuote -- 'x (but without the x)- | THTyQuote -- ''T (but without the T)- | THQuasiQuote (String,String) -- [$...|...]---- HaRP- | RPGuardOpen -- (|- | RPGuardClose -- |)- | RPCAt -- @:---- Hsx- | XCodeTagOpen -- <%- | XCodeTagClose -- %>- | XStdTagOpen -- <- | XStdTagClose -- >- | XCloseTagOpen -- </- | XEmptyTagClose -- />- | XPCDATA String- | XRPatOpen -- <[- | XRPatClose -- ]>---- Pragmas-- | PragmaEnd -- #-}--- | PragmaUnknown (String,String) -- Any pragma not recognized- | RULES- | INLINE Bool- | SPECIALISE- | SPECIALISE_INLINE Bool- | SOURCE- | DEPRECATED- | WARNING- | SCC- | GENERATED- | CORE- | UNPACK- | OPTIONS (Maybe String,String)- | CFILES String- | LANGUAGE- | INCLUDE String--- These are not yet implemented--- | LINE---- Reserved Ids-- | KW_As- | KW_By -- transform list comprehensions- | KW_Case- | KW_Class- | KW_Data- | KW_Default- | KW_Deriving- | KW_Do- | KW_MDo- | KW_Else- | KW_Family -- indexed type families- | KW_Forall -- universal/existential types- | KW_Group -- transform list comprehensions- | KW_Hiding- | KW_If- | KW_Import- | KW_In- | KW_Infix- | KW_InfixL- | KW_InfixR- | KW_Instance- | KW_Let- | KW_Module- | KW_NewType- | KW_Of- | KW_Proc -- arrows- | KW_Rec -- arrows- | KW_Then- | KW_Type- | KW_Using -- transform list comprehensions- | KW_Where- | KW_Qualified-- -- FFI- | KW_Foreign- | KW_Export- | KW_Safe- | KW_Unsafe- | KW_Threadsafe- | KW_StdCall- | KW_CCall-- | EOF- deriving (Eq,Show)--reserved_ops :: [(String,(Token, Maybe ExtScheme))]-reserved_ops = [- ( "..", (DotDot, Nothing) ),- ( ":", (Colon, Nothing) ),- ( "::", (DoubleColon, Nothing) ),- ( "=", (Equals, Nothing) ),- ( "\\", (Backslash, Nothing) ),- ( "|", (Bar, Nothing) ),- ( "<-", (LeftArrow, Nothing) ),- ( "->", (RightArrow, Nothing) ),- ( "@", (At, Nothing) ),- ( "@:", (RPCAt, Just (Any [RegularPatterns])) ),- ( "~", (Tilde, Nothing) ),- ( "=>", (DoubleArrow, Nothing) ),- ( "*", (Star, Just (Any [KindSignatures])) ),- -- Arrows notation- ( "-<", (LeftArrowTail, Just (Any [Arrows])) ),- ( ">-", (RightArrowTail, Just (Any [Arrows])) ),- ( "-<<", (LeftDblArrowTail, Just (Any [Arrows])) ),- ( ">>-", (RightDblArrowTail, Just (Any [Arrows])) )- ]--special_varops :: [(String,(Token, Maybe ExtScheme))]-special_varops = [- -- the dot is only a special symbol together with forall, but can still be used as function composition- ( ".", (Dot, Just (Any [ExplicitForall, ExistentialQuantification])) ),- ( "-", (Minus, Nothing) ),- ( "!", (Exclamation, Nothing) )- ]--reserved_ids :: [(String,(Token, Maybe ExtScheme))]-reserved_ids = [- ( "_", (Underscore, Nothing) ),- ( "by", (KW_By, Just (Any [TransformListComp])) ),- ( "case", (KW_Case, Nothing) ),- ( "class", (KW_Class, Nothing) ),- ( "data", (KW_Data, Nothing) ),- ( "default", (KW_Default, Nothing) ),- ( "deriving", (KW_Deriving, Nothing) ),- ( "do", (KW_Do, Nothing) ),- ( "else", (KW_Else, Nothing) ),- ( "family", (KW_Family, Just (Any [TypeFamilies])) ), -- indexed type families- ( "forall", (KW_Forall, Just (Any [ExplicitForall, ExistentialQuantification])) ), -- universal/existential quantification- ( "group", (KW_Group, Just (Any [TransformListComp])) ),- ( "if", (KW_If, Nothing) ),- ( "import", (KW_Import, Nothing) ),- ( "in", (KW_In, Nothing) ),- ( "infix", (KW_Infix, Nothing) ),- ( "infixl", (KW_InfixL, Nothing) ),- ( "infixr", (KW_InfixR, Nothing) ),- ( "instance", (KW_Instance, Nothing) ),- ( "let", (KW_Let, Nothing) ),- ( "mdo", (KW_MDo, Just (Any [RecursiveDo])) ),- ( "module", (KW_Module, Nothing) ),- ( "newtype", (KW_NewType, Nothing) ),- ( "of", (KW_Of, Nothing) ),- ( "proc", (KW_Proc, Just (Any [Arrows])) ),- ( "rec", (KW_Rec, Just (Any [Arrows])) ),- ( "then", (KW_Then, Nothing) ),- ( "type", (KW_Type, Nothing) ),- ( "using", (KW_Using, Just (Any [TransformListComp])) ),- ( "where", (KW_Where, Nothing) ),---- FFI- ( "foreign", (KW_Foreign, Just (Any [ForeignFunctionInterface])) )- ]---special_varids :: [(String,(Token, Maybe ExtScheme))]-special_varids = [- ( "as", (KW_As, Nothing) ),- ( "qualified", (KW_Qualified, Nothing) ),- ( "hiding", (KW_Hiding, Nothing) ),---- FFI- ( "export", (KW_Export, Just (Any [ForeignFunctionInterface])) ),- ( "safe", (KW_Safe, Just (Any [ForeignFunctionInterface])) ),- ( "unsafe", (KW_Unsafe, Just (Any [ForeignFunctionInterface])) ),- ( "threadsafe", (KW_Threadsafe, Just (Any [ForeignFunctionInterface])) ),- ( "stdcall", (KW_StdCall, Just (Any [ForeignFunctionInterface])) ),- ( "ccall", (KW_CCall, Just (Any [ForeignFunctionInterface])) )- ]--pragmas :: [(String,Token)]-pragmas = [- ( "rules", RULES ),- ( "inline", INLINE True ),- ( "noinline", INLINE False ),- ( "notinline", INLINE False ),- ( "specialise", SPECIALISE ),- ( "specialize", SPECIALISE ),- ( "source", SOURCE ),- ( "deprecated", DEPRECATED ),- ( "warning", WARNING ),- ( "scc", SCC ),- ( "generated", GENERATED ),- ( "core", CORE ),- ( "unpack", UNPACK ),- ( "language", LANGUAGE ),- ( "options", OPTIONS undefined ), -- we'll tweak it before use - promise!- ( "cfiles", CFILES undefined ), -- same here...- ( "include", INCLUDE undefined ) -- ...and here!- ]--isIdent, isHSymbol :: Char -> Bool-isIdent c = isAlpha c || isDigit c || c == '\'' || c == '_'--isHSymbol c = c `elem` ":!#%&*./?@\\-" || ((isSymbol c || isPunctuation c) && not (c `elem` "(),;[]`{}_\"'"))--matchChar :: Char -> String -> Lex a ()-matchChar c msg = do- s <- getInput- if null s || head s /= c then fail msg else discard 1---- The top-level lexer.--- We need to know whether we are at the beginning of the line to decide--- whether to insert layout tokens.--lexer :: (Loc Token -> P a) -> P a-lexer = runL topLexer--topLexer :: Lex a (Loc Token)-topLexer = do- b <- pullCtxtFlag- if b then -- trace (show cf ++ ": " ++ show VRightCurly) $- setBOL >> getSrcLocL >>= \l -> return (Loc (mkSrcSpan l l) VRightCurly) -- the lex context state flags that we must do an empty {} - UGLY- else do- bol <- checkBOL- (bol, ws) <- lexWhiteSpace bol- -- take care of whitespace in PCDATA- ec <- getExtContext- case ec of- -- if there was no linebreak, and we are lexing PCDATA,- -- then we want to care about the whitespace.- -- We don't bother to test for XmlSyntax, since we- -- couldn't end up in ChildCtxt otherwise.- Just ChildCtxt | not bol && ws -> getSrcLocL >>= \l -> return $ Loc (mkSrcSpan l l) $ XPCDATA " "- _ -> do startToken- sl <- getSrcLocL- t <- if bol then lexBOL -- >>= \t -> trace ("BOL: " ++ show t) (return t)- else lexToken -- >>= \t -> trace (show t) (return t)- el <- getSrcLocL- return $ Loc (mkSrcSpan sl el) t--lexWhiteSpace :: Bool -> Lex a (Bool, Bool)-lexWhiteSpace bol = do- s <- getInput- case s of- -- If we find a recognised pragma, we don't want to treat it as a comment.- '{':'-':'#':rest | isRecognisedPragma rest -> return (bol, False)- '{':'-':_ -> do- loc <- getSrcLocL- discard 2- (bol, c) <- lexNestedComment bol ""- loc2 <- getSrcLocL- pushComment $ Comment True (mkSrcSpan loc loc2) (reverse c)- (bol, _) <- lexWhiteSpace bol- return (bol, True)- '-':'-':s | all (== '-') (takeWhile isHSymbol s) -> do- loc <- getSrcLocL- discard 2- dashes <- lexWhile (== '-')- rest <- lexWhile (/= '\n')- s' <- getInput- loc2 <- getSrcLocL- let com = Comment False (mkSrcSpan loc loc2) $ dashes ++ rest- case s' of- [] -> pushComment com >> return (False, True)- _ -> do- pushComment com- lexNewline- lexWhiteSpace True- return (True, True)- '\n':_ -> do- lexNewline- lexWhiteSpace True- return (True, True)- '\t':_ -> do- lexTab- (bol, _) <- lexWhiteSpace bol- return (bol, True)- c:_ | isSpace c -> do- discard 1- (bol, _) <- lexWhiteSpace bol- return (bol, True)- _ -> return (bol, False)--isRecognisedPragma :: String -> Bool-isRecognisedPragma str = let pragma = map toLower . takeWhile isAlphaNum . dropWhile isSpace $ str- in case lookup pragma pragmas of- Nothing -> False- _ -> True--lexNestedComment :: Bool -> String -> Lex a (Bool, String)-lexNestedComment bol str = do- s <- getInput- case s of- '-':'}':_ -> discard 2 >> return (bol, str)- '{':'-':_ -> do- discard 2- (bol, c) <- lexNestedComment bol ("-{" ++ str) -- rest of the subcomment- lexNestedComment bol ("}-" ++ c ) -- rest of this comment- '\t':_ -> lexTab >> lexNestedComment bol ('\t':str)- '\n':_ -> lexNewline >> lexNestedComment True ('\n':str)- c:_ -> discard 1 >> lexNestedComment bol (c:str)- [] -> fail "Unterminated nested comment"---- When we are lexing the first token of a line, check whether we need to--- insert virtual semicolons or close braces due to layout.--lexBOL :: Lex a Token-lexBOL = do- pos <- getOffside- -- trace ("Off: " ++ (show pos)) $ do- case pos of- LT -> do- -- trace "layout: inserting '}'\n" $- -- Set col to 0, indicating that we're still at the- -- beginning of the line, in case we need a semi-colon too.- -- Also pop the context here, so that we don't insert- -- another close brace before the parser can pop it.- setBOL- popContextL "lexBOL"- return VRightCurly- EQ ->- -- trace "layout: inserting ';'\n" $- return SemiColon- GT -> lexToken--lexToken :: Lex a Token-lexToken = do- ec <- getExtContext- -- we don't bother to check XmlSyntax since we couldn't- -- have ended up in a non-Nothing context if it wasn't- -- enabled.- case ec of- Just HarpCtxt -> lexHarpToken- Just TagCtxt -> lexTagCtxt- Just CloseTagCtxt -> lexCloseTagCtxt- Just ChildCtxt -> lexChildCtxt- Just CodeTagCtxt -> lexCodeTagCtxt- _ -> lexStdToken---lexChildCtxt :: Lex a Token-lexChildCtxt = do- -- if we ever end up here, then XmlSyntax must be on.- s <- getInput- case s of- '<':'%':_ -> do discard 2- pushExtContextL CodeTagCtxt- return XCodeTagOpen- '<':'/':_ -> do discard 2- popExtContextL "lexChildCtxt"- pushExtContextL CloseTagCtxt- return XCloseTagOpen- '<':'[':_ -> do discard 2- pushExtContextL HarpCtxt- return XRPatOpen- '<':_ -> do discard 1- pushExtContextL TagCtxt- return XStdTagOpen- _ -> lexPCDATA---lexPCDATA :: Lex a Token-lexPCDATA = do- -- if we ever end up here, then XmlSyntax must be on.- s <- getInput- case s of- [] -> return EOF- _ -> case s of- '\n':_ -> do- x <- lexNewline >> lexPCDATA- case x of- XPCDATA p -> return $ XPCDATA $ '\n':p- EOF -> return EOF- '<':_ -> return $ XPCDATA ""- _ -> do let pcd = takeWhile (\c -> not $ elem c "<\n") s- l = length pcd- discard l- x <- lexPCDATA- case x of- XPCDATA pcd' -> return $ XPCDATA $ pcd ++ pcd'- EOF -> return EOF---lexCodeTagCtxt :: Lex a Token-lexCodeTagCtxt = do- -- if we ever end up here, then XmlSyntax must be on.- s <- getInput- case s of- '%':'>':_ -> do discard 2- popExtContextL "lexCodeTagContext"- return XCodeTagClose- _ -> lexStdToken--lexCloseTagCtxt :: Lex a Token-lexCloseTagCtxt = do- -- if we ever end up here, then XmlSyntax must be on.- s <- getInput- case s of- '>':_ -> do discard 1- popExtContextL "lexCloseTagCtxt"- return XStdTagClose- _ -> lexStdToken--lexTagCtxt :: Lex a Token-lexTagCtxt = do- -- if we ever end up here, then XmlSyntax must be on.- s <- getInput- case s of- '/':'>':_ -> do discard 2- popExtContextL "lexTagCtxt: Empty tag"- return XEmptyTagClose- '>':_ -> do discard 1- popExtContextL "lexTagCtxt: Standard tag"- pushExtContextL ChildCtxt- return XStdTagClose- _ -> lexStdToken--lexHarpToken :: Lex a Token-lexHarpToken = do- -- if we ever end up here, then RegularPatterns must be on.- s <- getInput- case s of- ']':'>':_ -> do discard 2- popExtContextL "lexHarpToken"- return XRPatClose- _ -> lexStdToken--lexStdToken :: Lex a Token-lexStdToken = do- s <- getInput- exts <- getExtensionsL- case s of- [] -> return EOF-- '0':c:d:_ | toLower c == 'o' && isOctDigit d -> do- discard 2- (n, str) <- lexOctal- return (IntTok (n, '0':c:str))- | toLower c == 'x' && isHexDigit d -> do- discard 2- (n, str) <- lexHexadecimal- return (IntTok (n, '0':c:str))-- -- implicit parameters- '?':c:_ | isLower c && ImplicitParams `elem` exts -> do- discard 1- id <- lexWhile isIdent- return $ IDupVarId id-- '%':c:_ | isLower c && ImplicitParams `elem` exts -> do- discard 1- id <- lexWhile isIdent- return $ ILinVarId id- -- end implicit parameters-- -- harp- '(':'|':c:_ | isHSymbol c -> discard 1 >> return LeftParen- '(':'|':_ | RegularPatterns `elem` exts ->- do discard 2- return RPGuardOpen- '|':')':_ | RegularPatterns `elem` exts ->- do discard 2- return RPGuardClose- {- This is handled by the reserved_ops above.- '@':':':_ | RegularPatterns `elem` exts ->- do discard 2- return RPCAt -}-- -- template haskell- '[':'|':_ | TemplateHaskell `elem` exts -> do- discard 2- return $ THExpQuote-- '[':c:'|':_ | c == 'e' && TemplateHaskell `elem` exts -> do- discard 3- return $ THExpQuote- | c == 'p' && TemplateHaskell `elem` exts -> do- discard 3- return THPatQuote- | c == 'd' && TemplateHaskell `elem` exts -> do- discard 3- return THDecQuote- | c == 't' && TemplateHaskell `elem` exts -> do- discard 3- return THTypQuote- '[':'$':c:_ | isLower c && QuasiQuotes `elem` exts ->- discard 2 >> lexQuasiQuote-- '|':']':_ | TemplateHaskell `elem` exts -> do- discard 2- return THCloseQuote-- '$':c:_ | isLower c && TemplateHaskell `elem` exts -> do- discard 1- id <- lexWhile isIdent- return $ THIdEscape id- | c == '(' && TemplateHaskell `elem` exts -> do- discard 2- return THParenEscape- -- end template haskell-- -- hsx- '<':'%':_ | XmlSyntax `elem` exts -> do- discard 2- pushExtContextL CodeTagCtxt- return XCodeTagOpen- '<':c:_ | isAlpha c && XmlSyntax `elem` exts -> do- discard 1- pushExtContextL TagCtxt- return XStdTagOpen- -- end hsx-- '(':'#':_ | UnboxedTuples `elem` exts -> do discard 2 >> return LeftHashParen-- '#':')':_ | UnboxedTuples `elem` exts -> do discard 2 >> return RightHashParen-- '{':'|':_ | Generics `elem` exts -> do discard 2 >> return LeftCurlyBar-- '|':'}':_ | Generics `elem` exts -> do discard 2 >> return RightCurlyBar-- -- pragmas-- '{':'-':'#':_ -> do discard 3 >> lexPragmaStart-- '#':'-':'}':_ -> do discard 3 >> return PragmaEnd-- c:_ | isDigit c -> lexDecimalOrFloat-- | isUpper c -> lexConIdOrQual ""-- | isLower c || c == '_' -> do- idents <- lexIdents- case idents of- [ident] -> case lookup ident (reserved_ids ++ special_varids) of- Just (keyword, scheme) -> do- -- check if an extension keyword is enabled- if isEnabled scheme exts- then flagKW keyword >> return keyword- else return $ VarId ident- Nothing -> return $ VarId ident- _ -> return $ DVarId idents-- | isHSymbol c -> do- sym <- lexWhile isHSymbol- return $ case lookup sym (reserved_ops ++ special_varops) of- Just (t , scheme) ->- -- check if an extension op is enabled- if isEnabled scheme exts- then t- else case c of- ':' -> ConSym sym- _ -> VarSym sym- Nothing -> case c of- ':' -> ConSym sym- _ -> VarSym sym-- | otherwise -> do- discard 1- case c of-- -- First the special symbols- '(' -> return LeftParen- ')' -> return RightParen- ',' -> return Comma- ';' -> return SemiColon- '[' -> return LeftSquare- ']' -> return RightSquare- '`' -> return BackQuote- '{' -> do- pushContextL NoLayout- return LeftCurly- '}' -> do- popContextL "lexStdToken"- return RightCurly-- '\'' -> lexCharacter- '"' -> lexString-- _ -> fail ("Illegal character \'" ++ show c ++ "\'\n")-- where lexIdents :: Lex a [String]- lexIdents = do- ident <- lexWhile isIdent- s <- getInput- exts <- getExtensionsL- case s of- -- This is the only way we can get more than one ident in the list- -- and it requires XmlSyntax to be on.- '-':c:_ | XmlSyntax `elem` exts && isAlpha c -> do- discard 1- idents <- lexIdents- return $ ident : idents- '#':_ | MagicHash `elem` exts -> do- discard 1- return [ident ++ "#"]- _ -> return [ident]-- lexQuasiQuote :: Lex a Token- lexQuasiQuote = do- -- We've seen and dropped [$ already- ident <- lexWhile isIdent- matchChar '|' "Malformed quasi-quote quoter"- body <- lexQQBody- return $ THQuasiQuote (ident, body)-- lexQQBody :: Lex a String- lexQQBody = do- s <- getInput- case s of- '\\':']':_ -> do str <- lexQQBody- return (']':str)- '\\':'|':_ -> do str <- lexQQBody- return ('|':str)- '|':']':_ -> discard 2 >> return ""- _ -> do str <- lexWhile (not . (`elem` "\\|"))- rest <- lexQQBody- return (str++rest)--lexPragmaStart :: Lex a Token-lexPragmaStart = do- lexWhile isSpace- pr <- lexWhile isAlphaNum- case lookup (map toLower pr) pragmas of- Just SPECIALISE -> do- s <- getInput- case dropWhile isSpace $ map toLower s of- 'i':'n':'l':'i':'n':'e':_ -> do- lexWhile isSpace- discard 6- return $ SPECIALISE_INLINE True- 'n':'o':'i':'n':'l':'i':'n':'e':_ -> do- lexWhile isSpace- discard 8- return $ SPECIALISE_INLINE False- 'n':'o':'t':'i':'n':'l':'i':'n':'e':_ -> do- lexWhile isSpace- discard 9- return $ SPECIALISE_INLINE False- _ -> return SPECIALISE-- Just (OPTIONS _) -> do -- see, I promised we'd mask out the 'undefined'- s <- getInput- case s of- '_':_ -> do- discard 1- com <- lexWhile isIdent- rest <- lexRawPragma- return $ OPTIONS (Just com, rest)- x:_ | isSpace x -> do- rest <- lexRawPragma- return $ OPTIONS (Nothing, rest)- _ -> fail "Malformed Options pragma"- Just (CFILES _) -> do- rest <- lexRawPragma- return $ CFILES rest- Just (INCLUDE _) -> do- rest <- lexRawPragma- return $ INCLUDE rest- Just p -> return p-- _ -> fail "Internal error: Unrecognised recognised pragma"- -- do rawStr <- lexRawPragma- -- return $ PragmaUnknown (pr, rawStr) -- no support for unrecognized pragmas, treat as comment- -- discard 3 -- #-}- -- topLexer -- we just discard it as a comment for now and restart -}--lexRawPragma :: Lex a String-lexRawPragma = do- rpr <- lexRawPragmaAux- return $ dropWhile isSpace rpr- where lexRawPragmaAux = do- rpr <- lexWhile (/='#')- s <- getInput- case s of- '#':'-':'}':_ -> return rpr- _ -> do- discard 1- rpr' <- lexRawPragma- return $ rpr ++ '#':rpr'--lexDecimalOrFloat :: Lex a Token-lexDecimalOrFloat = do- ds <- lexWhile isDigit- rest <- getInput- exts <- getExtensionsL- case rest of- ('.':d:_) | isDigit d -> do- discard 1- frac <- lexWhile isDigit- let num = parseInteger 10 (ds ++ frac)- decimals = toInteger (length frac)- (exponent, estr) <- do- rest2 <- getInput- case rest2 of- 'e':_ -> lexExponent- 'E':_ -> lexExponent- _ -> return (0,"")- con <- lexHash FloatTok FloatTokHash (Right DoubleTokHash)- return $ con ((num%1) * 10^^(exponent - decimals), ds ++ '.':frac ++ estr)- e:_ | toLower e == 'e' -> do- (exponent, estr) <- lexExponent- con <- lexHash FloatTok FloatTokHash (Right DoubleTokHash)- return $ con ((parseInteger 10 ds%1) * 10^^exponent, ds ++ estr)- '#':'#':_ | MagicHash `elem` exts -> discard 2 >> return (WordTokHash (parseInteger 10 ds, ds))- '#':_ | MagicHash `elem` exts -> discard 1 >> return (IntTokHash (parseInteger 10 ds, ds))- _ -> return (IntTok (parseInteger 10 ds, ds))-- where- lexExponent :: Lex a (Integer, String)- lexExponent = do- (e:r) <- getInput- discard 1 -- 'e' or 'E'- case r of- '+':d:_ | isDigit d -> do- discard 1- (n, str) <- lexDecimal- return (n, e:'+':str)- '-':d:_ | isDigit d -> do- discard 1- (n, str) <- lexDecimal- return (negate n, e:'-':str)- d:_ | isDigit d -> lexDecimal >>= \(n,str) -> return (n, e:str)- _ -> fail "Float with missing exponent"--lexHash :: (b -> Token) -> (b -> Token) -> Either String (b -> Token) -> Lex a (b -> Token)-lexHash a b c = do- exts <- getExtensionsL- if MagicHash `elem` exts- then do- r <- getInput- case r of- '#':'#':_ -> case c of- Right c -> discard 2 >> return c- Left s -> fail s- '#':_ -> discard 1 >> return b- _ -> return a- else return a--lexConIdOrQual :: String -> Lex a Token-lexConIdOrQual qual = do- con <- lexWhile isIdent- let conid | null qual = ConId con- | otherwise = QConId (qual,con)- qual' | null qual = con- | otherwise = qual ++ '.':con- just_a_conid <- alternative (return conid)- rest <- getInput- exts <- getExtensionsL- case rest of- '.':c:_- | isLower c || c == '_' -> do -- qualified varid?- discard 1- ident <- lexWhile isIdent- s <- getInput- exts <- getExtensionsL- ident' <- case s of- '#':_ | MagicHash `elem` exts -> discard 1 >> return (ident ++ "#")- _ -> return ident- case lookup ident' reserved_ids of- -- cannot qualify a reserved word- Just _ -> just_a_conid- Nothing -> return (QVarId (qual', ident'))-- | isUpper c -> do -- qualified conid?- discard 1- lexConIdOrQual qual'-- | isHSymbol c -> do -- qualified symbol?- discard 1- sym <- lexWhile isHSymbol- exts <- getExtensionsL- case lookup sym reserved_ops of- -- cannot qualify a reserved operator- Just (_,scheme) | isEnabled scheme exts -> just_a_conid- _ -> return $ case c of- ':' -> QConSym (qual', sym)- _ -> QVarSym (qual', sym)-- '#':c:_- | not (isHSymbol c) && not (isIdent c) && MagicHash `elem` exts -> do- discard 1- case conid of- ConId con -> return $ ConId $ con ++ "#"- QConId (q,con) -> return $ QConId (q,con ++ "#")- _ -> return conid -- not a qualified thing--lexCharacter :: Lex a Token-lexCharacter = do -- We need to keep track of not only character constants but also TH 'x and ''T- -- We've seen ' so far- s <- getInput- exts <- getExtensionsL- case s of- '\'':_ | TemplateHaskell `elem` exts -> discard 1 >> return THTyQuote- '\\':_ -> do- (c,raw) <- lexEscape- matchQuote- con <- lexHash Character CharacterHash- (Left "Double hash not available for character literals")- return (con (c, '\\':raw))- c:'\'':_ -> do- discard 2- con <- lexHash Character CharacterHash- (Left "Double hash not available for character literals")- return (con (c, [c]))- _ | TemplateHaskell `elem` exts -> return THVarQuote- _ -> fail "Improper character constant or misplaced \'"-- where matchQuote = matchChar '\'' "Improperly terminated character constant"---lexString :: Lex a Token-lexString = loop ("","")- where- loop (s,raw) = do- r <- getInput- exts <- getExtensionsL- case r of- '\\':'&':_ -> do- discard 2- loop (s, '&':'\\':raw)- '\\':c:_ | isSpace c -> do- discard 1- wcs <- lexWhiteChars- matchChar '\\' "Illegal character in string gap"- loop (s, '\\':reverse wcs ++ '\\':raw)- | otherwise -> do- (ce, str) <- lexEscape- loop (ce:s, reverse str ++ '\\':raw)- '"':'#':_ | MagicHash `elem` exts -> do- discard 2- return (StringHash (reverse s, reverse raw))- '"':_ -> do- discard 1- return (StringTok (reverse s, reverse raw))- c:_ -> do- discard 1- loop (c:s, c:raw)- [] -> fail "Improperly terminated string"-- lexWhiteChars :: Lex a String- lexWhiteChars = do- s <- getInput- case s of- '\n':_ -> do- lexNewline- wcs <- lexWhiteChars- return $ '\n':wcs- '\t':_ -> do- lexTab- wcs <- lexWhiteChars- return $ '\t':wcs- c:_ | isSpace c -> do- discard 1- wcs <- lexWhiteChars- return $ c:wcs- _ -> return ""--lexEscape :: Lex a (Char, String)-lexEscape = do- discard 1- r <- getInput- case r of---- Production charesc from section B.2 (Note: \& is handled by caller)-- 'a':_ -> discard 1 >> return ('\a', "a")- 'b':_ -> discard 1 >> return ('\b', "b")- 'f':_ -> discard 1 >> return ('\f', "f")- 'n':_ -> discard 1 >> return ('\n', "n")- 'r':_ -> discard 1 >> return ('\r', "r")- 't':_ -> discard 1 >> return ('\t', "t")- 'v':_ -> discard 1 >> return ('\v', "v")- '\\':_ -> discard 1 >> return ('\\', "\\")- '"':_ -> discard 1 >> return ('\"', "\"")- '\'':_ -> discard 1 >> return ('\'', "\'")---- Production ascii from section B.2-- '^':c:_ -> discard 2 >> cntrl c- 'N':'U':'L':_ -> discard 3 >> return ('\NUL', "NUL")- 'S':'O':'H':_ -> discard 3 >> return ('\SOH', "SOH")- 'S':'T':'X':_ -> discard 3 >> return ('\STX', "STX")- 'E':'T':'X':_ -> discard 3 >> return ('\ETX', "ETX")- 'E':'O':'T':_ -> discard 3 >> return ('\EOT', "EOT")- 'E':'N':'Q':_ -> discard 3 >> return ('\ENQ', "ENQ")- 'A':'C':'K':_ -> discard 3 >> return ('\ACK', "ACK")- 'B':'E':'L':_ -> discard 3 >> return ('\BEL', "BEL")- 'B':'S':_ -> discard 2 >> return ('\BS', "BS")- 'H':'T':_ -> discard 2 >> return ('\HT', "HT")- 'L':'F':_ -> discard 2 >> return ('\LF', "LF")- 'V':'T':_ -> discard 2 >> return ('\VT', "VT")- 'F':'F':_ -> discard 2 >> return ('\FF', "FF")- 'C':'R':_ -> discard 2 >> return ('\CR', "CR")- 'S':'O':_ -> discard 2 >> return ('\SO', "SO")- 'S':'I':_ -> discard 2 >> return ('\SI', "SI")- 'D':'L':'E':_ -> discard 3 >> return ('\DLE', "DLE")- 'D':'C':'1':_ -> discard 3 >> return ('\DC1', "DC1")- 'D':'C':'2':_ -> discard 3 >> return ('\DC2', "DC2")- 'D':'C':'3':_ -> discard 3 >> return ('\DC3', "DC3")- 'D':'C':'4':_ -> discard 3 >> return ('\DC4', "DC4")- 'N':'A':'K':_ -> discard 3 >> return ('\NAK', "NAK")- 'S':'Y':'N':_ -> discard 3 >> return ('\SYN', "SYN")- 'E':'T':'B':_ -> discard 3 >> return ('\ETB', "ETB")- 'C':'A':'N':_ -> discard 3 >> return ('\CAN', "CAN")- 'E':'M':_ -> discard 2 >> return ('\EM', "EM")- 'S':'U':'B':_ -> discard 3 >> return ('\SUB', "SUB")- 'E':'S':'C':_ -> discard 3 >> return ('\ESC', "ESC")- 'F':'S':_ -> discard 2 >> return ('\FS', "FS")- 'G':'S':_ -> discard 2 >> return ('\GS', "GS")- 'R':'S':_ -> discard 2 >> return ('\RS', "RS")- 'U':'S':_ -> discard 2 >> return ('\US', "US")- 'S':'P':_ -> discard 2 >> return ('\SP', "SP")- 'D':'E':'L':_ -> discard 3 >> return ('\DEL', "DEL")---- Escaped numbers-- 'o':c:_ | isOctDigit c -> do- discard 1- (n, raw) <- lexOctal- n <- checkChar n- return (n, 'o':raw)- 'x':c:_ | isHexDigit c -> do- discard 1- (n, raw) <- lexHexadecimal- n <- checkChar n- return (n, 'x':raw)- c:_ | isDigit c -> do- (n, raw) <- lexDecimal- n <- checkChar n- return (n, raw)-- _ -> fail "Illegal escape sequence"-- where- checkChar n | n <= 0x01FFFF = return (chr (fromInteger n))- checkChar _ = fail "Character constant out of range"---- Production cntrl from section B.2-- cntrl :: Char -> Lex a (Char, String)- cntrl c | c >= '@' && c <= '_' = return (chr (ord c - ord '@'), '^':c:[])- cntrl _ = fail "Illegal control character"---- assumes at least one octal digit-lexOctal :: Lex a (Integer, String)-lexOctal = do- ds <- lexWhile isOctDigit- return (parseInteger 8 ds, ds)---- assumes at least one hexadecimal digit-lexHexadecimal :: Lex a (Integer, String)-lexHexadecimal = do- ds <- lexWhile isHexDigit- return (parseInteger 16 ds, ds)---- assumes at least one decimal digit-lexDecimal :: Lex a (Integer, String)-lexDecimal = do- ds <- lexWhile isDigit- return (parseInteger 10 ds, ds)---- Stolen from Hugs's Prelude-parseInteger :: Integer -> String -> Integer-parseInteger radix ds =- foldl1 (\n d -> n * radix + d) (map (toInteger . digitToInt) ds)--flagKW :: Token -> Lex a ()-flagKW t = when (t `elem` [KW_Do, KW_MDo]) flagDo+{-# LANGUAGE Safe #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Lexer+-- Copyright : (c) The GHC Team, 1997-2000+-- (c) Niklas Broberg, 2004-2012+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, niklas.broberg@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Lexer for Haskell with extensions.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Lexer+ (+ lexTokenStream, lexTokenStreamWithMode,++ Token(..), Loc(..),++ showToken++ ) where++import Language.Haskell.Exts.InternalLexer+import Language.Haskell.Exts.ParseMonad+import Language.Haskell.Exts.SrcLoc++-- | Lex a string into a list of Haskell 2010 source tokens.+lexTokenStream :: String -> ParseResult [Loc Token]+lexTokenStream = lexTokenStreamWithMode defaultParseMode++-- | Lex a string into a list of Haskell source tokens, using an explicit mode.+lexTokenStreamWithMode :: ParseMode -> String -> ParseResult [Loc Token]+lexTokenStreamWithMode mode = runParserWithMode mode lexIt+ where lexIt :: P [Loc Token]+ lexIt = runL go return+ go :: Lex [Loc Token] [Loc Token]+ go = do+ ltok <- topLexer+ case ltok of+ Loc _ EOF -> return []+ _ -> do ts <- go+ return (ltok:ts)
@@ -1,7 +1,9 @@+{-# LANGUAGE CPP, Safe #-} {-# OPTIONS_HADDOCK hide #-}+ ----------------------------------------------------------------------------- -- |--- Module : Language.Haskell.Exts.Annotated.ParseMonad+-- Module : Language.Haskell.Exts.ParseMonad -- Copyright : Niklas Broberg (c) 2004-2009, -- Original (c) The GHC Team, 1997-2000 -- License : BSD-style (see the file libraries/base/LICENSE)@@ -15,16 +17,21 @@ ----------------------------------------------------------------------------- module Language.Haskell.Exts.ParseMonad(+ -- * Generic Parsing+ Parseable(..), -- * Parsing P, ParseResult(..), atSrcLoc, LexContext(..), ParseMode(..), defaultParseMode, fromParseResult, runParserWithMode, runParserWithModeComments, runParser, getSrcLoc, pushCurrentContext, popContext,- getExtensions,+ getExtensions, getIgnoreFunctionArity, -- * Lexing- Lex(runL), getInput, discard, lexNewline, lexTab, lexWhile,+ Lex(runL), getInput, discard, getLastChar, lexNewline,+ lexTab, lexWhile, lexWhile_, alternative, checkBOL, setBOL, startToken, getOffside,- pushContextL, popContextL, getExtensionsL, pushComment, getSrcLocL,+ pushContextL, popContextL, getExtensionsL, addExtensionL,+ saveExtensionsL, restoreExtensionsL, pushComment,+ getSrcLocL, setSrcLineL, ignoreLinePragmasL, setLineFilenameL, -- * Harp/Hsx ExtContext(..), pushExtContextL, popExtContextL, getExtContext,@@ -32,34 +39,59 @@ getModuleName ) where -import Language.Haskell.Exts.SrcLoc(SrcLoc(..))-import Language.Haskell.Exts.Annotated.Fixity (Fixity, preludeFixities)+import Language.Haskell.Exts.SrcLoc (SrcLoc(..), noLoc)+import Language.Haskell.Exts.Fixity (Fixity, preludeFixities) import Language.Haskell.Exts.Comments-import Language.Haskell.Exts.Extension (Extension)+import Language.Haskell.Exts.Extension -- (Extension, impliesExts, haskell2010) -import Data.List ( intersperse )+import Data.List (intercalate) import Control.Applicative-import Control.Monad (when)-import Data.Monoid+import Control.Monad (when, liftM, ap)+import qualified Control.Monad.Fail as Fail+import Data.Monoid hiding ((<>))+#if !MIN_VERSION_base(4,13,0)+import Data.Semigroup (Semigroup(..))+#endif+-- To avoid import warnings for Control.Applicative, Data.Monoid, and Data.Semigroup+import Prelude +-- | Class providing function for parsing at many different types.+--+-- Note that for convenience of implementation, the default methods have+-- definitions equivalent to 'undefined'. The minimal definition is all of+-- the visible methods.+class Parseable ast where+ -- | Parse a string with default mode.+ parse :: String -> ParseResult ast+ parse = parseWithMode defaultParseMode+ -- | Parse a string with an explicit 'ParseMode'.+ parseWithMode :: ParseMode -> String -> ParseResult ast+ parseWithMode mode = runParserWithMode mode . parser $ fixities mode+ -- | Parse a string with an explicit 'ParseMode', returning all comments along+ -- with the AST.+ parseWithComments :: ParseMode -> String -> ParseResult (ast, [Comment])+ parseWithComments mode = runParserWithModeComments mode . parser $ fixities mode+ -- | Internal parser, used to provide default definitions for the others.+ parser :: Maybe [Fixity] -> P ast+ -- | The result of a parse. data ParseResult a = ParseOk a -- ^ The parse succeeded, yielding a value. | ParseFailed SrcLoc String -- ^ The parse failed at the specified -- source location, with an error message.- deriving Show+ deriving (Show, Ord, Eq) -- | Retrieve the result of a successful parse, throwing an -- error if the parse is actually not successful. fromParseResult :: ParseResult a -> a fromParseResult (ParseOk a) = a-fromParseResult (ParseFailed loc str) = error $ "fromParseResult: Parse failed at ("- ++ show (srcLine loc) ++ ":" ++ show (srcColumn loc) ++ "): " ++ str+fromParseResult (ParseFailed loc str) = error $ "fromParseResult: Parse failed at ["+ ++ srcFilename loc ++ "] (" ++ show (srcLine loc) ++ ":" ++ show (srcColumn loc) ++ "): " ++ str instance Functor ParseResult where fmap f (ParseOk x) = ParseOk $ f x- fmap f (ParseFailed loc msg) = ParseFailed loc msg+ fmap _ (ParseFailed loc msg) = ParseFailed loc msg instance Applicative ParseResult where pure = ParseOk@@ -67,16 +99,21 @@ ParseFailed loc msg <*> _ = ParseFailed loc msg instance Monad ParseResult where- return = ParseOk+#if !MIN_VERSION_base(4,13,0)+ fail = Fail.fail+#endif ParseOk x >>= f = f x ParseFailed loc msg >>= _ = ParseFailed loc msg+instance Fail.MonadFail ParseResult where+ fail = ParseFailed noLoc -instance Monoid m => Monoid (ParseResult m) where- mempty = ParseOk mempty- ParseOk x `mappend` ParseOk y = ParseOk $ x `mappend` y- ParseOk x `mappend` err = err- err `mappend` _ = err -- left-biased+instance Semigroup m => Semigroup (ParseResult m) where+ ParseOk x <> ParseOk y = ParseOk $ x <> y+ ParseOk _ <> err = err+ err <> _ = err -- left-biased +instance ( Monoid m , Semigroup m) => Monoid (ParseResult m) where+ mempty = ParseOk mempty -- internal version data ParseStatus a = Ok ParseState a | Failed SrcLoc String@@ -93,11 +130,11 @@ -- (True,_) = We're in a do context. -- (_, True)= Next token must be a virtual closing brace. -type ParseState = ([LexContext],[ExtContext],CtxtFlag,[Comment])+type ParseState = ([LexContext],[[KnownExtension]],[ExtContext],CtxtFlag,[Comment]) indentOfParseState :: ParseState -> Int-indentOfParseState (Layout n:_,_,_,_) = n-indentOfParseState _ = 0+indentOfParseState (Layout n:_,_,_,_,_) = n+indentOfParseState _ = 0 -- | Static parameters governing a parse. -- Note that the various parse functions in "Language.Haskell.Exts.Parser"@@ -109,42 +146,70 @@ data ParseMode = ParseMode { -- | original name of the file being parsed parseFilename :: String,+ -- | base language (e.g. Haskell98, Haskell2010)+ baseLanguage :: Language, -- | list of extensions enabled for parsing extensions :: [Extension], -- | if 'True', the parser won't care about further extensions -- in LANGUAGE pragmas in source files ignoreLanguagePragmas :: Bool,+ -- | if 'True', the parser won't read line position information+ -- from LINE pragmas in source files+ ignoreLinePragmas :: Bool, -- | list of fixities to be aware of- fixities :: [Fixity]+ fixities :: Maybe [Fixity],+ -- | Checks whether functions have a consistent arity+ ignoreFunctionArity :: Bool } -- | Default parameters for a parse. -- The default is an unknown filename, -- no extensions (i.e. Haskell 98),--- don't ignore LANGUAGE pragmas,+-- don't ignore LANGUAGE pragmas, do ignore LINE pragmas, -- and be aware of fixities from the 'Prelude'. defaultParseMode :: ParseMode defaultParseMode = ParseMode { parseFilename = "<unknown>.hs",+ baseLanguage = Haskell2010, extensions = [], ignoreLanguagePragmas = False,- fixities = preludeFixities+ ignoreLinePragmas = True,+ fixities = Just preludeFixities,+ ignoreFunctionArity = False } +-- Version of ParseMode used internally,+-- where the language and extensions have+-- been expanded+data InternalParseMode = IParseMode {+ iParseFilename :: String,+ iExtensions :: [KnownExtension],+ -- iIgnoreLanguagePragmas :: Bool,+ iIgnoreLinePragmas :: Bool,+ iIgnoreFunctionArity :: Bool+ -- iFixities :: Maybe [Fixity]+ }++toInternalParseMode :: ParseMode -> InternalParseMode+toInternalParseMode (ParseMode pf bLang exts _ilang iline _fx farity) =+ IParseMode pf (toExtensionList bLang exts) {-_ilang -} iline {- _fx -} farity++ -- | Monad for parsing newtype P a = P { runP ::- String -- input string- -> Int -- current column- -> Int -- current line- -> SrcLoc -- location of last token read- -> ParseState -- layout info.- -> ParseMode -- parse parameters+ String -- input string+ -> Int -- current column+ -> Int -- current line+ -> SrcLoc -- location of last token read+ -> Char -- Last token read used for lexing TypeApplication UGH+ -> ParseState -- layout info.+ -> InternalParseMode -- parse parameters -> ParseStatus a } runParserWithMode :: ParseMode -> P a -> String -> ParseResult a-runParserWithMode mode (P m) s = case m s 0 1 start ([],[],(False,False),[]) mode of+{-runParserWithMode mode (P m) s = case m s 0 1 start ([],[],(False,False),[]) mode of Ok _ a -> ParseOk a Failed loc msg -> ParseFailed loc msg where start = SrcLoc {@@ -152,38 +217,55 @@ srcLine = 1, srcColumn = 1 }+-}+runParserWithMode mode pm = fmap fst . runParserWithModeComments mode pm runParser :: P a -> String -> ParseResult a runParser = runParserWithMode defaultParseMode runParserWithModeComments :: ParseMode -> P a -> String -> ParseResult (a, [Comment])-runParserWithModeComments mode (P m) s = case m s 0 1 start ([],[],(False,False),[]) mode of- Ok (_,_,_,cs) a -> ParseOk (a, reverse cs)- Failed loc msg -> ParseFailed loc msg+runParserWithModeComments mode = let mode2 = toInternalParseMode mode in \(P m) s ->+ case m s 0 1 start '\n' ([],[],[],(False,False),[]) mode2 of+ Ok (_,_,_,_,cs) a -> ParseOk (a, reverse cs)+ Failed loc msg -> ParseFailed loc msg where start = SrcLoc { srcFilename = parseFilename mode, srcLine = 1, srcColumn = 1- }+ }+ -- allExts mode@(ParseMode {extensions = es}) = mode { extensions = impliesExts es } + -- allExts mode = let imode = to++instance Functor P where+ fmap = liftM++instance Applicative P where+ pure a = P $ \_i _x _y _l _ch s _m -> Ok s a+ (<*>) = ap+ instance Monad P where- return a = P $ \_i _x _y _l s _m -> Ok s a- P m >>= k = P $ \i x y l s mode ->- case m i x y l s mode of+ P m >>= k = P $ \i x y l ch s mode ->+ case m i x y l ch s mode of Failed loc msg -> Failed loc msg- Ok s' a -> runP (k a) i x y l s' mode- fail s = P $ \_r _col _line loc _stk _m -> Failed loc s+ Ok s' a -> runP (k a) i x y l ch s' mode+#if !MIN_VERSION_base(4,13,0)+ fail = Fail.fail+#endif +instance Fail.MonadFail P where+ fail s = P $ \_r _col _line loc _ _stk _m -> Failed loc s+ atSrcLoc :: P a -> SrcLoc -> P a-P m `atSrcLoc` loc = P $ \i x y _l -> m i x y loc+P m `atSrcLoc` loc = P $ \i x y _l ch -> m i x y loc ch getSrcLoc :: P SrcLoc-getSrcLoc = P $ \_i _x _y l s _m -> Ok s l+getSrcLoc = P $ \_i _x _y l _ s _m -> Ok s l getModuleName :: P String-getModuleName = P $ \_i _x _y _l s m ->- let fn = parseFilename m- mn = concat $ intersperse "." $ splitPath fn+getModuleName = P $ \_i _x _y _l _ch s m ->+ let fn = iParseFilename m+ mn = intercalate "." $ splitPath fn splitPath :: String -> [String] splitPath "" = []@@ -208,25 +290,25 @@ dob <- pullDoStatus let loc = srcColumn lc when (dob && loc < indent- || not dob && loc <= indent) $ pushCtxtFlag+ || not dob && loc <= indent) pushCtxtFlag pushContext (Layout loc) currentIndent :: P Int-currentIndent = P $ \_r _x _y loc stk _mode -> Ok stk (indentOfParseState stk)+currentIndent = P $ \_r _x _y _ _ stk _mode -> Ok stk (indentOfParseState stk) pushContext :: LexContext -> P () pushContext ctxt = --trace ("pushing lexical scope: " ++ show ctxt ++"\n") $- P $ \_i _x _y _l (s, e, p, c) _m -> Ok (ctxt:s, e, p, c) ()+ P $ \_i _x _y _l _ (s, exts, e, p, c) _m -> Ok (ctxt:s, exts, e, p, c) () popContext :: P ()-popContext = P $ \_i _x _y _l stk _m ->+popContext = P $ \_i _x _y loc _ stk _m -> case stk of- (_:s, e, p, c) -> --trace ("popping lexical scope, context now "++show s ++ "\n") $- Ok (s, e, p, c) ()- ([],_,_,_) -> error "Internal error: empty context in popContext"-+ (_:s, exts, e, p, c) -> --trace ("popping lexical scope, context now "++show s ++ "\n") $+ Ok (s, exts, e, p, c) ()+ ([],_,_,_,_) -> Failed loc "Unexpected }" -- error "Internal error: empty context in popContext" +{- -- HaRP/Hsx pushExtContext :: ExtContext -> P () pushExtContext ctxt = P $ \_i _x _y _l (s, e, p, c) _m -> Ok (s, ctxt:e, p, c) ()@@ -237,33 +319,50 @@ (_:e') -> Ok (s, e', p, c) () [] -> error "Internal error: empty context in popExtContext"-+-} -- Extension-aware lexing/parsing-getExtensions :: P [Extension]-getExtensions = P $ \_i _x _y _l s m ->- Ok s $ extensions m+getExtensions :: P [KnownExtension]+getExtensions = P $ \_i _x _y _l _ s m ->+ Ok s $ iExtensions m pushCtxtFlag :: P () pushCtxtFlag =- P $ \_i _x _y _l (s, e, (d,c), cs) _m -> case c of- False -> Ok (s, e, (d,True), cs) ()+ P $ \_i _x _y _l _ (s, exts, e, (d,c), cs) _m -> case c of+ False -> Ok (s, exts, e, (d,True), cs) () _ -> error "Internal error: context flag already pushed" pullDoStatus :: P Bool-pullDoStatus = P $ \_i _x _y _l (s, e, (d,c), cs) _m -> Ok (s,e,(False,c),cs) d+pullDoStatus = P $ \_i _x _y _l _ (s, exts, e, (d,c), cs) _m -> Ok (s,exts,e,(False,c),cs) d +getIgnoreFunctionArity :: P Bool+getIgnoreFunctionArity = P $ \_i _x _y _l _ s m ->+ Ok s $ iIgnoreFunctionArity m +++ ---------------------------------------------------------------------------- -- Monad for lexical analysis: -- a continuation-passing version of the parsing monad newtype Lex r a = Lex { runL :: (a -> P r) -> P r } +instance Functor (Lex r) where+ fmap = liftM++instance Applicative (Lex r) where+ pure a = Lex $ \k -> k a+ (<*>) = ap+ instance Monad (Lex r) where- return a = Lex $ \k -> k a Lex v >>= f = Lex $ \k -> v (\a -> runL (f a) k) Lex v >> Lex w = Lex $ \k -> v (\_ -> w k)+#if !MIN_VERSION_base(4,13,0)+ fail = Fail.fail+#endif++instance Fail.MonadFail (Lex r) where fail s = Lex $ \_ -> fail s -- Operations on this monad@@ -274,12 +373,24 @@ -- | Discard some input characters (these must not include tabs or newlines). discard :: Int -> Lex r ()-discard n = Lex $ \cont -> P $ \r x -> runP (cont ()) (drop n r) (x+n)+discard n = Lex $ \cont -> P $ \r x y loc ch+ -> let (newCh:rest)= if n > 0 then drop (n-1) r else (ch:r)+ in runP (cont ()) rest (x+n) y loc newCh +-- | Get the last discarded character.+-- This is only used for type application.++getLastChar :: Lex r Char+getLastChar = Lex $ \cont -> P $ \r x y loc ch -> runP (cont ch) r x y loc ch++ -- | Discard the next character, which must be a newline. lexNewline :: Lex a ()-lexNewline = Lex $ \cont -> P $ \(_:r) _x y -> runP (cont ()) r 1 (y+1)+lexNewline = Lex $ \cont -> P $ \rs _x y loc ->+ case rs of+ (_:r) -> runP (cont ()) r 1 (y+1) loc+ [] -> \_ _ _ -> Failed loc "Lexer: expected newline." -- | Discard the next character, which must be a tab. @@ -290,15 +401,31 @@ nextTab x = x + (tAB_LENGTH - (x-1) `mod` tAB_LENGTH) tAB_LENGTH :: Int-tAB_LENGTH = 8 :: Int+tAB_LENGTH = 8 -- Consume and return the largest string of characters satisfying p lexWhile :: (Char -> Bool) -> Lex a String-lexWhile p = Lex $ \cont -> P $ \r x ->- let (cs,rest) = span p r in- runP (cont cs) rest (x + length cs)+lexWhile p = Lex $ \cont -> P $ \rss c l loc char ->+ case rss of+ [] -> runP (cont []) [] c l loc char+ (r:rs) ->+ let+ l' = case r of+ '\n' -> l + 1+ _ -> l+ c' = case r of+ '\n' -> 1+ _ -> c + 1+ in if p r+ then runP (runL ((r:) <$> lexWhile p) cont) rs c' l' loc r+ else runP (cont []) (r:rs) c l loc char +-- | lexWhile without the return value.+lexWhile_ :: (Char -> Bool) -> Lex a ()+lexWhile_ p = do _ <- lexWhile p+ return ()+ -- An alternative scan, to which we can return if subsequent scanning -- is unsuccessful. @@ -333,13 +460,13 @@ -- Set the loc to the current position startToken :: Lex a ()-startToken = Lex $ \cont -> P $ \s x y _ stk mode ->+startToken = Lex $ \cont -> P $ \s x y _ c stk mode -> let loc = SrcLoc {- srcFilename = parseFilename mode,+ srcFilename = iParseFilename mode, srcLine = y, srcColumn = x } in- runP (cont ()) s x y loc stk mode+ runP (cont ()) s x y loc c stk mode -- Current status with respect to the offside (layout) rule: -- LT: we are to the left of the current indent (if any)@@ -347,59 +474,91 @@ -- GT: we are to the right of the current indent, or not subject to layout getOffside :: Lex a Ordering-getOffside = Lex $ \cont -> P $ \r x y loc stk ->- runP (cont (compare x (indentOfParseState stk))) r x y loc stk+getOffside = Lex $ \cont -> P $ \r x y loc ch stk ->+ runP (cont (compare x (indentOfParseState stk))) r x y loc ch stk getSrcLocL :: Lex a SrcLoc getSrcLocL = Lex $ \cont -> P $ \i x y l -> runP (cont (l { srcLine = y, srcColumn = x })) i x y l +setSrcLineL :: Int -> Lex a ()+setSrcLineL y = Lex $ \cont -> P $ \i x _ ->+ runP (cont ()) i x y+ pushContextL :: LexContext -> Lex a ()-pushContextL ctxt = Lex $ \cont -> P $ \r x y loc (stk, e, pst, cs) ->- runP (cont ()) r x y loc (ctxt:stk, e, pst, cs)+pushContextL ctxt = Lex $ \cont -> P $ \r x y loc ch (stk, exts, e, pst, cs) ->+ runP (cont ()) r x y loc ch (ctxt:stk, exts, e, pst, cs) popContextL :: String -> Lex a ()-popContextL fn = Lex $ \cont -> P $ \r x y loc stk -> case stk of- (_:ctxt, e, pst, cs) -> runP (cont ()) r x y loc (ctxt, e, pst, cs)- ([], _, _, _) -> error ("Internal error: empty context in " ++ fn)+popContextL _ = Lex $ \cont -> P $ \r x y loc ch stk m -> case stk of+ (_:ctxt, exts, e, pst, cs) -> runP (cont ()) r x y loc ch (ctxt, exts, e, pst, cs) m+ ([], _, _, _, _) -> Failed loc "Unexpected }" pullCtxtFlag :: Lex a Bool-pullCtxtFlag = Lex $ \cont -> P $ \r x y loc (ct, e, (d,c), cs) ->- runP (cont c) r x y loc (ct, e, (d,False), cs)+pullCtxtFlag = Lex $ \cont -> P $ \r x y loc ch (ct, exts, e, (d,c), cs) ->+ runP (cont c) r x y loc ch (ct, exts, e, (d,False), cs) flagDo :: Lex a ()-flagDo = Lex $ \cont -> P $ \r x y loc (ct, e, (d,c), cs) ->- runP (cont ()) r x y loc (ct, e, (True,c), cs)+flagDo = Lex $ \cont -> P $ \r x y loc ch (ct, exts, e, (_,c), cs) ->+ runP (cont ()) r x y loc ch (ct, exts, e, (True,c), cs) -- Harp/Hsx getExtContext :: Lex a (Maybe ExtContext)-getExtContext = Lex $ \cont -> P $ \r x y loc stk@(_, e, _, _) ->+getExtContext = Lex $ \cont -> P $ \r x y loc ch stk@(_, _, e, _, _) -> let me = case e of [] -> Nothing (c:_) -> Just c- in runP (cont me) r x y loc stk+ in runP (cont me) r x y loc ch stk pushExtContextL :: ExtContext -> Lex a ()-pushExtContextL ec = Lex $ \cont -> P $ \r x y loc (s, e, p, c) ->- runP (cont ()) r x y loc (s, ec:e, p, c)+pushExtContextL ec = Lex $ \cont -> P $ \r x y loc ch (s, exts, e, p, c) ->+ runP (cont ()) r x y loc ch (s, exts, ec:e, p, c) popExtContextL :: String -> Lex a ()-popExtContextL fn = Lex $ \cont -> P $ \r x y loc stk@(s,e,p,c) -> case e of- (_:ec) -> runP (cont ()) r x y loc (s,ec,p,c)- [] -> error ("Internal error: empty tag context in " ++ fn)+popExtContextL fn = Lex $ \cont -> P $ \r x y loc ch (s,exts,e,p,c) m -> case e of+ (_:ec) -> runP (cont ()) r x y loc ch (s,exts,ec,p,c) m+ [] -> Failed loc ("Internal error: empty tag context in " ++ fn) -- Extension-aware lexing -getExtensionsL :: Lex a [Extension]-getExtensionsL = Lex $ \cont -> P $ \r x y loc s m ->- runP (cont $ extensions m) r x y loc s m+getExtensionsL :: Lex a [KnownExtension]+getExtensionsL = Lex $ \cont -> P $ \r x y loc ch s m ->+ runP (cont $ iExtensions m) r x y loc ch s m +-- | Add an extension to the current configuration.+addExtensionL :: KnownExtension -> Lex a ()+addExtensionL ext = Lex $ \cont -> P $ \r x y loc ch (s, oldExts, e, p, c) m ->+ let newExts = impliesExts [ext] ++ iExtensions m+ in runP (cont ()) r x y loc ch (s, oldExts, e, p, c) (m {iExtensions = newExts})++-- | Save the current configuration of extensions.+saveExtensionsL :: Lex a ()+saveExtensionsL = Lex $ \cont -> P $ \r x y loc ch (s, oldExts, e, p, c) m ->+ runP (cont ()) r x y loc ch (s, iExtensions m:oldExts, e, p, c) m++-- | Return to the previous saved extensions configuration.+restoreExtensionsL :: Lex a ()+restoreExtensionsL = Lex $ \cont -> P $ \r x y loc ch (s,exts,e,p,c) m -> case exts of+ (_:prev) -> runP (cont ()) r x y loc ch (s,prev,e,p,c) m+ _ -> Failed loc "Internal error: empty extension stack"++-- LINE-aware lexing++ignoreLinePragmasL :: Lex a Bool+ignoreLinePragmasL = Lex $ \cont -> P $ \r x y loc c s m ->+ runP (cont $ iIgnoreLinePragmas m) r x y loc c s m++-- If we read a file name in a LINE pragma, we should update the state.+setLineFilenameL :: String -> Lex a ()+setLineFilenameL name = Lex $ \cont -> P $ \r x y loc ch s m ->+ runP (cont ()) r x y loc ch s (m {iParseFilename = name})+ -- Comments pushComment :: Comment -> Lex a ()-pushComment c = Lex $ \cont -> P $ \r x y loc (s, e, p, cs) ->- runP (cont ()) r x y loc (s, e, p, c:cs)+pushComment c = Lex $ \cont -> P $ \r x y loc ch (s, exts, e, p, cs) ->+ runP (cont ()) r x y loc ch (s, exts, e, p, c:cs)
@@ -1,432 +1,385 @@-module Language.Haskell.Exts.ParseSyntax where - -import Language.Haskell.Exts.Annotated.Syntax hiding ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..), Context(..) ) -import qualified Language.Haskell.Exts.Annotated.Syntax as S ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..), Context(..) ) - ---------------------------------------- --- Expressions as we parse them (and patters, and regular patterns) - -data PExp l - = Var l (QName l) -- ^ variable - | IPVar l (IPName l) -- ^ implicit parameter variable - | Con l (QName l) -- ^ data constructor - | Lit l (Literal l) -- ^ literal constant - | InfixApp l (PExp l) (QOp l) (PExp l) -- ^ infix application - | App l (PExp l) (PExp l) -- ^ ordinary application - | NegApp l (PExp l) -- ^ negation expression @-@ /exp/ - | Lambda l [Pat l] (PExp l) -- ^ lambda expression - | Let l (Binds l) (PExp l) -- ^ local declarations with @let@ - | If l (PExp l) (PExp l) (PExp l) -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/ - | Case l (PExp l) [Alt l] -- ^ @case@ /exp/ @of@ /alts/ - | Do l [Stmt l] -- ^ @do@-expression: - -- the last statement in the list - -- should be an expression. - | MDo l [Stmt l] -- ^ @mdo@-expression --- | Tuple [PExp] -- ^ tuple expression - | TupleSection l [Maybe (PExp l)] -- ^ tuple section expression, e.g. @(,,3)@ - | List l [PExp l] -- ^ list expression - | Paren l (PExp l) -- ^ parenthesized expression --- RightSection QOp PExp -- ^ right section @(@/qop/ /exp/@)@ - | RecConstr l (QName l) [PFieldUpdate l] - -- ^ record construction expression - | RecUpdate l (PExp l) [PFieldUpdate l] - -- ^ record update expression - | EnumFrom l (PExp l) -- ^ unbounded arithmetic sequence, - -- incrementing by 1 - | EnumFromTo l (PExp l) (PExp l) -- ^ bounded arithmetic sequence, - -- incrementing by 1 - | EnumFromThen l (PExp l) (PExp l) -- ^ unbounded arithmetic sequence, - -- with first two elements given - | EnumFromThenTo l (PExp l) (PExp l) (PExp l) - -- ^ bounded arithmetic sequence, - -- with first two elements given - | ParComp l (PExp l) [[QualStmt l]] -- ^ parallel list comprehension - | ExpTypeSig l (PExp l) (S.Type l) - -- ^ expression type signature - | AsPat l (Name l) (PExp l) -- ^ patterns only - | WildCard l -- ^ patterns only - | IrrPat l (PExp l) -- ^ patterns only - --- Post-ops for parsing left sections and regular patterns. Not to be left in the final tree. - | PostOp l (PExp l) (QOp l) -- ^ post-ops - | PreOp l (QOp l) (PExp l) -- ^ pre-ops - --- View patterns - | ViewPat l (PExp l) (PExp l) -- ^ patterns only - --- HaRP - | SeqRP l [PExp l] -- ^ regular patterns only - | GuardRP l (PExp l) [Stmt l] -- ^ regular patterns only - | EitherRP l (PExp l) (PExp l) -- ^ regular patterns only - | CAsRP l (Name l) (PExp l) -- ^ regular patterns only - --- Template Haskell - | VarQuote l (QName l) -- ^ 'x - | TypQuote l (QName l) -- ^ ''T - | BracketExp l (Bracket l) - | SpliceExp l (Splice l) - | QuasiQuote l String String -- ^ [$...|...] - --- Hsx - | XTag l (XName l) [ParseXAttr l] (Maybe (PExp l)) [PExp l] - | XETag l (XName l) [ParseXAttr l] (Maybe (PExp l)) - | XPcdata l String - | XExpTag l (PExp l) - | XRPats l [PExp l] - --- Pragmas - | CorePragma l String (PExp l) - | SCCPragma l String (PExp l) - | GenPragma l String (Int, Int) (Int, Int) (PExp l) --- | UnknownExpPragma String String - --- Generics - | ExplTypeArg l (QName l) (S.Type l) -- ^ f {| Int |} x = ... - --- Bang Patterns - | BangPat l (PExp l) -- ^ f !a = ... - --- Arrows - | Proc l (Pat l) (PExp l) - | LeftArrApp l (PExp l) (PExp l) - | RightArrApp l (PExp l) (PExp l) - | LeftArrHighApp l (PExp l) (PExp l) - | RightArrHighApp l (PExp l) (PExp l) - deriving (Eq,Show) - -data PFieldUpdate l - = FieldUpdate l (QName l) (PExp l) - | FieldPun l (Name l) - | FieldWildcard l - deriving (Eq,Show) - -data ParseXAttr l = XAttr l (XName l) (PExp l) - deriving (Eq,Show) - -instance Annotated PExp where - ann e = case e of - Var l qn -> l - IPVar l ipn -> l - Con l qn -> l - Lit l lit -> l - InfixApp l e1 qop e2 -> l - App l e1 e2 -> l - NegApp l e -> l - Lambda l ps e -> l - Let l bs e -> l - If l ec et ee -> l - Case l e alts -> l - Do l ss -> l - MDo l ss -> l - TupleSection l mes -> l - List l es -> l - Paren l e -> l - RecConstr l qn fups -> l - RecUpdate l e fups -> l - EnumFrom l e -> l - EnumFromTo l ef et -> l - EnumFromThen l ef et -> l - EnumFromThenTo l ef eth eto -> l - ParComp l e qsss -> l - ExpTypeSig l e t -> l - AsPat l n e -> l - WildCard l -> l - IrrPat l e -> l - PostOp l e op -> l - PreOp l op e -> l - ViewPat l e1 e2 -> l - SeqRP l es -> l - GuardRP l e ss -> l - EitherRP l e1 e2 -> l - CAsRP l n e -> l - - VarQuote l qn -> l - TypQuote l qn -> l - BracketExp l br -> l - SpliceExp l sp -> l - QuasiQuote l sn se -> l - - XTag l xn xas me es -> l - XETag l xn xas me -> l - XPcdata l s -> l - XExpTag l e -> l - XRPats l es -> l - - CorePragma l s e -> l - SCCPragma l s e -> l - GenPragma l s n12 n34 e -> l - - ExplTypeArg l qn t -> l - BangPat l e -> l - - Proc l p e -> l - LeftArrApp l e1 e2 -> l - RightArrApp l e1 e2 -> l - LeftArrHighApp l e1 e2 -> l - RightArrHighApp l e1 e2 -> l - - amap f e = case e of - Var l qn -> Var (f l) qn - IPVar l ipn -> IPVar (f l) ipn - Con l qn -> Con (f l) qn - Lit l lit -> Lit (f l) lit - InfixApp l e1 qop e2 -> InfixApp (f l) e1 qop e2 - App l e1 e2 -> App (f l) e1 e2 - NegApp l e -> NegApp (f l) e - Lambda l ps e -> Lambda (f l) ps e - Let l bs e -> Let (f l) bs e - If l ec et ee -> If (f l) ec et ee - Case l e alts -> Case (f l) e alts - Do l ss -> Do (f l) ss - MDo l ss -> MDo (f l) ss - TupleSection l mes -> TupleSection (f l) mes - List l es -> List (f l) es - Paren l e -> Paren (f l) e - RecConstr l qn fups -> RecConstr (f l) qn fups - RecUpdate l e fups -> RecUpdate (f l) e fups - EnumFrom l e -> EnumFrom (f l) e - EnumFromTo l ef et -> EnumFromTo (f l) ef et - EnumFromThen l ef et -> EnumFromThen (f l) ef et - EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) ef eth eto - ParComp l e qsss -> ParComp (f l) e qsss - ExpTypeSig l e t -> ExpTypeSig (f l) e t - - AsPat l n e -> AsPat (f l) n e - WildCard l -> WildCard (f l) - IrrPat l e -> IrrPat (f l) e - PostOp l e op -> PostOp (f l) e op - PreOp l op e -> PreOp (f l) op e - ViewPat l e1 e2 -> ViewPat (f l) e1 e2 - SeqRP l es -> SeqRP (f l) es - GuardRP l e ss -> GuardRP (f l) e ss - EitherRP l e1 e2 -> EitherRP (f l) e1 e2 - CAsRP l n e -> CAsRP (f l) n e - ExplTypeArg l n t -> ExplTypeArg (f l) n t - BangPat l e -> BangPat (f l) e - - VarQuote l qn -> VarQuote (f l) qn - TypQuote l qn -> TypQuote (f l) qn - BracketExp l br -> BracketExp (f l) br - SpliceExp l sp -> SpliceExp (f l) sp - QuasiQuote l sn se -> QuasiQuote (f l) sn se - - XTag l xn xas me es -> XTag (f l) xn xas me es - XETag l xn xas me -> XETag (f l) xn xas me - XPcdata l s -> XPcdata (f l) s - XExpTag l e -> XExpTag (f l) e - - CorePragma l s e -> CorePragma (f l) s e - SCCPragma l s e -> SCCPragma (f l) s e - GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 e - - Proc l p e -> Proc (f l) p e - LeftArrApp l e1 e2 -> LeftArrApp (f l) e1 e2 - RightArrApp l e1 e2 -> RightArrApp (f l) e1 e2 - LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) e1 e2 - RightArrHighApp l e1 e2 -> RightArrHighApp (f l) e1 e2 - -instance Functor PExp where - fmap f e = case e of - Var l qn -> Var (f l) (fmap f qn) - IPVar l ipn -> IPVar (f l) (fmap f ipn) - Con l qn -> Con (f l) (fmap f qn) - Lit l lit -> Lit (f l) (fmap f lit) - InfixApp l e1 qop e2 -> InfixApp (f l) (fmap f e1) (fmap f qop) (fmap f e2) - App l e1 e2 -> App (f l) (fmap f e1) (fmap f e2) - NegApp l e -> NegApp (f l) (fmap f e) - Lambda l ps e -> Lambda (f l) (map (fmap f) ps) (fmap f e) - Let l bs e -> Let (f l) (fmap f bs) (fmap f e) - If l ec et ee -> If (f l) (fmap f ec) (fmap f et) (fmap f ee) - Case l e alts -> Case (f l) (fmap f e) (map (fmap f) alts) - Do l ss -> Do (f l) (map (fmap f) ss) - MDo l ss -> MDo (f l) (map (fmap f) ss) - TupleSection l mes -> TupleSection (f l) (map (fmap (fmap f)) mes) - List l es -> List (f l) (map (fmap f) es) - Paren l e -> Paren (f l) (fmap f e) - RecConstr l qn fups -> RecConstr (f l) (fmap f qn) (map (fmap f) fups) - RecUpdate l e fups -> RecUpdate (f l) (fmap f e) (map (fmap f) fups) - EnumFrom l e -> EnumFrom (f l) (fmap f e) - EnumFromTo l ef et -> EnumFromTo (f l) (fmap f ef) (fmap f et) - EnumFromThen l ef et -> EnumFromThen (f l) (fmap f ef) (fmap f et) - EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) (fmap f ef) (fmap f eth) (fmap f eto) - ParComp l e qsss -> ParComp (f l) (fmap f e) (map (map (fmap f)) qsss) - ExpTypeSig l e t -> ExpTypeSig (f l) (fmap f e) (fmap f t) - - AsPat l n e -> AsPat (f l) (fmap f n) (fmap f e) - WildCard l -> WildCard (f l) - IrrPat l e -> IrrPat (f l) (fmap f e) - PostOp l e op -> PostOp (f l) (fmap f e) (fmap f op) - PreOp l op e -> PreOp (f l) (fmap f op) (fmap f e) - ViewPat l e1 e2 -> ViewPat (f l) (fmap f e1) (fmap f e2) - SeqRP l es -> SeqRP (f l) (map (fmap f) es) - GuardRP l e ss -> GuardRP (f l) (fmap f e) (map (fmap f) ss) - EitherRP l e1 e2 -> EitherRP (f l) (fmap f e1) (fmap f e2) - CAsRP l n e -> CAsRP (f l) (fmap f n) (fmap f e) - ExplTypeArg l n t -> ExplTypeArg (f l) (fmap f n) (fmap f t) - BangPat l e -> BangPat (f l) (fmap f e) - - VarQuote l qn -> VarQuote (f l) (fmap f qn) - TypQuote l qn -> TypQuote (f l) (fmap f qn) - BracketExp l br -> BracketExp (f l) (fmap f br) - SpliceExp l sp -> SpliceExp (f l) (fmap f sp) - QuasiQuote l sn se -> QuasiQuote (f l) sn se - - XTag l xn xas me es -> XTag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es) - XETag l xn xas me -> XETag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) - XPcdata l s -> XPcdata (f l) s - XExpTag l e -> XExpTag (f l) (fmap f e) - - CorePragma l s e -> CorePragma (f l) s (fmap f e) - SCCPragma l s e -> SCCPragma (f l) s (fmap f e) - GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 (fmap f e) - - Proc l p e -> Proc (f l) (fmap f p) (fmap f e) - LeftArrApp l e1 e2 -> LeftArrApp (f l) (fmap f e1) (fmap f e2) - RightArrApp l e1 e2 -> RightArrApp (f l) (fmap f e1) (fmap f e2) - LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) (fmap f e1) (fmap f e2) - RightArrHighApp l e1 e2 -> RightArrHighApp (f l) (fmap f e1) (fmap f e2) - - - -instance Functor PFieldUpdate where - fmap f (FieldUpdate l qn e) = FieldUpdate (f l) (fmap f qn) (fmap f e) - fmap f (FieldPun l n) = FieldPun (f l) (fmap f n) - fmap f (FieldWildcard l) = FieldWildcard (f l) - -instance Annotated PFieldUpdate where - ann (FieldUpdate l qn e) = l - ann (FieldPun l n) = l - ann (FieldWildcard l) = l - amap f (FieldUpdate l qn e) = FieldUpdate (f l) qn e - amap f (FieldPun l n) = FieldPun (f l) n - amap f (FieldWildcard l) = FieldWildcard (f l) - -instance Functor ParseXAttr where - fmap f (XAttr l xn e) = XAttr (f l) (fmap f xn) (fmap f e) - -instance Annotated ParseXAttr where - ann (XAttr l _ _) = l - amap f (XAttr l xn e) = XAttr (f l) xn e - -p_unit_con :: l -> PExp l -p_unit_con l = Con l (unit_con_name l) - -p_tuple_con :: l -> Boxed -> Int -> PExp l -p_tuple_con l b i = Con l (tuple_con_name l b i) - -p_unboxed_singleton_con :: l -> PExp l -p_unboxed_singleton_con l = Con l (unboxed_singleton_con_name l) - -data PContext l - = CxSingle l (PAsst l) - | CxTuple l [PAsst l] - | CxParen l (PContext l) - | CxEmpty l - deriving (Eq, Show) - -instance Functor PContext where - fmap f (CxSingle l asst) = CxSingle (f l) (fmap f asst) - fmap f (CxTuple l assts) = CxTuple (f l) (map (fmap f) assts) - fmap f (CxParen l ctxt) = CxParen (f l) (fmap f ctxt) - fmap f (CxEmpty l) = CxEmpty (f l) - -instance Annotated PContext where - ann (CxSingle l asst ) = l - ann (CxTuple l assts) = l - ann (CxParen l ctxt ) = l - ann (CxEmpty l) = l - amap f (CxSingle l asst ) = CxSingle (f l) asst - amap f (CxTuple l assts) = CxTuple (f l) assts - amap f (CxParen l ctxt ) = CxParen (f l) ctxt - amap f (CxEmpty l) = CxEmpty (f l) - -data PType l - = TyForall l - (Maybe [TyVarBind l]) - (Maybe (PContext l)) - (PType l) - | TyFun l (PType l) (PType l) -- ^ function type - | TyTuple l Boxed [PType l] -- ^ tuple type, possibly boxed - | TyList l (PType l) -- ^ list syntax, e.g. [a], as opposed to [] a - | TyApp l (PType l) (PType l) -- ^ application of a type constructor - | TyVar l (Name l) -- ^ type variable - | TyCon l (QName l) -- ^ named type or type constructor - | TyParen l (PType l) -- ^ type surrounded by parentheses - | TyPred l (PAsst l) -- ^ assertion of an implicit parameter - | TyInfix l (PType l) (QName l) (PType l) -- ^ infix type constructor - | TyKind l (PType l) (Kind l) -- ^ type with explicit kind signature - deriving (Eq, Show) - -instance Functor PType where - fmap f t = case t of - TyForall l mtvs mcx t -> TyForall (f l) (fmap (map (fmap f)) mtvs) (fmap (fmap f) mcx) (fmap f t) - TyFun l t1 t2 -> TyFun (f l) (fmap f t1) (fmap f t2) - TyTuple l b ts -> TyTuple (f l) b (map (fmap f) ts) - TyList l t -> TyList (f l) (fmap f t) - TyApp l t1 t2 -> TyApp (f l) (fmap f t1) (fmap f t2) - TyVar l n -> TyVar (f l) (fmap f n) - TyCon l qn -> TyCon (f l) (fmap f qn) - TyParen l t -> TyParen (f l) (fmap f t) - TyPred l asst -> TyPred (f l) (fmap f asst) - TyInfix l ta qn tb -> TyInfix (f l) (fmap f ta) (fmap f qn) (fmap f tb) - TyKind l t k -> TyKind (f l) (fmap f t) (fmap f k) - -instance Annotated PType where - ann t = case t of - TyForall l mtvs cx t -> l - TyFun l t1 t2 -> l - TyTuple l b ts -> l - TyList l t -> l - TyApp l t1 t2 -> l - TyVar l n -> l - TyCon l qn -> l - TyParen l t -> l - TyInfix l ta qn tb -> l - TyKind l t k -> l - amap f t = case t of - TyForall l mtvs mcx t -> TyForall (f l) mtvs mcx t - TyFun l t1 t2 -> TyFun (f l) t1 t2 - TyTuple l b ts -> TyTuple (f l) b ts - TyList l t -> TyList (f l) t - TyApp l t1 t2 -> TyApp (f l) t1 t2 - TyVar l n -> TyVar (f l) n - TyCon l qn -> TyCon (f l) qn - TyParen l t -> TyParen (f l) t - TyInfix l ta qn tb -> TyInfix (f l) ta qn tb - TyKind l t k -> TyKind (f l) t k - -data PAsst l - = ClassA l (QName l) [PType l] - | InfixA l (PType l) (QName l) (PType l) - | IParam l (IPName l) (PType l) - | EqualP l (PType l) (PType l) - deriving (Eq, Show) - -instance Functor PAsst where - fmap f asst = case asst of - ClassA l qn ts -> ClassA (f l) (fmap f qn) (map (fmap f) ts) - InfixA l ta qn tb -> InfixA (f l) (fmap f ta) (fmap f qn) (fmap f tb) - IParam l ipn t -> IParam (f l) (fmap f ipn) (fmap f t) - EqualP l t1 t2 -> EqualP (f l) (fmap f t1) (fmap f t2) - -instance Annotated PAsst where - ann asst = case asst of - ClassA l qn ts -> l - InfixA l ta qn tb -> l - IParam l ipn t -> l - EqualP l t1 t2 -> l - amap f asst = case asst of - ClassA l qn ts -> ClassA (f l) qn ts - InfixA l ta qn tb -> InfixA (f l) ta qn tb - IParam l ipn t -> IParam (f l) ipn t - EqualP l t1 t2 -> EqualP (f l) t1 t2 - - -unit_tycon, fun_tycon, list_tycon, unboxed_singleton_tycon :: l -> PType l -unit_tycon l = TyCon l (unit_tycon_name l) -fun_tycon l = TyCon l (fun_tycon_name l) -list_tycon l = TyCon l (list_tycon_name l) -unboxed_singleton_tycon l = TyCon l (unboxed_singleton_tycon_name l) - -tuple_tycon :: l -> Boxed -> Int -> PType l -tuple_tycon l b i = TyCon l (tuple_tycon_name l b i) +{-# LANGUAGE DeriveFunctor #-}+{-# OPTIONS_HADDOCK hide #-}+module Language.Haskell.Exts.ParseSyntax where++import Language.Haskell.Exts.Syntax hiding ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..), Context(..) )+import qualified Language.Haskell.Exts.Syntax as S ( Type(..), Promoted(..) )++---------------------------------------+-- Expressions as we parse them (and patterns, and regular patterns)++data PExp l+ = Var l (QName l) -- ^ variable+ | OverloadedLabel l String -- ^ overloaded label #foo+ | IPVar l (IPName l) -- ^ implicit parameter variable+ | Con l (QName l) -- ^ data constructor+ | Lit l (Literal l) -- ^ literal constant+ | InfixApp l (PExp l) (QOp l) (PExp l) -- ^ infix application+ | App l (PExp l) (PExp l) -- ^ ordinary application+ | NegApp l (PExp l) -- ^ negation expression @-@ /exp/+ | Lambda l [Pat l] (PExp l) -- ^ lambda expression+ | Let l (Binds l) (PExp l) -- ^ local declarations with @let@+ | If l (PExp l) (PExp l) (PExp l) -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/+ | MultiIf l [GuardedRhs l] -- ^ @if@ @|@ /stmts/ @->@ /exp/ ...+ | Case l (PExp l) [Alt l] -- ^ @case@ /exp/ @of@ /alts/+ | Do l [Stmt l] -- ^ @do@-expression:+ -- the last statement in the list+ -- should be an expression.+ | MDo l [Stmt l] -- ^ @mdo@-expression+ | TupleSection l Boxed [Maybe (PExp l)] -- ^ tuple section expression, e.g. @(,,3)@+ | UnboxedSum l Int Int (PExp l) -- ^ Unboxed sum+ | List l [PExp l] -- ^ list expression+ | ParArray l [PExp l] -- ^ parallel array expression+ | Paren l (PExp l) -- ^ parenthesized expression+ | RecConstr l (QName l) [PFieldUpdate l]+ -- ^ record construction expression+ | RecUpdate l (PExp l) [PFieldUpdate l]+ -- ^ record update expression+ | EnumFrom l (PExp l) -- ^ unbounded arithmetic sequence,+ -- incrementing by 1+ | EnumFromTo l (PExp l) (PExp l) -- ^ bounded arithmetic sequence,+ -- incrementing by 1+ | EnumFromThen l (PExp l) (PExp l) -- ^ unbounded arithmetic sequence,+ -- with first two elements given+ | EnumFromThenTo l (PExp l) (PExp l) (PExp l)+ -- ^ bounded arithmetic sequence,+ -- with first two elements given+ | ParArrayFromTo l (PExp l) (PExp l) -- ^ bounded arithmetic sequence,+ -- incrementing by 1+ | ParArrayFromThenTo l (PExp l) (PExp l) (PExp l)+ -- ^ bounded arithmetic sequence,+ -- with first two elements given+ | ParComp l (PExp l) [[QualStmt l]] -- ^ parallel list comprehension+ | ParArrayComp l (PExp l) [[QualStmt l]] -- ^ parallel array comprehension+ | ExpTypeSig l (PExp l) (S.Type l) -- ^ expression type signature+ | AsPat l (Name l) (PExp l) -- ^ patterns only+ | WildCard l -- ^ patterns only+ | IrrPat l (PExp l) -- ^ patterns only++-- Post-ops for parsing left sections and regular patterns. Not to be left in the final tree.+ | PostOp l (PExp l) (QOp l) -- ^ post-ops+ | PreOp l (QOp l) (PExp l) -- ^ pre-ops++-- View patterns+ | ViewPat l (PExp l) (Pat l) -- ^ patterns only++-- HaRP+ | SeqRP l [PExp l] -- ^ regular patterns only+ | GuardRP l (PExp l) [Stmt l] -- ^ regular patterns only+ | EitherRP l (PExp l) (PExp l) -- ^ regular patterns only+ | CAsRP l (Name l) (PExp l) -- ^ regular patterns only++-- Template Haskell+ | VarQuote l (QName l) -- ^ 'x+ | TypQuote l (QName l) -- ^ ''T+ | BracketExp l (Bracket l)+ | SpliceExp l (Splice l)+ | QuasiQuote l String String -- ^ [$...|...]++-- Hsx+ | XTag l (XName l) [ParseXAttr l] (Maybe (PExp l)) [PExp l]+ -- ^ <Name>...</Name>+ | XETag l (XName l) [ParseXAttr l] (Maybe (PExp l))+ -- ^ <Name />+ | XPcdata l String -- ^ PCDATA+ | XExpTag l (PExp l) -- ^ <% ... %>+ | XChildTag l [PExp l] -- ^ <%> ... </%>+ | XRPats l [PExp l] -- ^ <[ ... ]>++-- Pragmas+ | CorePragma l String (PExp l) -- ^ {-# CORE #-} pragma+ | SCCPragma l String (PExp l) -- ^ {-# SCC #-} pragma+ | GenPragma l String (Int, Int) (Int, Int) (PExp l)+ -- ^ {-# GENERATED ... #-} pragma++-- Bang Patterns+ | BangPat l (PExp l) -- ^ f !a = ...++-- Arrows+ | Proc l (Pat l) (PExp l) -- ^ proc p -> do+ | LeftArrApp l (PExp l) (PExp l) -- ^ e -< e+ | RightArrApp l (PExp l) (PExp l) -- ^ e >- e+ | LeftArrHighApp l (PExp l) (PExp l) -- ^ e -<< e+ | RightArrHighApp l (PExp l) (PExp l) -- ^ e >>- e+ | ArrOp l (PExp l) -- ^ (| e |)++-- LambdaCase+ | LCase l [Alt l] -- ^ @\case@ /alts/+ | TypeApp l (S.Type l)+ deriving (Eq,Show,Functor)++data PFieldUpdate l+ = FieldUpdate l (QName l) (PExp l)+ | FieldPun l (QName l)+ | FieldWildcard l+ deriving (Eq,Show,Functor)++data ParseXAttr l = XAttr l (XName l) (PExp l)+ deriving (Eq,Show,Functor)++instance Annotated PExp where+ ann e = case e of+ Var l _ -> l+ OverloadedLabel l _ -> l+ IPVar l _ -> l+ Con l _ -> l+ Lit l _ -> l+ InfixApp l _ _ _ -> l+ App l _ _ -> l+ NegApp l _ -> l+ Lambda l _ _ -> l+ Let l _ _ -> l+ If l _ _ _ -> l+ Case l _ _ -> l+ Do l _ -> l+ MDo l _ -> l+ TupleSection l _ _ -> l+ UnboxedSum l _ _ _ -> l+ List l _ -> l+ ParArray l _ -> l+ Paren l _ -> l+ RecConstr l _ _ -> l+ RecUpdate l _ _ -> l+ EnumFrom l _ -> l+ EnumFromTo l _ _ -> l+ EnumFromThen l _ _ -> l+ EnumFromThenTo l _ _ _ -> l+ ParArrayFromTo l _ _ -> l+ ParArrayFromThenTo l _ _ _ -> l+ ParComp l _ _ -> l+ ParArrayComp l _ _ -> l+ ExpTypeSig l _ _ -> l+ AsPat l _ _ -> l+ WildCard l -> l+ IrrPat l _ -> l+ PostOp l _ _ -> l+ PreOp l _ _ -> l+ ViewPat l _ _ -> l+ SeqRP l _ -> l+ GuardRP l _ _ -> l+ EitherRP l _ _ -> l+ CAsRP l _ _ -> l++ VarQuote l _ -> l+ TypQuote l _ -> l+ BracketExp l _ -> l+ SpliceExp l _ -> l+ QuasiQuote l _ _ -> l++ XTag l _ _ _ _ -> l+ XETag l _ _ _ -> l+ XPcdata l _ -> l+ XExpTag l _ -> l+ XChildTag l _ -> l+ XRPats l _ -> l++ CorePragma l _ _ -> l+ SCCPragma l _ _ -> l+ GenPragma l _ _ _ _ -> l++ BangPat l _ -> l++ Proc l _ _ -> l+ LeftArrApp l _ _ -> l+ RightArrApp l _ _ -> l+ LeftArrHighApp l _ _ -> l+ RightArrHighApp l _ _ -> l+ ArrOp l _ -> l++ LCase l _ -> l+ MultiIf l _ -> l+ TypeApp l _ -> l+++ amap f e' = case e' of+ Var l qn -> Var (f l) qn+ OverloadedLabel l qn -> OverloadedLabel (f l) qn+ IPVar l ipn -> IPVar (f l) ipn+ Con l qn -> Con (f l) qn+ Lit l lit -> Lit (f l) lit+ InfixApp l e1 qop e2 -> InfixApp (f l) e1 qop e2+ App l e1 e2 -> App (f l) e1 e2+ NegApp l e -> NegApp (f l) e+ Lambda l ps e -> Lambda (f l) ps e+ Let l bs e -> Let (f l) bs e+ If l ec et ee -> If (f l) ec et ee+ Case l e alts -> Case (f l) e alts+ Do l ss -> Do (f l) ss+ MDo l ss -> MDo (f l) ss+ TupleSection l bx mes -> TupleSection (f l) bx mes+ UnboxedSum l b a e -> UnboxedSum (f l) b a e+ List l es -> List (f l) es+ ParArray l es -> ParArray (f l) es+ Paren l e -> Paren (f l) e+ RecConstr l qn fups -> RecConstr (f l) qn fups+ RecUpdate l e fups -> RecUpdate (f l) e fups+ EnumFrom l e -> EnumFrom (f l) e+ EnumFromTo l ef et -> EnumFromTo (f l) ef et+ EnumFromThen l ef et -> EnumFromThen (f l) ef et+ EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) ef eth eto+ ParArrayFromTo l ef et -> ParArrayFromTo (f l) ef et+ ParArrayFromThenTo l ef eth eto -> ParArrayFromThenTo (f l) ef eth eto+ ParComp l e qsss -> ParComp (f l) e qsss+ ParArrayComp l e qsss -> ParArrayComp (f l) e qsss+ ExpTypeSig l e t -> ExpTypeSig (f l) e t++ AsPat l n e -> AsPat (f l) n e+ WildCard l -> WildCard (f l)+ IrrPat l e -> IrrPat (f l) e+ PostOp l e op -> PostOp (f l) e op+ PreOp l op e -> PreOp (f l) op e+ ViewPat l e1 e2 -> ViewPat (f l) e1 e2+ SeqRP l es -> SeqRP (f l) es+ GuardRP l e ss -> GuardRP (f l) e ss+ EitherRP l e1 e2 -> EitherRP (f l) e1 e2+ CAsRP l n e -> CAsRP (f l) n e+ BangPat l e -> BangPat (f l) e++ VarQuote l qn -> VarQuote (f l) qn+ TypQuote l qn -> TypQuote (f l) qn+ BracketExp l br -> BracketExp (f l) br+ SpliceExp l sp -> SpliceExp (f l) sp+ QuasiQuote l sn se -> QuasiQuote (f l) sn se++ XTag l xn xas me es -> XTag (f l) xn xas me es+ XETag l xn xas me -> XETag (f l) xn xas me+ XPcdata l s -> XPcdata (f l) s+ XExpTag l e -> XExpTag (f l) e+ XChildTag l es -> XChildTag (f l) es+ XRPats l es -> XRPats (f l) es++ CorePragma l s e -> CorePragma (f l) s e+ SCCPragma l s e -> SCCPragma (f l) s e+ GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 e++ Proc l p e -> Proc (f l) p e+ LeftArrApp l e1 e2 -> LeftArrApp (f l) e1 e2+ RightArrApp l e1 e2 -> RightArrApp (f l) e1 e2+ LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) e1 e2+ RightArrHighApp l e1 e2 -> RightArrHighApp (f l) e1 e2+ ArrOp l e -> ArrOp (f l) e++ LCase l alts -> LCase (f l) alts+ MultiIf l alts -> MultiIf (f l) alts+ TypeApp l ty -> TypeApp (f l) ty++instance Annotated PFieldUpdate where+ ann (FieldUpdate l _ _) = l+ ann (FieldPun l _) = l+ ann (FieldWildcard l) = l+ amap f (FieldUpdate l qn e) = FieldUpdate (f l) qn e+ amap f (FieldPun l n) = FieldPun (f l) n+ amap f (FieldWildcard l) = FieldWildcard (f l)++instance Annotated ParseXAttr where+ ann (XAttr l _ _) = l+ amap f (XAttr l xn e) = XAttr (f l) xn e++p_unit_con :: l -> PExp l+p_unit_con l = Con l (unit_con_name l)++p_tuple_con :: l -> Boxed -> Int -> PExp l+p_tuple_con l b i = Con l (tuple_con_name l b i)++p_unboxed_singleton_con :: l -> PExp l+p_unboxed_singleton_con l = Con l (unboxed_singleton_con_name l)++data PContext l+ = CxSingle l (PAsst l)+ | CxTuple l [PAsst l]+ | CxEmpty l+ deriving (Eq, Show, Functor)++instance Annotated PContext where+ ann (CxSingle l _ ) = l+ ann (CxTuple l _) = l+ ann (CxEmpty l) = l+ amap f (CxSingle l asst ) = CxSingle (f l) asst+ amap f (CxTuple l assts) = CxTuple (f l) assts+ amap f (CxEmpty l) = CxEmpty (f l)++data PType l+ = TyForall l+ (Maybe [TyVarBind l])+ (Maybe (PContext l))+ (PType l)+ | TyStar l -- ^ @*@, the type of types+ | TyFun l (PType l) (PType l) -- ^ function type+ | TyTuple l Boxed [PType l] -- ^ tuple type, possibly boxed+ | TyUnboxedSum l [PType l] -- ^ unboxed sum+ | TyList l (PType l) -- ^ list syntax, e.g. [a], as opposed to [] a+ | TyParArray l (PType l) -- ^ parallel array syntax, e.g. [:a:]+ | TyApp l (PType l) (PType l) -- ^ application of a type constructor+ | TyVar l (Name l) -- ^ type variable+ | TyCon l (QName l) -- ^ named type or type constructor+ | TyParen l (PType l) -- ^ type surrounded by parentheses+ | TyPred l (PAsst l) -- ^ assertion of an implicit parameter+ | TyInfix l (PType l) (MaybePromotedName l) (PType l) -- ^ infix type constructor+ | TyKind l (PType l) (Kind l) -- ^ type with explicit kind signature+ | TyPromoted l (S.Promoted l) -- ^ promoted data type+ | TyEquals l (PType l) (PType l) -- ^ type equality constraint+ | TySplice l (Splice l) -- ^ template haskell splice type+ | TyBang l (BangType l) (Unpackedness l) (PType l) -- ^ Strict type marked with \"@!@\" or type marked with UNPACK pragma.+ | TyWildCard l (Maybe (Name l)) -- ^ Type wildcard+ | TyQuasiQuote l String String -- ^ @[qq| |]@+ deriving (Eq, Show, Functor)++instance Annotated PType where+ ann t = case t of+ TyForall l _ _ _ -> l+ TyStar l -> l+ TyFun l _ _ -> l+ TyTuple l _ _ -> l+ TyUnboxedSum l _ -> l+ TyList l _ -> l+ TyParArray l _ -> l+ TyApp l _ _ -> l+ TyVar l _ -> l+ TyCon l _ -> l+ TyParen l _ -> l+ TyInfix l _ _ _ -> l+ TyKind l _ _ -> l+ TyPromoted l _ -> l+ TyEquals l _ _ -> l+ TyPred l _ -> l+ TySplice l _ -> l+ TyBang l _ _ _ -> l+ TyWildCard l _ -> l+ TyQuasiQuote l _ _ -> l+ amap f t' = case t' of+ TyForall l mtvs mcx t -> TyForall (f l) mtvs mcx t+ TyStar l -> TyStar (f l)+ TyFun l t1 t2 -> TyFun (f l) t1 t2+ TyTuple l b ts -> TyTuple (f l) b ts+ TyUnboxedSum l ts -> TyUnboxedSum (f l) ts+ TyList l t -> TyList (f l) t+ TyParArray l t -> TyParArray (f l) t+ TyApp l t1 t2 -> TyApp (f l) t1 t2+ TyVar l n -> TyVar (f l) n+ TyCon l qn -> TyCon (f l) qn+ TyParen l t -> TyParen (f l) t+ TyInfix l ta qn tb -> TyInfix (f l) ta qn tb+ TyKind l t k -> TyKind (f l) t k+ TyPromoted l p -> TyPromoted (f l) p+ TyEquals l t1 t2 -> TyEquals (f l) t1 t2+ TyPred l asst -> TyPred (f l) asst+ TySplice l s -> TySplice (f l) s+ TyBang l b u t -> TyBang (f l) b u t+ TyWildCard l mn -> TyWildCard (f l) mn+ TyQuasiQuote l n s -> TyQuasiQuote (f l) n s++data PAsst l+ = TypeA l (PType l)+ | IParam l (IPName l) (PType l)+ | ParenA l (PAsst l)+ deriving (Eq, Show, Functor)++instance Annotated PAsst where+ ann asst = case asst of+ TypeA l _ -> l+ IParam l _ _ -> l+ ParenA l _ -> l+ amap f asst = case asst of+ TypeA l t -> TypeA (f l) t+ IParam l ipn t -> IParam (f l) ipn t+ ParenA l a -> ParenA (f l) a
@@ -1,1374 +1,1311 @@ {-# OPTIONS_HADDOCK hide #-}--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Exts.ParseUtils--- Copyright : (c) Niklas Broberg 2004-2009,--- (c) The GHC Team, 1997-2000--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@chalmers.se--- Stability : stable--- Portability : portable------ Utilities for the Haskell-exts parser.-----------------------------------------------------------------------------------module Language.Haskell.Exts.ParseUtils (- splitTyConApp -- PType -> P (Name,[Type])- , checkEnabled -- (Show e, Enabled e) => e -> P ()- , checkPatternGuards -- [Stmt] -> P ()- , mkRecConstrOrUpdate -- PExp -> [PFieldUpdate] -> P Exp- , checkPrec -- Integer -> P Int- , checkPContext -- PType -> P PContext- , checkContext -- PContext -> P Context- , checkAssertion -- PType -> P PAsst- , checkDataHeader -- PType -> P (Context,Name,[TyVarBind])- , checkClassHeader -- PType -> P (Context,Name,[TyVarBind])- , checkInstHeader -- PType -> P (Context,QName,[Type])- , checkDeriving -- [PType] -> P [Deriving]- , checkPattern -- PExp -> P Pat- , checkExpr -- PExp -> P Exp- , checkType -- PType -> P Type- , checkValDef -- SrcLoc -> PExp -> Maybe Type -> Rhs -> Binds -> P Decl- , checkClassBody -- [ClassDecl] -> P [ClassDecl]- , checkInstBody -- [InstDecl] -> P [InstDecl]- , checkUnQual -- QName -> P Name- , checkRevDecls -- [Decl] -> P [Decl]- , checkRevClsDecls -- [ClassDecl] -> P [ClassDecl]- , checkRevInstDecls -- [InstDecl] -> P [InstDecl]- , checkDataOrNew -- DataOrNew -> [a] -> P ()- , checkSimpleType -- PType -> P (Name, [TyVarBind])- , checkSigVar -- PExp -> P Name- , getGConName -- S.Exp -> P QName- , mkTyForall -- Maybe [TyVarBind] -> PContext -> PType -> PType- -- HaRP- , checkRPattern -- PExp -> P RPat- -- Hsx- , checkEqNames -- XName -> XName -> P XName- , checkPageModule- , checkHybridModule- , mkDVar -- [String] -> String- -- Pragmas- , checkRuleExpr -- PExp -> P Exp- , readTool -- Maybe String -> Maybe Tool-- -- Parsed expressions and types- , PExp(..), PFieldUpdate(..), ParseXAttr(..), PType(..), PContext, PAsst(..)- , p_unit_con -- PExp- , p_tuple_con -- Boxed -> Int -> PExp- , p_unboxed_singleton_con -- PExp- ) where--import Language.Haskell.Exts.Annotated.Syntax hiding ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..), Context(..) )-import qualified Language.Haskell.Exts.Annotated.Syntax as S ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..), Context(..) )-import Language.Haskell.Exts.Annotated.Build--import Language.Haskell.Exts.ParseSyntax-import Language.Haskell.Exts.ParseMonad-import Language.Haskell.Exts.Pretty-import Language.Haskell.Exts.SrcLoc-import Language.Haskell.Exts.Extension-import Language.Haskell.Exts.ExtScheme--import Data.List (intersperse)-import Data.Maybe (fromJust)-import Control.Monad (when,liftM)----- import Debug.Trace (trace)--type L = SrcSpanInfo-type S = SrcSpan--splitTyConApp :: PType L -> P (Name L, [S.Type L])-splitTyConApp t0 = do- (n, pts) <- split t0 []- ts <- mapM checkType pts- return (n,ts)- where- split :: PType L -> [PType L] -> P (Name L, [PType L])- split (TyApp _ t u) ts = split t (u:ts)- split (TyCon _ (UnQual _ t)) ts = return (t,ts)- split (TyInfix l a op b) ts = split (TyCon l op) (a:b:ts)- split _ _ = fail "Illegal data/newtype declaration"---------------------------------------------------------------------------------- Checking for extensions--checkEnabled :: (Show e, Enabled e) => e -> P ()-checkEnabled e = do- exts <- getExtensions- if isEnabled e exts- then return ()- else fail $ show e ++ " is not enabled"--checkPatternGuards :: [Stmt L] -> P ()-checkPatternGuards [Qualifier _ _] = return ()-checkPatternGuards _ = checkEnabled PatternGuards---------------------------------------------------------------------------------- Checking contexts---- Check that a context is syntactically correct. Takes care of--- checking for MPTCs, TypeOperators, TypeFamilies (for eq constraints)--- and ImplicitParameters, but leaves checking of the class assertion--- parameters for later.-checkPContext :: PType L -> P (PContext L)-checkPContext (TyTuple l Boxed ts) =- mapM checkAssertion ts >>= return . CxTuple l-checkPContext (TyCon l (Special _ (UnitCon _))) =- return $ CxEmpty l-checkPContext (TyParen l t) = do- c <- checkPContext t- return $ CxParen l c-checkPContext t = do- c <- checkAssertion t- return $ CxSingle (ann c) c--------------------------------------------------------------------------------------------------------------------- WORKING HERE---- Check a single assertion according to the above, still leaving--- the class assertion parameters for later.-checkAssertion :: PType L -> P (PAsst L)--- We cannot even get here unless ImplicitParameters is enabled.-checkAssertion (TyPred _ p@(IParam _ _ _)) = return p--- We cannot even get here unless TypeFamilies is enabled.-checkAssertion (TyPred _ p@(EqualP _ _ _)) = return p-checkAssertion t = checkAssertion' id [] t- where -- class assertions must have at least one argument- checkAssertion' fl ts@(_:xs) (TyCon l c) = do- when (not $ null xs) $ checkEnabled MultiParamTypeClasses- when (isSymbol c) $ checkEnabled TypeOperators- return $ ClassA (fl l) c ts- checkAssertion' fl ts (TyApp l a t) = do- -- no check on t at this stage- checkAssertion' (const (fl l)) (t:ts) a- checkAssertion' fl ts (TyInfix l a op b) = do- -- infix operators require TypeOperators- checkEnabled TypeOperators- return $ InfixA (fl l) a op b- checkAssertion' fl ts (TyParen l t) =- checkAssertion' (const (fl l)) ts t- checkAssertion' _ _ _ = fail "Illegal class assertion"--isSymbol :: QName L -> Bool-isSymbol (UnQual _ (Symbol _ _)) = True-isSymbol (Qual _ _ (Symbol _ _)) = True-isSymbol _ = False----- Checks simple contexts for class and instance--- headers. If FlexibleContexts is enabled then--- anything goes, otherwise only tyvars are allowed.-checkSContext :: Maybe (PContext L) -> P (Maybe (S.Context L))-checkSContext (Just ctxt) = case ctxt of- CxEmpty l -> return $ Just $ S.CxEmpty l- CxSingle l a -> checkAsst True a >>= return . Just . S.CxSingle l- CxTuple l as -> mapM (checkAsst True) as >>= return . Just . S.CxTuple l- CxParen l cx -> checkSContext (Just cx) >>= return . fmap (S.CxParen l)-checkSContext _ = return Nothing---- Checks ordinary contexts for sigtypes and data type--- declarations. If FlexibleContexts is enabled then--- anything goes, otherwise only tyvars OR tyvars--- applied to types are allowed.-checkContext :: Maybe (PContext L) -> P (Maybe (S.Context L))-checkContext (Just ctxt) = case ctxt of- CxEmpty l -> return $ Just $ S.CxEmpty l- CxSingle l a -> checkAsst False a >>= return . Just . S.CxSingle l- CxTuple l as -> mapM (checkAsst False) as >>= return . Just . S.CxTuple l- CxParen l cx -> checkSContext (Just cx) >>= return . fmap (S.CxParen l)-checkContext _ = return Nothing--checkAsst :: Bool -> PAsst L -> P (S.Asst L)-checkAsst isSimple asst =- case asst of- ClassA l qn pts -> do- ts <- mapM (checkAsstParam isSimple) pts- return $ S.ClassA l qn ts- InfixA l a op b -> do- [a,b] <- mapM (checkAsstParam isSimple) [a,b]- return $ S.InfixA l a op b- IParam l ipn pt -> do- t <- checkType pt- return $ S.IParam l ipn t- EqualP l pa pb -> do- a <- checkType pa- b <- checkType pb- return $ S.EqualP l a b--checkAsstParam :: Bool -> PType L -> P (S.Type L)-checkAsstParam isSimple t = do- exts <- getExtensions- if FlexibleContexts `elem` exts- then checkType t- else case t of- TyVar l n -> return $ S.TyVar l n- TyApp l pf pt | not isSimple -> do- f <- checkAsstParam isSimple pf- t <- checkType pt- return $ S.TyApp l f t- _ -> fail "Malformed context: FlexibleContexts not enabled"---------------------------------------------------------------------------------- Checking Headers---checkDataHeader :: PType L -> P (Maybe (S.Context L), DeclHead L)-checkDataHeader (TyForall _ Nothing cs t) = do- dh <- checkSimple "data/newtype" t []- cs <- checkContext cs- return (cs,dh)-checkDataHeader t = do- dh <- checkSimple "data/newtype" t []- return (Nothing,dh)--checkClassHeader :: PType L -> P (Maybe (S.Context L), DeclHead L)-checkClassHeader (TyForall _ Nothing cs t) = do- dh <- checkSimple "class" t []- cs <- checkSContext cs- return (cs,dh)-checkClassHeader t = do- dh <- checkSimple "class" t []- return (Nothing,dh)--checkSimple :: String -> PType L -> [TyVarBind L] -> P (DeclHead L)-checkSimple kw (TyApp _ l t) xs | isTyVarBind t = checkSimple kw l (toTyVarBind t : xs)-checkSimple _ (TyInfix l t1 (UnQual _ t) t2) []- | isTyVarBind t1 && isTyVarBind t2 =- checkEnabled TypeOperators >> return (DHInfix l (toTyVarBind t1) t (toTyVarBind t2))-checkSimple _kw (TyCon l (UnQual _ t)) xs = do- case t of- Symbol _ _ -> checkEnabled TypeOperators- _ -> return ()- return (DHead l t xs)-checkSimple kw (TyParen l t) xs = do- dh <- checkSimple kw t xs- return (DHParen l dh)-checkSimple kw _ _ = fail ("Illegal " ++ kw ++ " declaration")--isTyVarBind :: PType L -> Bool-isTyVarBind (TyVar _ _) = True-isTyVarBind (TyKind _ (TyVar _ _) _) = True-isTyVarBind _ = False--toTyVarBind :: PType L -> TyVarBind L-toTyVarBind (TyVar l n) = UnkindedVar l n-toTyVarBind (TyKind l (TyVar _ n) k) = KindedVar l n k--checkInstHeader :: PType L -> P (Maybe (S.Context L), InstHead L)-checkInstHeader (TyForall _ Nothing cs t) = do- ih <- checkInsts t []- cs <- checkSContext cs- return (cs, ih)-checkInstHeader t = do- ih <- checkInsts t []- return (Nothing, ih)---checkInsts :: PType L -> [PType L] -> P (InstHead L)-checkInsts (TyApp _ l t) ts = checkInsts l (t:ts)-checkInsts (TyCon l c) ts = do- when (isSymbol c) $ checkEnabled TypeOperators- ts <- checkTypes ts- return $ IHead l c ts-checkInsts (TyInfix l a op b) [] = do- checkEnabled TypeOperators- [ta,tb] <- checkTypes [a,b]- return $ IHInfix l ta op tb-checkInsts (TyParen l t) [] = checkInsts t [] >>= return . IHParen l-checkInsts _ _ = fail "Illegal instance declaration"--checkDeriving :: [PType L] -> P [InstHead L]-checkDeriving = mapM (flip checkInsts [])---------------------------------------------------------------------------------- Checking Patterns.---- We parse patterns as expressions and check for valid patterns below,--- converting the expression into a pattern at the same time.--checkPattern :: PExp L -> P (Pat L)-checkPattern e = checkPat e []--checkPat :: PExp L -> [Pat L] -> P (Pat L)-checkPat (Con l c) args = return (PApp l c args)-checkPat (App l f x) args = do- x <- checkPat x []- checkPat f (x:args)-checkPat (InfixApp _ l op r) args- | op =~= (QVarOp () (UnQual () (Symbol () "!"))) = do- -- We must have BangPatterns on- checkEnabled BangPatterns- let (e,es) = splitBang r []- ps <- mapM checkPattern (BangPat (ann op) e:es)- checkPat l (ps++args)-checkPat e [] = case e of- Var l (UnQual _ x) -> return (PVar l x)- Lit l lit -> return (PLit l lit)- InfixApp loc l op r ->- case op of- QConOp _ c -> do- l <- checkPat l []- r <- checkPat r []- return (PInfixApp loc l c r)- QVarOp ppos (UnQual _ (Symbol _ "+")) -> do- case (l,r) of- (Var _ (UnQual _ n@(Ident _ _)), Lit _ (Int kpos k _)) -> do- let pp = srcInfoSpan ppos- kp = srcInfoSpan kpos- return (PNPlusK (loc <** [pp,kp]) n k)- _ -> patFail ""- _ -> patFail ""- TupleSection l mes ->- if not (any ((=~=) Nothing) mes)- then do ps <- mapM (\e -> checkPat e []) (map fromJust mes)- return (PTuple l ps)- else fail "Illegal tuple section in pattern"-- List l es -> do- ps <- mapM checkRPattern es- if all isStdPat ps- then return . PList l $ map stripRP ps- -- we don't allow truly regular patterns unless the extension is enabled- else checkEnabled RegularPatterns >> return (PRPat l $ map fixRPOpPrec ps)- where isStdPat :: RPat L -> Bool- isStdPat (RPPat _ _) = True- isStdPat (RPAs _ _ p) = isStdPat p- isStdPat (RPParen _ p) = isStdPat p- isStdPat _ = False- stripRP :: RPat L -> Pat L- stripRP (RPPat _ p) = p- stripRP (RPAs l n p) = PAsPat l n (stripRP p)- stripRP (RPParen l p) = PParen l (stripRP p)- stripRP _ = error "cannot strip RP wrapper if not all patterns are base"-- Paren l e -> do- p <- checkPat e []- return (PParen l p)- AsPat l n e -> do- p <- checkPat e []- return (PAsPat l n p)- WildCard l -> return (PWildCard l)- IrrPat l e -> do- p <- checkPat e []- return (PIrrPat l p)- ViewPat l e p -> do- e <- checkExpr e- p <- checkPat p []- return (PViewPat l e p)- RecConstr l c fs -> do- fs <- mapM checkPatField fs- return (PRec l c fs)- NegApp l1 (Lit l2 lit) -> return (PNeg l1 (PLit l2 lit))- ExpTypeSig l e t -> do- -- patterns cannot have signatures unless ScopedTypeVariables is enabled.- checkEnabled ScopedTypeVariables- p <- checkPat e []- return (PatTypeSig l p t)-- -- Hsx- XTag l n attrs mattr cs -> do- pattrs <- mapM checkPAttr attrs- pcs <- mapM (\c -> checkPat c []) cs- mpattr <- maybe (return Nothing)- (\e -> do p <- checkPat e []- return $ Just p)- mattr- let cps = mkChildrenPat pcs- return $ PXTag l n pattrs mpattr cps- XETag l n attrs mattr -> do- pattrs <- mapM checkPAttr attrs- mpattr <- maybe (return Nothing)- (\e -> do p <- checkPat e []- return $ Just p)- mattr- return $ PXETag l n pattrs mpattr- XPcdata l pcdata -> return $ PXPcdata l pcdata- XExpTag l e -> do- p <- checkPat e []- return $ PXPatTag l p- XRPats l es -> do- rps <- mapM checkRPattern es- return (PXRPats l $ map fixRPOpPrec rps)-- -- Generics- ExplTypeArg l qn t -> return $ PExplTypeArg l qn t-- -- QuasiQuotation- QuasiQuote l n q -> return $ PQuasiQuote l n q-- -- BangPatterns- BangPat l e -> do- p <- checkPat e []- return $ PBangPat l p-- PreOp l (QVarOp _ (UnQual _ (Symbol _ "!"))) e -> do- checkEnabled BangPatterns- p <- checkPat e []- return $ PBangPat l p-- e -> patFail $ prettyPrint e--checkPat e _ = patFail $ prettyPrint e--splitBang :: PExp L -> [PExp L] -> (PExp L, [PExp L])-splitBang (App _ f x) es = splitBang f (x:es)-splitBang e es = (e, es)--checkPatField :: PFieldUpdate L -> P (PatField L)-checkPatField (FieldUpdate l n e) = do- p <- checkPat e []- return (PFieldPat l n p)-checkPatField (FieldPun l n) = return (PFieldPun l n)-checkPatField (FieldWildcard l) = return (PFieldWildcard l)--checkPAttr :: ParseXAttr L -> P (PXAttr L)-checkPAttr (XAttr l n v) = do p <- checkPat v []- return $ PXAttr l n p--patFail :: String -> P a-patFail s = fail $ "Parse error in pattern: " ++ s--checkRPattern :: PExp L -> P (RPat L)-checkRPattern e = case e of- SeqRP l es -> do- rps <- mapM checkRPattern es- return $ RPSeq l rps- PostOp l e op -> do- rpop <- checkRPatOp op- rp <- checkRPattern e- return $ RPOp l rp rpop- GuardRP l e gs -> do- rp <- checkPattern e- return $ RPGuard l rp gs- EitherRP l e1 e2 -> do- rp1 <- checkRPattern e1- rp2 <- checkRPattern e2- return $ RPEither l rp1 rp2- CAsRP l n e -> do- rp <- checkRPattern e- return $ RPCAs l n rp- AsPat l n e -> do- rp <- checkRPattern e- return $ RPAs l n rp- Paren l e -> do- rp <- checkRPattern e- return $ RPParen l rp- _ -> do- p <- checkPattern e- return $ RPPat (ann p) p--checkRPatOp :: QOp L -> P (RPatOp L)-checkRPatOp o@(QVarOp l (UnQual _ (Symbol _ sym))) =- case sym of- "*" -> return $ RPStar l- "*!" -> return $ RPStarG l- "+" -> return $ RPPlus l- "+!" -> return $ RPPlusG l- "?" -> return $ RPOpt l- "?!" -> return $ RPOptG l- _ -> rpOpFail o-checkRPatOp o = rpOpFail o--rpOpFail sym = fail $ "Unrecognized regular pattern operator: " ++ prettyPrint sym--fixRPOpPrec :: RPat L -> RPat L-fixRPOpPrec rp = case rp of- RPOp l rp rpop -> fPrecOp rp (flip (RPOp l) rpop)- RPEither l rp1 rp2 -> RPEither l (fixRPOpPrec rp1) (fixRPOpPrec rp2)- RPSeq l rps -> RPSeq l $ map fixRPOpPrec rps- RPCAs l n rp -> RPCAs l n $ fixRPOpPrec rp- RPAs l n rp -> RPAs l n $ fixRPOpPrec rp- RPParen l rp -> RPParen l $ fixRPOpPrec rp- _ -> rp-- where fPrecOp :: RPat L -> (RPat L -> RPat L) -> RPat L- fPrecOp (RPOp l rp rpop) f = fPrecOp rp (f . flip (RPOp l) rpop)- fPrecOp (RPCAs l n rp) f = fPrecAs rp f (RPCAs l n)- fPrecOp (RPAs l n rp) f = fPrecAs rp f (RPAs l n)- fPrecOp rp f = f $ fixRPOpPrec rp- fPrecAs :: RPat L -> (RPat L -> RPat L) -> (RPat L -> RPat L) -> RPat L- fPrecAs (RPCAs l n rp) f g = fPrecAs rp f (g . RPCAs l n)- fPrecAs (RPAs l n rp) f g = fPrecAs rp f (g . RPAs l n)- fPrecAs rp f g = g . f $ fixRPOpPrec rp---mkChildrenPat :: [Pat L] -> [Pat L]-mkChildrenPat ps = mkCPAux ps []- where mkCPAux :: [Pat L] -> [Pat L] -> [Pat L]- mkCPAux [] qs = reverse qs- mkCPAux (p:ps) qs = case p of- (PRPat l rps) -> [mkCRP l ps (reverse rps ++ map (\q -> RPPat (ann q) q) qs)]- _ -> mkCPAux ps (p:qs)-- mkCRP :: L -> [Pat L] -> [RPat L] -> Pat L- mkCRP l [] rps = PXRPats l $ reverse rps- mkCRP _ (p:ps) rps = case p of- (PXRPats l rqs) -> mkCRP l ps (reverse rqs ++ rps)- _ -> mkCRP (ann p) ps (RPPat (ann p) p : rps)---------------------------------------------------------------------------------- Check Expression Syntax--checkExpr :: PExp L -> P (S.Exp L)-checkExpr e = case e of- Var l v -> return $ S.Var l v- IPVar l v -> return $ S.IPVar l v- Con l c -> return $ S.Con l c- Lit l lit -> return $ S.Lit l lit- InfixApp l e1 op e2 -> check2Exprs e1 e2 (flip (S.InfixApp l) op)- App l e1 e2 -> check2Exprs e1 e2 (S.App l)- NegApp l e -> check1Expr e (S.NegApp l)- Lambda loc ps e -> check1Expr e (S.Lambda loc ps)- Let l bs e -> check1Expr e (S.Let l bs)- If l e1 e2 e3 -> check3Exprs e1 e2 e3 (S.If l)- Case l e alts -> do- e <- checkExpr e- return (S.Case l e alts)- Do l stmts -> checkDo stmts >> return (S.Do l stmts)- MDo l stmts -> checkDo stmts >> return (S.MDo l stmts)- TupleSection l mes -> if not (any ((=~=) Nothing) mes)- then checkManyExprs (map fromJust mes) (S.Tuple l)- else do checkEnabled TupleSections- mes' <- mapM mCheckExpr mes- return $ S.TupleSection l mes'--- List l es -> checkManyExprs es (S.List l)- -- Since we don't parse things as left or right sections, we need to mangle them into that.- Paren l e -> case e of- PostOp _ e1 op -> check1Expr e1 (flip (S.LeftSection l) op)- PreOp _ op e2 -> check1Expr e2 (S.RightSection l op)- _ -> check1Expr e (S.Paren l)- RecConstr l c fields -> do- fields <- mapM checkField fields- return (S.RecConstr l c fields)- RecUpdate l e fields -> do- fields <- mapM checkField fields- e <- checkExpr e- return (S.RecUpdate l e fields)- EnumFrom l e -> check1Expr e (S.EnumFrom l)- EnumFromTo l e1 e2 -> check2Exprs e1 e2 (S.EnumFromTo l)- EnumFromThen l e1 e2 -> check2Exprs e1 e2 (S.EnumFromThen l)- EnumFromThenTo l e1 e2 e3 -> check3Exprs e1 e2 e3 (S.EnumFromThenTo l)- -- a parallel list comprehension, which could be just a simple one- ParComp l e qualss -> do- e <- checkExpr e- case qualss of- [quals] -> return (S.ListComp l e quals)- _ -> return (S.ParComp l e qualss)- ExpTypeSig loc e ty -> do- e <- checkExpr e- return (S.ExpTypeSig loc e ty)-- --Template Haskell- BracketExp l e -> return $ S.BracketExp l e- SpliceExp l e -> return $ S.SpliceExp l e- TypQuote l q -> return $ S.TypQuote l q- VarQuote l q -> return $ S.VarQuote l q- QuasiQuote l n q -> return $ S.QuasiQuote l n q-- -- Hsx- XTag l n attrs mattr cs -> do attrs <- mapM checkAttr attrs- cs <- mapM checkExpr cs- mattr <- maybe (return Nothing)- (\e -> checkExpr e >>= return . Just)- mattr- return $ S.XTag l n attrs mattr cs- XETag l n attrs mattr -> do attrs <- mapM checkAttr attrs- mattr <- maybe (return Nothing)- (\e -> checkExpr e >>= return . Just)- mattr- return $ S.XETag l n attrs mattr- XPcdata l p -> return $ S.XPcdata l p- XExpTag l e -> do e <- checkExpr e- return $ S.XExpTag l e- -- Pragmas- CorePragma l s e -> check1Expr e (S.CorePragma l s)- SCCPragma l s e -> check1Expr e (S.SCCPragma l s)- GenPragma l s xx yy e -> check1Expr e (S.GenPragma l s xx yy)--- UnknownExpPragma n s -> return $ S.UnknownExpPragma n s-- -- Arrows- Proc l p e -> do e <- checkExpr e- return $ S.Proc l p e- LeftArrApp l e1 e2 -> check2Exprs e1 e2 (S.LeftArrApp l)- RightArrApp l e1 e2 -> check2Exprs e1 e2 (S.RightArrApp l)- LeftArrHighApp l e1 e2 -> check2Exprs e1 e2 (S.LeftArrHighApp l)- RightArrHighApp l e1 e2 -> check2Exprs e1 e2 (S.RightArrHighApp l)-- _ -> fail $ "Parse error in expression: " ++ prettyPrint e--checkAttr :: ParseXAttr L -> P (S.XAttr L)-checkAttr (XAttr l n v) = do v <- checkExpr v- return $ S.XAttr l n v--checkDo [] = fail "Parse error: Last statement in a do-block must be an expression"-checkDo [Qualifier _ _] = return ()-checkDo (_:xs) = checkDo xs---- type signature for polymorphic recursion!!-check1Expr :: PExp L -> (S.Exp L -> a) -> P a-check1Expr e1 f = do- e1 <- checkExpr e1- return (f e1)--check2Exprs :: PExp L -> PExp L -> (S.Exp L -> S.Exp L -> a) -> P a-check2Exprs e1 e2 f = do- e1 <- checkExpr e1- e2 <- checkExpr e2- return (f e1 e2)--check3Exprs :: PExp L -> PExp L -> PExp L -> (S.Exp L -> S.Exp L -> S.Exp L -> a) -> P a-check3Exprs e1 e2 e3 f = do- e1 <- checkExpr e1- e2 <- checkExpr e2- e3 <- checkExpr e3- return (f e1 e2 e3)--checkManyExprs :: [PExp L] -> ([S.Exp L] -> a) -> P a-checkManyExprs es f = do- es <- mapM checkExpr es- return (f es)--mCheckExpr :: Maybe (PExp L) -> P (Maybe (S.Exp L))-mCheckExpr Nothing = return Nothing-mCheckExpr (Just e) = checkExpr e >>= return . Just--checkRuleExpr :: PExp L -> P (S.Exp L)-checkRuleExpr = checkExpr--readTool :: Maybe String -> Maybe Tool-readTool = fmap readC- where readC str = case str of- "GHC" -> GHC- "HUGS" -> HUGS- "NHC98" -> NHC98- "YHC" -> YHC- "HADDOCK" -> HADDOCK- _ -> UnknownTool str--checkField :: PFieldUpdate L -> P (S.FieldUpdate L)-checkField (FieldUpdate l n e) = check1Expr e (S.FieldUpdate l n)-checkField (FieldPun l n) = return $ S.FieldPun l n-checkField (FieldWildcard l) = return $ S.FieldWildcard l--getGConName :: S.Exp L -> P (QName L)-getGConName (S.Con _ n) = return n-getGConName (S.List l []) = return (list_cons_name l)-getGConName _ = fail "Expression in reification is not a name"---------------------------------------------------------------------------------- Check Equation Syntax--checkValDef :: L -> PExp L -> Maybe (S.Type L) -> Rhs L -> Maybe (Binds L) -> P (Decl L)-checkValDef l lhs optsig rhs whereBinds = do- mlhs <- isFunLhs lhs []- case mlhs of- Just (f,es,b) -> do- ps <- mapM checkPattern es- case optsig of -- only pattern bindings can have signatures- Nothing -> return (FunBind l $- if b then [Match l f ps rhs whereBinds]- else let [a,b] = ps in [InfixMatch l a f b rhs whereBinds])- Just _ -> fail "Cannot give an explicit type signature to a function binding"- Nothing -> do- lhs <- checkPattern lhs- return (PatBind l lhs optsig rhs whereBinds)---- A variable binding is parsed as a PatBind.--isFunLhs :: PExp L -> [PExp L] -> P (Maybe (Name L, [PExp L], Bool))-isFunLhs (InfixApp _ l (QVarOp loc (UnQual _ op)) r) es- | op =~= (Symbol () "!") = do- exts <- getExtensions- if BangPatterns `elem` exts- then let (b,bs) = splitBang r []- in isFunLhs l (BangPat loc b : bs ++ es)- else return $ Just (op, l:r:es, False) -- It's actually a definition of the operator !- | otherwise = return $ Just (op, l:r:es, False)-isFunLhs (App _ (Var _ (UnQual _ f)) e) es = return $ Just (f, e:es, True)-isFunLhs (App _ f e) es = isFunLhs f (e:es)-isFunLhs (Var _ (UnQual _ f)) es@(_:_) = return $ Just (f, es, True)-isFunLhs (Paren _ f) es@(_:_) = isFunLhs f es-isFunLhs _ _ = return Nothing---- Separating between signature declarations and value definitions in--- a post-processing step--checkSigVar :: PExp L -> P (Name L)-checkSigVar (Var _ (UnQual _ n)) = return n-checkSigVar e = fail $ "Left-hand side of type signature is not a variable: " ++ prettyPrint e---------------------------------------------------------------------------------- In a class or instance body, a pattern binding must be of a variable.--checkClassBody :: [ClassDecl L] -> P [ClassDecl L]-checkClassBody decls = do- mapM_ checkClassMethodDef decls- return decls- where checkClassMethodDef (ClsDecl _ decl) = checkMethodDef decl- checkClassMethodDef _ = return ()--checkInstBody :: [InstDecl L] -> P [InstDecl L]-checkInstBody decls = do- mapM_ checkInstMethodDef decls- return decls- where checkInstMethodDef (InsDecl _ decl) = checkMethodDef decl- checkInstMethodDef _ = return ()--checkMethodDef :: Decl L -> P ()-checkMethodDef (PatBind _ (PVar _ _) _ _ _) = return ()-checkMethodDef (PatBind loc _ _ _ _) =- fail "illegal method definition" -- `atSrcLoc` loc-checkMethodDef _ = return ()---------------------------------------------------------------------------------- Check that an identifier or symbol is unqualified.--- For occasions when doing this in the grammar would cause conflicts.--checkUnQual :: QName L -> P (Name L)-checkUnQual (Qual _ _ _) = fail "Illegal qualified name"-checkUnQual (UnQual _ n) = return n-checkUnQual (Special _ _) = fail "Illegal special name"---------------------------------------------------------------------------------- Check that two xml tag names are equal--- Could use Eq directly, but I am not sure whether <dom:name>...</name>--- would be valid, in that case Eq won't work. TODO--checkEqNames :: XName L -> XName L -> P (XName L)-checkEqNames n@(XName _ n1) (XName _ n2)- | n1 == n2 = return n- | otherwise = fail "names in matching xml tags are not equal"-checkEqNames n@(XDomName _ d1 n1) (XDomName _ d2 n2)- | n1 == n2 && d1 == d2 = return n- | otherwise = fail "names in matching xml tags are not equal"-checkEqNames _ _ = fail "names in matching xml tags are not equal"----------------------------------------------------------------------------------- Miscellaneous utilities--checkPrec :: Integer -> P Int-checkPrec i | 0 <= i && i <= 9 = return (fromInteger i)-checkPrec i | otherwise = fail ("Illegal precedence " ++ show i)--mkRecConstrOrUpdate :: PExp L -> [PFieldUpdate L] -> P (PExp L)-mkRecConstrOrUpdate (Con l c) fs = return (RecConstr l c fs)-mkRecConstrOrUpdate e fs@(_:_) = return (RecUpdate (ann e) e fs)-mkRecConstrOrUpdate _ _ = fail "Empty record update"---------------------------------------------------------------------------------- Reverse a list of declarations, merging adjacent FunBinds of the--- same name and checking that their arities match.--checkRevDecls :: [Decl L] -> P [Decl L]-checkRevDecls = mergeFunBinds []- where- mergeFunBinds revDs [] = return revDs- mergeFunBinds revDs (FunBind l ms1@(Match _ name ps _ _:_):ds1) =- mergeMatches ms1 ds1 l- where- arity = length ps- mergeMatches ms' (FunBind _ ms@(Match loc name' ps' _ _:_):ds) l- | name' =~= name =- if length ps' /= arity- then fail ("arity mismatch for '" ++ prettyPrint name ++ "'")- -- `atSrcLoc` loc- else mergeMatches (ms++ms') ds (loc <++> l)- mergeMatches ms' ds l = mergeFunBinds (FunBind l ms':revDs) ds- mergeFunBinds revDs (d:ds) = mergeFunBinds (d:revDs) ds--checkRevClsDecls :: [ClassDecl L] -> P [ClassDecl L]-checkRevClsDecls = mergeClsFunBinds []- where- mergeClsFunBinds revDs [] = return revDs- mergeClsFunBinds revDs (ClsDecl l (FunBind _ ms1@(Match _ name ps _ _:_)):ds1) =- mergeMatches ms1 ds1 l- where- arity = length ps- mergeMatches ms' (ClsDecl _ (FunBind _ ms@(Match loc name' ps' _ _:_)):ds) l- | name' =~= name =- if length ps' /= arity- then fail ("arity mismatch for '" ++ prettyPrint name ++ "'")- -- `atSrcLoc` loc- else mergeMatches (ms++ms') ds (loc <++> l)- mergeMatches ms' ds l = mergeClsFunBinds (ClsDecl l (FunBind l ms'):revDs) ds- mergeClsFunBinds revDs (d:ds) = mergeClsFunBinds (d:revDs) ds--checkRevInstDecls :: [InstDecl L] -> P [InstDecl L]-checkRevInstDecls = mergeInstFunBinds []- where- mergeInstFunBinds :: [InstDecl L] -> [InstDecl L] -> P [InstDecl L]- mergeInstFunBinds revDs [] = return revDs- mergeInstFunBinds revDs (InsDecl l (FunBind _ ms1@(Match _ name ps _ _:_)):ds1) =- mergeMatches ms1 ds1 l- where- arity = length ps- mergeMatches ms' (InsDecl _ (FunBind _ ms@(Match loc name' ps' _ _:_)):ds) l- | name' =~= name =- if length ps' /= arity- then fail ("arity mismatch for '" ++ prettyPrint name ++ "'")- -- `atSrcLoc` loc- else mergeMatches (ms++ms') ds (loc <++> l)- mergeMatches ms' ds l = mergeInstFunBinds (InsDecl l (FunBind l ms'):revDs) ds- mergeInstFunBinds revDs (d:ds) = mergeInstFunBinds (d:revDs) ds--------------------------------------------------------------------- Check that newtype declarations have--- the right number (1) of constructors--checkDataOrNew :: DataOrNew L -> [a] -> P ()-checkDataOrNew (NewType _) [x] = return ()-checkDataOrNew (DataType _) _ = return ()-checkDataOrNew _ _ = fail "newtype declaration must have exactly one constructor."--checkSimpleType :: PType L -> P (DeclHead L)-checkSimpleType t = checkSimple "test" t []-------------------------------------------- Check actual types--checkType :: PType L -> P (S.Type L)-checkType t = checkT t False--checkT :: PType L -> Bool -> P (S.Type L)-checkT t simple = case t of- TyForall l tvs@Nothing cs pt -> do- when (simple) $ checkEnabled ExplicitForall- ctxt <- checkContext cs- check1Type pt (S.TyForall l Nothing ctxt)- TyForall l tvs cs pt -> do- checkEnabled ExplicitForall- ctxt <- checkContext cs- check1Type pt (S.TyForall l tvs ctxt)- TyFun l at rt -> check2Types at rt (S.TyFun l)- TyTuple l b pts -> checkTypes pts >>= return . S.TyTuple l b- TyList l pt -> check1Type pt (S.TyList l)- TyApp l ft at -> check2Types ft at (S.TyApp l)- TyVar l n -> return $ S.TyVar l n- TyCon l n -> do- when (isSymbol n) $ checkEnabled TypeOperators- return $ S.TyCon l n- TyParen l pt -> check1Type pt (S.TyParen l)- -- Here we know that t will be used as an actual type (and not a data constructor)- -- so we can check that TypeOperators are enabled.- TyInfix l at op bt -> checkEnabled TypeOperators >> check2Types at bt (flip (S.TyInfix l) op)- TyKind l pt k -> check1Type pt (flip (S.TyKind l) k)-- -- TyPred cannot be a valid type- _ -> fail $ "Parse error in type: " ++ prettyPrint t--check1Type :: PType L -> (S.Type L -> S.Type L) -> P (S.Type L)-check1Type pt f = checkT pt True >>= return . f--check2Types :: PType L -> PType L -> (S.Type L -> S.Type L -> S.Type L) -> P (S.Type L)-check2Types at bt f = checkT at True >>= \a -> checkT bt True >>= \b -> return (f a b)--checkTypes :: [PType L] -> P [S.Type L]-checkTypes = mapM (flip checkT True)-------------------------------------------- Converting a complete page--checkPageModule :: PExp L -> ([OptionPragma L],[S],L) -> P (Module L)-checkPageModule xml (os,ss,inf) = do- mod <- getModuleName- xml <- checkExpr xml- case xml of- S.XTag l xn ats mattr cs -> return $ XmlPage (inf<++>l<**(srcInfoPoints l ++ ss)) (ModuleName l mod) os xn ats mattr cs- S.XETag l xn ats mattr -> return $ XmlPage (inf<++>l<**(srcInfoPoints l ++ ss)) (ModuleName l mod) os xn ats mattr []--checkHybridModule :: PExp L -> Module L -> S -> S -> P (Module L)-checkHybridModule xml (Module inf mh os is ds) s1 s2 = do- xml <- checkExpr xml- case xml of- S.XTag l xn ats mattr cs -> return $ XmlHybrid (inf<++>l<**(s1 : srcInfoPoints inf ++ s2 : srcInfoPoints l))- mh os is ds xn ats mattr cs- S.XETag l xn ats mattr -> return $ XmlHybrid (inf<++>l<**(s1 : srcInfoPoints inf ++ s2 : srcInfoPoints l))- mh os is ds xn ats mattr []--{--pageFun :: L -> S.Exp L -> Decl L-pageFun loc e = PatBind loc namePat Nothing rhs Nothing- where namePat = PVar loc $ Ident loc "page"- rhs = UnGuardedRhs (ann e) e--mkPage :: Module L -> L -> S.Exp L -> P (Module L)-mkPage (Module src mmh os imps decls) loc xml = do- let page = pageFun loc xml- return $ Module src mmh os imps (decls ++ [page])--mkPageModule :: [OptionPragma L] -> S.Exp L -> P (Module L)-mkPageModule os xml = do- do loc <- case xml of- S.XTag l _ _ _ _ -> return l- S.XETag l _ _ _ -> return l- _ -> fail "Will not happen since mkPageModule is only called on XML expressions"- mod <- getModuleName- return $ (Module- loc- (ModuleName loc mod)- os- Nothing- (Just (ExportSpecList loc [EVar loc $ UnQual loc $ Ident loc "page"]))- []- [pageFun loc xml])--}------------------------------------------- Handle dash-identifiers--mkDVar :: [String] -> String-mkDVar = concat . intersperse "-"----mkDVarExpr :: L -> [String] -> PExp L---mkDVarExpr l = foldl1 (\x y -> InfixApp l x (op $ sym "-") y) . map (Var l . UnQual l . name)-------------------------------------------- Combine adjacent for-alls. NO!------ A valid type must have one for-all at the top of the type, or of the fn arg types--mkTyForall :: L -> Maybe [TyVarBind L] -> Maybe (PContext L) -> PType L -> PType L---mkTyForall l mtvs (PContext _ []) ty = mk_forall_ty l mtvs ty-mkTyForall l mtvs ctxt ty = TyForall l mtvs ctxt ty--{-- mk_forall_ty makes a pure for-all type (no context)-mk_forall_ty l (Just []) ty = ty -- Explicit for-all with no tyvars-mk_forall_ty l mtvs1 (TyForall _ mtvs2 ctxt ty) = mkTyForall l (mtvs1 `plus` mtvs2) ctxt ty-mk_forall_ty l mtvs1 ty = TyForall l mtvs1 (PContext l []) ty--mtvs1 `plus` Nothing = mtvs1-Nothing `plus` mtvs2 = mtvs2-(Just tvs1) `plus` (Just tvs2) = Just (tvs1 ++ tvs2)--}-----------------------------------------{-- Expressions as we parse them (and patters, and regular patterns)--data PExp l- = Var l (QName l) -- ^ variable- | IPVar l (IPName l) -- ^ implicit parameter variable- | Con l (QName l) -- ^ data constructor- | Lit l (Literal l) -- ^ literal constant- | InfixApp l (PExp l) (QOp l) (PExp l) -- ^ infix application- | App l (PExp l) (PExp l) -- ^ ordinary application- | NegApp l (PExp l) -- ^ negation expression @-@ /exp/- | Lambda l [Pat l] (PExp l) -- ^ lambda expression- | Let l (Binds l) (PExp l) -- ^ local declarations with @let@- | If l (PExp l) (PExp l) (PExp l) -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/- | Case l (PExp l) [Alt l] -- ^ @case@ /exp/ @of@ /alts/- | Do l [Stmt l] -- ^ @do@-expression:- -- the last statement in the list- -- should be an expression.- | MDo l [Stmt l] -- ^ @mdo@-expression--- | Tuple [PExp] -- ^ tuple expression- | TupleSection l [Maybe (PExp l)] -- ^ tuple section expression, e.g. @(,,3)@- | List l [PExp l] -- ^ list expression- | Paren l (PExp l) -- ^ parenthesized expression--- RightSection QOp PExp -- ^ right section @(@/qop/ /exp/@)@- | RecConstr l (QName l) [PFieldUpdate l]- -- ^ record construction expression- | RecUpdate l (PExp l) [PFieldUpdate l]- -- ^ record update expression- | EnumFrom l (PExp l) -- ^ unbounded arithmetic sequence,- -- incrementing by 1- | EnumFromTo l (PExp l) (PExp l) -- ^ bounded arithmetic sequence,- -- incrementing by 1- | EnumFromThen l (PExp l) (PExp l) -- ^ unbounded arithmetic sequence,- -- with first two elements given- | EnumFromThenTo l (PExp l) (PExp l) (PExp l)- -- ^ bounded arithmetic sequence,- -- with first two elements given- | ParComp l (PExp l) [[QualStmt l]] -- ^ parallel list comprehension- | ExpTypeSig l (PExp l) (S.Type l)- -- ^ expression type signature- | AsPat l (Name l) (PExp l) -- ^ patterns only- | WildCard l -- ^ patterns only- | IrrPat l (PExp l) -- ^ patterns only---- Post-ops for parsing left sections and regular patterns. Not to be left in the final tree.- | PostOp l (PExp l) (QOp l) -- ^ post-ops- | PreOp l (QOp l) (PExp l) -- ^ pre-ops---- View patterns- | ViewPat l (PExp l) (PExp l) -- ^ patterns only---- HaRP- | SeqRP l [PExp l] -- ^ regular patterns only- | GuardRP l (PExp l) [Stmt l] -- ^ regular patterns only- | EitherRP l (PExp l) (PExp l) -- ^ regular patterns only- | CAsRP l (Name l) (PExp l) -- ^ regular patterns only---- Template Haskell- | VarQuote l (QName l) -- ^ 'x- | TypQuote l (QName l) -- ^ ''T- | BracketExp l (Bracket l)- | SpliceExp l (Splice l)- | QuasiQuote l String String -- ^ [$...|...]---- Hsx- | XTag l (XName l) [ParseXAttr l] (Maybe (PExp l)) [PExp l]- | XETag l (XName l) [ParseXAttr l] (Maybe (PExp l))- | XPcdata l String- | XExpTag l (PExp l)- | XRPats l [PExp l]---- Pragmas- | CorePragma l String (PExp l)- | SCCPragma l String (PExp l)- | GenPragma l String (Int, Int) (Int, Int) (PExp l)--- | UnknownExpPragma String String---- Generics- | ExplTypeArg l (QName l) (S.Type l) -- ^ f {| Int |} x = ...---- Bang Patterns- | BangPat l (PExp l) -- ^ f !a = ...---- Arrows- | Proc l (Pat l) (PExp l)- | LeftArrApp l (PExp l) (PExp l)- | RightArrApp l (PExp l) (PExp l)- | LeftArrHighApp l (PExp l) (PExp l)- | RightArrHighApp l (PExp l) (PExp l)- deriving (Eq,Show)--data PFieldUpdate l- = FieldUpdate l (QName l) (PExp l)- | FieldPun l (Name l)- | FieldWildcard l- deriving (Eq,Show)--data ParseXAttr l = XAttr l (XName l) (PExp l)- deriving (Eq,Show)--instance Annotated PExp where- ann e = case e of- Var l qn -> l- IPVar l ipn -> l- Con l qn -> l- Lit l lit -> l- InfixApp l e1 qop e2 -> l- App l e1 e2 -> l- NegApp l e -> l- Lambda l ps e -> l- Let l bs e -> l- If l ec et ee -> l- Case l e alts -> l- Do l ss -> l- MDo l ss -> l- TupleSection l mes -> l- List l es -> l- Paren l e -> l- RecConstr l qn fups -> l- RecUpdate l e fups -> l- EnumFrom l e -> l- EnumFromTo l ef et -> l- EnumFromThen l ef et -> l- EnumFromThenTo l ef eth eto -> l- ParComp l e qsss -> l- ExpTypeSig l e t -> l- AsPat l n e -> l- WildCard l -> l- IrrPat l e -> l- PostOp l e op -> l- PreOp l op e -> l- ViewPat l e1 e2 -> l- SeqRP l es -> l- GuardRP l e ss -> l- EitherRP l e1 e2 -> l- CAsRP l n e -> l-- VarQuote l qn -> l- TypQuote l qn -> l- BracketExp l br -> l- SpliceExp l sp -> l- QuasiQuote l sn se -> l-- XTag l xn xas me es -> l- XETag l xn xas me -> l- XPcdata l s -> l- XExpTag l e -> l- XRPats l es -> l-- CorePragma l s e -> l- SCCPragma l s e -> l- GenPragma l s n12 n34 e -> l-- ExplTypeArg l qn t -> l- BangPat l e -> l-- Proc l p e -> l- LeftArrApp l e1 e2 -> l- RightArrApp l e1 e2 -> l- LeftArrHighApp l e1 e2 -> l- RightArrHighApp l e1 e2 -> l-- amap f e = case e of- Var l qn -> Var (f l) qn- IPVar l ipn -> IPVar (f l) ipn- Con l qn -> Con (f l) qn- Lit l lit -> Lit (f l) lit- InfixApp l e1 qop e2 -> InfixApp (f l) e1 qop e2- App l e1 e2 -> App (f l) e1 e2- NegApp l e -> NegApp (f l) e- Lambda l ps e -> Lambda (f l) ps e- Let l bs e -> Let (f l) bs e- If l ec et ee -> If (f l) ec et ee- Case l e alts -> Case (f l) e alts- Do l ss -> Do (f l) ss- MDo l ss -> MDo (f l) ss- TupleSection l mes -> TupleSection (f l) mes- List l es -> List (f l) es- Paren l e -> Paren (f l) e- RecConstr l qn fups -> RecConstr (f l) qn fups- RecUpdate l e fups -> RecUpdate (f l) e fups- EnumFrom l e -> EnumFrom (f l) e- EnumFromTo l ef et -> EnumFromTo (f l) ef et- EnumFromThen l ef et -> EnumFromThen (f l) ef et- EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) ef eth eto- ParComp l e qsss -> ParComp (f l) e qsss- ExpTypeSig l e t -> ExpTypeSig (f l) e t-- AsPat l n e -> AsPat (f l) n e- WildCard l -> WildCard (f l)- IrrPat l e -> IrrPat (f l) e- PostOp l e op -> PostOp (f l) e op- PreOp l op e -> PreOp (f l) op e- ViewPat l e1 e2 -> ViewPat (f l) e1 e2- SeqRP l es -> SeqRP (f l) es- GuardRP l e ss -> GuardRP (f l) e ss- EitherRP l e1 e2 -> EitherRP (f l) e1 e2- CAsRP l n e -> CAsRP (f l) n e- ExplTypeArg l n t -> ExplTypeArg (f l) n t- BangPat l e -> BangPat (f l) e-- VarQuote l qn -> VarQuote (f l) qn- TypQuote l qn -> TypQuote (f l) qn- BracketExp l br -> BracketExp (f l) br- SpliceExp l sp -> SpliceExp (f l) sp- QuasiQuote l sn se -> QuasiQuote (f l) sn se-- XTag l xn xas me es -> XTag (f l) xn xas me es- XETag l xn xas me -> XETag (f l) xn xas me- XPcdata l s -> XPcdata (f l) s- XExpTag l e -> XExpTag (f l) e-- CorePragma l s e -> CorePragma (f l) s e- SCCPragma l s e -> SCCPragma (f l) s e- GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 e-- Proc l p e -> Proc (f l) p e- LeftArrApp l e1 e2 -> LeftArrApp (f l) e1 e2- RightArrApp l e1 e2 -> RightArrApp (f l) e1 e2- LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) e1 e2- RightArrHighApp l e1 e2 -> RightArrHighApp (f l) e1 e2--instance Functor PExp where- fmap f e = case e of- Var l qn -> Var (f l) (fmap f qn)- IPVar l ipn -> IPVar (f l) (fmap f ipn)- Con l qn -> Con (f l) (fmap f qn)- Lit l lit -> Lit (f l) (fmap f lit)- InfixApp l e1 qop e2 -> InfixApp (f l) (fmap f e1) (fmap f qop) (fmap f e2)- App l e1 e2 -> App (f l) (fmap f e1) (fmap f e2)- NegApp l e -> NegApp (f l) (fmap f e)- Lambda l ps e -> Lambda (f l) (map (fmap f) ps) (fmap f e)- Let l bs e -> Let (f l) (fmap f bs) (fmap f e)- If l ec et ee -> If (f l) (fmap f ec) (fmap f et) (fmap f ee)- Case l e alts -> Case (f l) (fmap f e) (map (fmap f) alts)- Do l ss -> Do (f l) (map (fmap f) ss)- MDo l ss -> MDo (f l) (map (fmap f) ss)- TupleSection l mes -> TupleSection (f l) (map (fmap (fmap f)) mes)- List l es -> List (f l) (map (fmap f) es)- Paren l e -> Paren (f l) (fmap f e)- RecConstr l qn fups -> RecConstr (f l) (fmap f qn) (map (fmap f) fups)- RecUpdate l e fups -> RecUpdate (f l) (fmap f e) (map (fmap f) fups)- EnumFrom l e -> EnumFrom (f l) (fmap f e)- EnumFromTo l ef et -> EnumFromTo (f l) (fmap f ef) (fmap f et)- EnumFromThen l ef et -> EnumFromThen (f l) (fmap f ef) (fmap f et)- EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) (fmap f ef) (fmap f eth) (fmap f eto)- ParComp l e qsss -> ParComp (f l) (fmap f e) (map (map (fmap f)) qsss)- ExpTypeSig l e t -> ExpTypeSig (f l) (fmap f e) (fmap f t)-- AsPat l n e -> AsPat (f l) (fmap f n) (fmap f e)- WildCard l -> WildCard (f l)- IrrPat l e -> IrrPat (f l) (fmap f e)- PostOp l e op -> PostOp (f l) (fmap f e) (fmap f op)- PreOp l op e -> PreOp (f l) (fmap f op) (fmap f e)- ViewPat l e1 e2 -> ViewPat (f l) (fmap f e1) (fmap f e2)- SeqRP l es -> SeqRP (f l) (map (fmap f) es)- GuardRP l e ss -> GuardRP (f l) (fmap f e) (map (fmap f) ss)- EitherRP l e1 e2 -> EitherRP (f l) (fmap f e1) (fmap f e2)- CAsRP l n e -> CAsRP (f l) (fmap f n) (fmap f e)- ExplTypeArg l n t -> ExplTypeArg (f l) (fmap f n) (fmap f t)- BangPat l e -> BangPat (f l) (fmap f e)-- VarQuote l qn -> VarQuote (f l) (fmap f qn)- TypQuote l qn -> TypQuote (f l) (fmap f qn)- BracketExp l br -> BracketExp (f l) (fmap f br)- SpliceExp l sp -> SpliceExp (f l) (fmap f sp)- QuasiQuote l sn se -> QuasiQuote (f l) sn se-- XTag l xn xas me es -> XTag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es)- XETag l xn xas me -> XETag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me)- XPcdata l s -> XPcdata (f l) s- XExpTag l e -> XExpTag (f l) (fmap f e)-- CorePragma l s e -> CorePragma (f l) s (fmap f e)- SCCPragma l s e -> SCCPragma (f l) s (fmap f e)- GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 (fmap f e)-- Proc l p e -> Proc (f l) (fmap f p) (fmap f e)- LeftArrApp l e1 e2 -> LeftArrApp (f l) (fmap f e1) (fmap f e2)- RightArrApp l e1 e2 -> RightArrApp (f l) (fmap f e1) (fmap f e2)- LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) (fmap f e1) (fmap f e2)- RightArrHighApp l e1 e2 -> RightArrHighApp (f l) (fmap f e1) (fmap f e2)----instance Functor PFieldUpdate where- fmap f (FieldUpdate l qn e) = FieldUpdate (f l) (fmap f qn) (fmap f e)- fmap f (FieldPun l n) = FieldPun (f l) (fmap f n)- fmap f (FieldWildcard l) = FieldWildcard (f l)--instance Annotated PFieldUpdate where- ann (FieldUpdate l qn e) = l- ann (FieldPun l n) = l- ann (FieldWildcard l) = l- amap f (FieldUpdate l qn e) = FieldUpdate (f l) qn e- amap f (FieldPun l n) = FieldPun (f l) n- amap f (FieldWildcard l) = FieldWildcard (f l)--instance Functor ParseXAttr where- fmap f (XAttr l xn e) = XAttr (f l) (fmap f xn) (fmap f e)--instance Annotated ParseXAttr where- ann (XAttr l _ _) = l- amap f (XAttr l xn e) = XAttr (f l) xn e--p_unit_con :: l -> PExp l-p_unit_con l = Con l (unit_con_name l)--p_tuple_con :: l -> Boxed -> Int -> PExp l-p_tuple_con l b i = Con l (tuple_con_name l b i)--p_unboxed_singleton_con :: l -> PExp l-p_unboxed_singleton_con l = Con l (unboxed_singleton_con_name l)--data PContext l- = CxSingle l (PAsst l)- | CxTuple l [PAsst l]- | CxParen l (PContext l)- | CxEmpty l- deriving (Eq, Show)--instance Functor PContext where- fmap f (CxSingle l asst) = CxSingle (f l) (fmap f asst)- fmap f (CxTuple l assts) = CxTuple (f l) (map (fmap f) assts)- fmap f (CxParen l ctxt) = CxParen (f l) (fmap f ctxt)- fmap f (CxEmpty l) = CxEmpty (f l)--instance Annotated PContext where- ann (CxSingle l asst ) = l- ann (CxTuple l assts) = l- ann (CxParen l ctxt ) = l- ann (CxEmpty l) = l- amap f (CxSingle l asst ) = CxSingle (f l) asst- amap f (CxTuple l assts) = CxTuple (f l) assts- amap f (CxParen l ctxt ) = CxParen (f l) ctxt- amap f (CxEmpty l) = CxEmpty (f l)--data PType l- = TyForall l- (Maybe [TyVarBind l])- (Maybe (PContext l))- (PType l)- | TyFun l (PType l) (PType l) -- ^ function type- | TyTuple l Boxed [PType l] -- ^ tuple type, possibly boxed- | TyList l (PType l) -- ^ list syntax, e.g. [a], as opposed to [] a- | TyApp l (PType l) (PType l) -- ^ application of a type constructor- | TyVar l (Name l) -- ^ type variable- | TyCon l (QName l) -- ^ named type or type constructor- | TyParen l (PType l) -- ^ type surrounded by parentheses- | TyPred l (PAsst l) -- ^ assertion of an implicit parameter- | TyInfix l (PType l) (QName l) (PType l) -- ^ infix type constructor- | TyKind l (PType l) (Kind l) -- ^ type with explicit kind signature- deriving (Eq, Show)--instance Functor PType where- fmap f t = case t of- TyForall l mtvs mcx t -> TyForall (f l) (fmap (map (fmap f)) mtvs) (fmap (fmap f) mcx) (fmap f t)- TyFun l t1 t2 -> TyFun (f l) (fmap f t1) (fmap f t2)- TyTuple l b ts -> TyTuple (f l) b (map (fmap f) ts)- TyList l t -> TyList (f l) (fmap f t)- TyApp l t1 t2 -> TyApp (f l) (fmap f t1) (fmap f t2)- TyVar l n -> TyVar (f l) (fmap f n)- TyCon l qn -> TyCon (f l) (fmap f qn)- TyParen l t -> TyParen (f l) (fmap f t)- TyPred l asst -> TyPred (f l) (fmap f asst)- TyInfix l ta qn tb -> TyInfix (f l) (fmap f ta) (fmap f qn) (fmap f tb)- TyKind l t k -> TyKind (f l) (fmap f t) (fmap f k)--instance Annotated PType where- ann t = case t of- TyForall l mtvs cx t -> l- TyFun l t1 t2 -> l- TyTuple l b ts -> l- TyList l t -> l- TyApp l t1 t2 -> l- TyVar l n -> l- TyCon l qn -> l- TyParen l t -> l- TyInfix l ta qn tb -> l- TyKind l t k -> l- amap f t = case t of- TyForall l mtvs mcx t -> TyForall (f l) mtvs mcx t- TyFun l t1 t2 -> TyFun (f l) t1 t2- TyTuple l b ts -> TyTuple (f l) b ts- TyList l t -> TyList (f l) t- TyApp l t1 t2 -> TyApp (f l) t1 t2- TyVar l n -> TyVar (f l) n- TyCon l qn -> TyCon (f l) qn- TyParen l t -> TyParen (f l) t- TyInfix l ta qn tb -> TyInfix (f l) ta qn tb- TyKind l t k -> TyKind (f l) t k--data PAsst l- = ClassA l (QName l) [PType l]- | InfixA l (PType l) (QName l) (PType l)- | IParam l (IPName l) (PType l)- | EqualP l (PType l) (PType l)- deriving (Eq, Show)--instance Functor PAsst where- fmap f asst = case asst of- ClassA l qn ts -> ClassA (f l) (fmap f qn) (map (fmap f) ts)- InfixA l ta qn tb -> InfixA (f l) (fmap f ta) (fmap f qn) (fmap f tb)- IParam l ipn t -> IParam (f l) (fmap f ipn) (fmap f t)- EqualP l t1 t2 -> EqualP (f l) (fmap f t1) (fmap f t2)--instance Annotated PAsst where- ann asst = case asst of- ClassA l qn ts -> l- InfixA l ta qn tb -> l- IParam l ipn t -> l- EqualP l t1 t2 -> l- amap f asst = case asst of- ClassA l qn ts -> ClassA (f l) qn ts- InfixA l ta qn tb -> InfixA (f l) ta qn tb- IParam l ipn t -> IParam (f l) ipn t- EqualP l t1 t2 -> EqualP (f l) t1 t2---unit_tycon, fun_tycon, list_tycon, unboxed_singleton_tycon :: l -> PType l-unit_tycon l = TyCon l (unit_tycon_name l)-fun_tycon l = TyCon l (fun_tycon_name l)-list_tycon l = TyCon l (list_tycon_name l)-unboxed_singleton_tycon l = TyCon l (unboxed_singleton_tycon_name l)--tuple_tycon :: l -> Boxed -> Int -> PType l-tuple_tycon l b i = TyCon l (tuple_tycon_name l b i)--}+{-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.ParseUtils+-- Copyright : (c) Niklas Broberg 2004-2009,+-- (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Utilities for the Haskell-exts parser.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.ParseUtils (+ splitTyConApp -- PType -> P (Name,[Type])+ , checkEnabled -- (Show e, Enabled e) => e -> P ()+ , checkEnabledOneOf+ , checkToplevel -- ??+ , checkPatternGuards -- [Stmt] -> P ()+ , mkRecConstrOrUpdate -- PExp -> [PFieldUpdate] -> P Exp+ , checkPrec -- Integer -> P Int+ , checkPContext -- PType -> P PContext+ , checkContext -- PContext -> P Context+ , checkAssertion -- PType -> P PAsst+ , checkDataHeader -- PType -> P (Context,Name,[TyVarBind])+ , checkClassHeader -- PType -> P (Context,Name,[TyVarBind])+ , checkInstHeader -- PType -> P (Context,QName,[Type])+ , checkDeriving -- [PType] -> P [Deriving]+ , checkPattern -- PExp -> P Pat+ , checkExpr -- PExp -> P Exp+ , checkType -- PType -> P Type+ , checkTyVar -- Name -> P PType+ , bangType -- L -> BangType -> Type -> Type+ , checkKind -- Kind -> P ()+ , checkValDef -- SrcLoc -> PExp -> Maybe Type -> Rhs -> Binds -> P Decl+ , checkExplicitPatSyn --+ , checkClassBody -- [ClassDecl] -> P [ClassDecl]+ , checkInstBody -- [InstDecl] -> P [InstDecl]+ , checkUnQual -- QName -> P Name+ , checkQualOrUnQual -- QName -> P QName+ , checkSingleDecl -- [Decl] -> P Decl+ , checkRevDecls -- [Decl] -> P [Decl]+ , checkRevClsDecls -- [ClassDecl] -> P [ClassDecl]+ , checkRevInstDecls -- [InstDecl] -> P [InstDecl]+ , checkDataOrNew -- DataOrNew -> [QualConDecl] -> P ()+ , checkDataOrNewG -- DataOrNew -> [GadtDecl] -> P ()+ , checkSimpleType -- PType -> P (Name, [TyVarBind])+ , checkSigVar -- PExp -> P Name+ , checkDefSigDef -- Decl -> P Decl+ , getGConName -- S.Exp -> P QName+ , mkTyForall -- Maybe [TyVarBind] -> PContext -> PType -> PType+ , mkRoleAnnotDecl --+ , mkAssocType+ , mkEThingWith+ , splitTilde+ -- HaRP+ , checkRPattern -- PExp -> P RPat+ -- Hsx+ , checkEqNames -- XName -> XName -> P XName+ , checkPageModule+ , checkHybridModule+ , mkDVar -- [String] -> String+ -- Pragmas+ , checkRuleExpr -- PExp -> P Exp+ , readTool -- Maybe String -> Maybe Tool+ -- Helpers+ , updateQNameLoc -- l -> QName l -> QName l++ , SumOrTuple(..), mkSumOrTuple++ -- Parsed expressions and types+ , PExp(..), PFieldUpdate(..), ParseXAttr(..), PType(..), PContext, PAsst(..)+ , p_unit_con -- PExp+ , p_tuple_con -- Boxed -> Int -> PExp+ , p_unboxed_singleton_con -- PExp+ , pexprToQName+ ) where++import Language.Haskell.Exts.Syntax hiding ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..), Context(..) )+import qualified Language.Haskell.Exts.Syntax as S ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..), Context(..), Role(..), PatternSynDirection(..))++import Language.Haskell.Exts.ParseSyntax+import Language.Haskell.Exts.ParseMonad+import Language.Haskell.Exts.Pretty+import Language.Haskell.Exts.SrcLoc hiding (loc)+import Language.Haskell.Exts.Extension+import Language.Haskell.Exts.ExtScheme++import Prelude hiding (mod)+import Data.List (intercalate, intersperse)+import Data.Maybe (fromJust, fromMaybe)+import Data.Either+import Control.Monad (when,unless)++#if __GLASGOW_HASKELL__ < 710+import Control.Applicative ((<$>))+#endif++type L = SrcSpanInfo+type S = SrcSpan++pexprToQName :: PExp l -> P (QName l)+pexprToQName (Con _ qn) = return qn+pexprToQName (List l []) = return $ Special l (ListCon l)+pexprToQName _ = fail "pexprToQName"++splitTyConApp :: PType L -> P (Name L, [S.Type L])+splitTyConApp t0 = do+ (n, pts) <- split t0 []+ ts <- mapM checkType pts+ return (n,ts)+ where+ split :: PType L -> [PType L] -> P (Name L, [PType L])+ split (TyApp _ t u) ts = split t (u:ts)+ split (TyCon _ (UnQual _ t)) ts = return (t,ts)+ split (TyInfix l a op b) ts = split (TyCon l (getMaybePromotedQName op)) (a:b:ts)+ split _ _ = fail "Illegal data/newtype declaration"++-----------------------------------------------------------------------------+-- Checking for extensions++checkEnabled :: (Show e, Enabled e) => e -> P ()+checkEnabled e = do+ exts <- getExtensions+ unless (isEnabled e exts) $ fail errorMsg+ where errorMsg = unwords+ [ show e+ , "language extension is not enabled."+ , "Please add {-# LANGUAGE " ++ show e ++ " #-}"+ , "pragma at the top of your module."+ ]++checkEnabledOneOf :: (Show e, Enabled e) => [e] -> P ()+checkEnabledOneOf es = do+ exts <- getExtensions+ unless (any (`isEnabled` exts) es) $+ fail errorMsg+ where errorMsg = unwords+ [ "At least one of"+ , joinOr id+ , "language extensions needs to be enabled."+ , "Please add:"+ , joinOr (\s -> "{-# LANGUAGE " ++ s ++ " #-}")+ , "language pragma at the top of your module."+ ]+ joinOr f = concat . intersperse " or " . map (f . show) $ es++checkPatternGuards :: [Stmt L] -> P ()+checkPatternGuards [Qualifier _ _] = return ()+checkPatternGuards _ = checkEnabled PatternGuards++checkToplevel :: PExp t -> P ()+checkToplevel e = do+ exts <- getExtensions+ let isQQ = case e of+ QuasiQuote {} -> isEnabled QuasiQuotes exts+ _ -> False+ unless isQQ (checkEnabled TemplateHaskell)++-----------------------------------------------------------------------------+-- Checking contexts++-- Check that a context is syntactically correct. Takes care of+-- checking for MPTCs, TypeOperators, TypeFamilies (for eq constraints)+-- and ImplicitParameters, but leaves checking of the class assertion+-- parameters for later.+checkPContext :: PType L -> P (PContext L)+checkPContext (TyTuple l Boxed ts) =+ mapM checkAssertion ts >>= return . CxTuple l+checkPContext (TyCon l (Special _ (UnitCon _))) =+ return $ CxEmpty l+checkPContext (TyParen l t) = do+ c <- checkAssertion t+ return $ CxSingle l (ParenA l c)+checkPContext t@(TyEquals tp _ _) = do+ checkEnabledOneOf [TypeFamilies, GADTs]+ return $ CxSingle tp $ TypeA tp t++checkPContext t = do+ c <- checkAssertion t+ return $ CxSingle (ann c) c++------------------------------------------------------------------------------------------------------------------- WORKING HERE++-- Check a single assertion according to the above, still leaving+-- the class assertion parameters for later.+checkAssertion :: PType L -> P (PAsst L)+-- We cannot even get here unless ImplicitParameters is enabled.+checkAssertion (TyParen l asst) = do+ asst' <- checkAssertion asst+ return $ ParenA l asst'+checkAssertion (TyPred _ p) = checkAAssertion p+-- We cannot even get here unless TypeFamilies or GADTs is enabled.+-- N.B.: this is called only when the equality assertion is part of a+-- tuple+checkAssertion t' = do+ t'' <- checkAssertion' id [] t'+ return $ TypeA (ann t'') t''+ where -- class assertions must have at least one argument+ checkAssertion' _ _ t@(TyEquals _ _ _) = return t+ checkAssertion' fl ts (TyCon l c) = do+ when (length ts < 1) $ checkEnabled FlexibleContexts+ checkAndWarnTypeOperators c+ return $ tyApps (fl l) (TyCon (fl l) c) ts+ checkAssertion' fl ts (TyApp l a t) =+ -- no check on t at this stage+ checkAssertion' (const (fl l)) (t:ts) a+ checkAssertion' fl _ (TyInfix l a op b) = do+ -- infix operators require TypeOperators+ checkAndWarnTypeOperators (getMaybePromotedQName op)+ return $ TyInfix (fl l) a op b+ checkAssertion' fl ts (TyParen l t) =+ checkAssertion' (const (fl l)) ts t+ checkAssertion' fl ts (TyVar l t) = do -- Dict :: cxt => Dict cxt+ checkEnabled ConstraintKinds+ return $ tyApps (fl l) (TyVar (fl l) t) ts+ checkAssertion' _ _ t@(TyWildCard _ _) = return t+ checkAssertion' _ _ t = do+ checkEnabled QuantifiedConstraints -- anything goes+ return t+ tyApps :: L -> PType L -> [PType L] -> PType L+ tyApps _ c [] = c+ tyApps l c (a:aa) = tyApps l (TyApp l c a) aa++checkAAssertion :: PAsst L -> P (PAsst L)+checkAAssertion (TypeA _ t) = checkAssertion t+checkAAssertion (ParenA l a) = do+ a' <- checkAAssertion a+ return $ ParenA l a'+checkAAssertion p = return p++-- Check class/instance declaration for multiparams+checkMultiParam :: PType L -> P ()+checkMultiParam = checkMultiParam' []+ where+ checkMultiParam' ts (TyCon _ _) =+ when (length ts /= 1) $ checkEnabled MultiParamTypeClasses+ checkMultiParam' ts (TyApp _ a t) = checkMultiParam' (t:ts) a+ checkMultiParam' _ (TyInfix _ _ _ _) = checkEnabled MultiParamTypeClasses+ checkMultiParam' ts (TyParen _ t) = checkMultiParam' ts t+ checkMultiParam' _ _ = return ()++getSymbol :: QName L -> Maybe String+getSymbol (UnQual _ (Symbol _ s)) = Just s+getSymbol (Qual _ _ (Symbol _ s)) = Just s+getSymbol _ = Nothing++-- | Checks whether the parameter is a symbol, and gives a nice warning for+-- "." if ExplicitForAll/TypeOperators are not enabled.+checkAndWarnTypeOperators :: QName L -> P ()+checkAndWarnTypeOperators c =+ case getSymbol c of+ Just s | s == "." -> checkEnabledOneOf [ExplicitForAll, TypeOperators]+ | otherwise -> checkEnabled TypeOperators+ Nothing -> return ()++-- Checks simple contexts for class and instance+-- headers. If FlexibleContexts is enabled then+-- anything goes, otherwise only tyvars are allowed.+checkSContext :: Maybe (PContext L) -> P (Maybe (S.Context L))+checkSContext (Just ctxt) = case ctxt of+ CxEmpty l -> return $ Just $ S.CxEmpty l+ CxSingle l a -> checkAsst a >>= return . Just . S.CxSingle l+ CxTuple l as -> mapM checkAsst as >>= return . Just . S.CxTuple l+checkSContext _ = return Nothing++-- Checks ordinary contexts for sigtypes and data type+-- declarations. If FlexibleContexts is enabled then+-- anything goes, otherwise only tyvars OR tyvars+-- applied to types are allowed.+checkContext :: Maybe (PContext L) -> P (Maybe (S.Context L))+checkContext (Just ctxt) = case ctxt of+ CxEmpty l -> return $ Just $ S.CxEmpty l+ CxSingle l a -> checkAsst a >>= return . Just . S.CxSingle l+ CxTuple l as -> mapM checkAsst as >>= return . Just . S.CxTuple l+checkContext _ = return Nothing++checkAsst :: PAsst L -> P (S.Asst L)+checkAsst asst =+ case asst of+ TypeA l pt -> do+ t <- checkType pt+ return $ S.TypeA l t+ IParam l ipn pt -> do+ t <- checkType pt+ return $ S.IParam l ipn t+ ParenA l a -> do+ a' <- checkAsst a+ return $ S.ParenA l a'++-----------------------------------------------------------------------------+-- Checking Headers+++checkDataHeader :: PType L -> P (Maybe (S.Context L), DeclHead L)+checkDataHeader (TyForall _ Nothing cs t) = do+ dh <- checkSimple "data/newtype" t+ cs' <- checkContext cs+ return (cs',dh)+checkDataHeader t = do+ dh <- checkSimple "data/newtype" t+ return (Nothing,dh)++checkClassHeader :: PType L -> P (Maybe (S.Context L), DeclHead L)+checkClassHeader (TyForall _ Nothing cs t) = do+ checkMultiParam t+ dh <- checkSimple "class" t+ cs' <- checkSContext cs+ return (cs',dh)+checkClassHeader t = do+ checkMultiParam t+ dh <- checkSimple "class" t+ return (Nothing,dh)++checkSimple :: String -> PType L -> P (DeclHead L)+--checkSimple kw (TyApp _ l t) xs | isTyVarBind t = checkSimple kw l (toTyVarBind t : xs)++checkSimple kw (TyApp l h t) = do+ tvb <- mkTyVarBind kw t+ h' <- checkSimple kw h+ return $ DHApp l h' tvb+checkSimple kw (TyInfix l t1 mq t2)+ | c@(UnQual _ t) <- getMaybePromotedQName mq+ = do+ checkAndWarnTypeOperators c+ tv1 <- mkTyVarBind kw t1+ tv2 <- mkTyVarBind kw t2+ return $ DHApp l (DHInfix l tv1 t) tv2+checkSimple _kw (TyCon _ c@(UnQual l t)) = do+ checkAndWarnTypeOperators c+ return (DHead l t)+checkSimple kw (TyParen l t) = do+ dh <- checkSimple kw t+ return (DHParen l dh)+checkSimple kw _ = fail ("Illegal " ++ kw ++ " declaration")++mkTyVarBind :: String -> PType L -> P (TyVarBind L)+mkTyVarBind _ (TyVar l n) = return $ UnkindedVar l n+mkTyVarBind _ (TyKind l (TyVar _ n) k) = return $ KindedVar l n k+mkTyVarBind _ (TyCon l c@(UnQual _ n@(Symbol _ _))) = checkAndWarnTypeOperators c >> return (UnkindedVar l n)+mkTyVarBind _ (TyKind l (TyCon _ c@(UnQual _ n@(Symbol _ _))) k) = checkAndWarnTypeOperators c >> return (KindedVar l n k)+mkTyVarBind kw _ = fail ("Illegal " ++ kw ++ " declaration")++{-+isTyVarBind :: PType L -> Bool+isTyVarBind (TyVar _ _) = True+--isTyVarBind (TyCon _ (UnQual _ n@(Symbol _ _))) = True+isTyVarBind (TyKind _ (TyVar _ _) _) = True+isTyVarBind _ = False++toTyVarBind :: PType L -> TyVarBind L+toTyVarBind (TyVar l n) = UnkindedVar l n+toTyVarBind (TyKind l (TyVar _ n) k) = KindedVar l n k+-}++checkInstHeader :: PType L -> P (InstRule L)+checkInstHeader (TyParen l t) = checkInstHeader t >>= return . IParen l+checkInstHeader (TyForall l mtvs cs t) = do+ cs' <- checkSContext cs+ checkMultiParam t+ checkInsts (Just l) mtvs cs' t+checkInstHeader t = checkMultiParam t >> checkInsts Nothing Nothing Nothing t+++checkInsts :: Maybe L -> Maybe [TyVarBind L] -> Maybe (S.Context L) -> PType L -> P (InstRule L)+checkInsts _ mtvs mctxt (TyParen l t) = checkInsts Nothing mtvs mctxt t >>= return . IParen l+checkInsts l1 mtvs mctxt t = do+ t' <- checkInstsGuts t+ return $ IRule (fromMaybe (fmap ann mctxt <?+> ann t') l1) mtvs mctxt t'++checkInstsGuts :: PType L -> P (InstHead L)+checkInstsGuts (TyApp l h t) = do+ t' <- checkType t+ h' <- checkInstsGuts h+ return $ IHApp l h' t'+checkInstsGuts (TyCon l c) = do+ checkAndWarnTypeOperators c+ return $ IHCon l c+checkInstsGuts (TyInfix l a op b) = do+ checkAndWarnTypeOperators (getMaybePromotedQName op)+ [ta,tb] <- checkTypes [a,b]+ return $ IHApp l (IHInfix l ta (getMaybePromotedQName op)) tb+checkInstsGuts (TyParen l t) = checkInstsGuts t >>= return . IHParen l+checkInstsGuts _ = fail "Illegal instance declaration"++checkDeriving :: [PType L] -> P [InstRule L]+checkDeriving = mapM (checkInsts Nothing Nothing Nothing)++-----------------------------------------------------------------------------+-- Checking Patterns.++-- We parse patterns as expressions and check for valid patterns below,+-- converting the expression into a pattern at the same time.++checkPattern :: PExp L -> P (Pat L)+checkPattern e = checkPat e []++checkPat :: PExp L -> [Pat L] -> P (Pat L)+checkPat (Con l c) args = do+ let l' = foldl combSpanInfo l (map ann args)+ return (PApp l' c args)+checkPat (App _ f x) args = do+ x' <- checkPat x []+ checkPat f (x':args)+checkPat (InfixApp _ l op r) args+ | op =~= QVarOp () (UnQual () (Symbol () "!")) = do+ -- We must have BangPatterns on+ checkEnabled BangPatterns+ let (e,es) = splitBang r []+ ps <- mapM checkPattern (BangPat (ann op) e:es)+ checkPat l (ps++args)+checkPat e' [] = case e' of+ Var _ (UnQual l x) -> return (PVar l x)+ Var _ (Special l (ExprHole _)) -> return (PWildCard l)+ Lit l lit -> return (PLit l (Signless l2) lit)+ where l2 = noInfoSpan . srcInfoSpan $ l+ InfixApp loc l op r ->+ case op of+ QConOp _ c -> do+ l' <- checkPat l []+ r' <- checkPat r []+ return (PInfixApp loc l' c r')+ QVarOp ppos (UnQual _ (Symbol _ "+")) -> do+ checkEnabled NPlusKPatterns+ case (l,r) of+ (Var _ (UnQual _ n@(Ident _ _)), Lit _ (Int kpos k _)) -> do+ let pp = srcInfoSpan ppos+ kp = srcInfoSpan kpos+ return (PNPlusK (loc <** [pp,kp]) n k)+ _ -> patFail ""+ _ -> patFail ""+ TupleSection l bx mes ->+ if Nothing `notElem` mes+ then do ps <- mapM (\e -> checkPat e []) (map fromJust mes)+ return (PTuple l bx ps)+ else fail "Illegal tuple section in pattern"+ UnboxedSum l b a e ->+ PUnboxedSum l b a <$> checkPattern e++ List l es -> do+ ps <- mapM checkRPattern es+ if all isStdPat ps+ then return . PList l $ map stripRP ps+ -- we don't allow truly regular patterns unless the extension is enabled+ else checkEnabled RegularPatterns >> return (PRPat l $ map fixRPOpPrec ps)+ where isStdPat :: RPat L -> Bool+ isStdPat (RPPat _ _) = True+ isStdPat (RPAs _ _ p) = isStdPat p+ isStdPat (RPParen _ p) = isStdPat p+ isStdPat _ = False+ stripRP :: RPat L -> Pat L+ stripRP (RPPat _ p) = p+ stripRP (RPAs l' n p) = PAsPat l' n (stripRP p)+ stripRP (RPParen l' p) = PParen l' (stripRP p)+ stripRP _ = error "cannot strip RP wrapper if not all patterns are base"++ Paren l e -> do+ p <- checkPat e []+ return (PParen l p)+ AsPat l n e -> do+ p <- checkPat e []+ return (PAsPat l n p)+ WildCard l -> return (PWildCard l)+ IrrPat l e -> do+ p <- checkPat e []+ return (PIrrPat l p)+ ViewPat l e p -> do+ e1 <- checkExpr e+ return (PViewPat l e1 p)+ RecConstr l c fs -> do+ fs' <- mapM checkPatField fs+ return (PRec l c fs')+ NegApp l (Lit _ lit) ->+ let siSign = last . srcInfoPoints $ l+ lSign = infoSpan siSign [siSign]+ in do+ when (not . isNegatableLiteral $ lit) (patFail $ prettyPrint e')+ return (PLit l (Negative lSign) lit)+ ExpTypeSig l e t -> do+ -- patterns cannot have signatures unless ScopedTypeVariables is enabled.+ checkEnabled ScopedTypeVariables+ p <- checkPat e []+ return (PatTypeSig l p t)++ -- Hsx+ XTag l n attrs mattr cs -> do+ pattrs <- mapM checkPAttr attrs+ pcs <- mapM (\c -> checkPat c []) cs+ mpattr <- maybe (return Nothing)+ (\e -> do p <- checkPat e []+ return $ Just p)+ mattr+ let cps = mkChildrenPat pcs+ return $ PXTag l n pattrs mpattr cps+ XETag l n attrs mattr -> do+ pattrs <- mapM checkPAttr attrs+ mpattr <- maybe (return Nothing)+ (\e -> do p <- checkPat e []+ return $ Just p)+ mattr+ return $ PXETag l n pattrs mpattr+ XPcdata l pcdata -> return $ PXPcdata l pcdata+ XExpTag l e -> do+ p <- checkPat e []+ return $ PXPatTag l p+ XRPats l es -> do+ rps <- mapM checkRPattern es+ return (PXRPats l $ map fixRPOpPrec rps)++ -- Template Haskell+ SpliceExp l e -> return $ PSplice l e+ QuasiQuote l n q -> return $ PQuasiQuote l n q++ -- BangPatterns+ BangPat l e -> do+ p <- checkPat e []+ return $ PBangPat l p++ PreOp l (QVarOp _ (UnQual _ (Symbol _ "!"))) e -> do+ checkEnabled BangPatterns+ p <- checkPat e []+ return $ PBangPat l p++ e -> patFail $ prettyPrint e++checkPat e _ = patFail $ prettyPrint e++isNegatableLiteral :: Literal a -> Bool+isNegatableLiteral (Int _ _ _) = True+isNegatableLiteral (Frac _ _ _) = True+isNegatableLiteral (PrimInt _ _ _) = True+isNegatableLiteral (PrimFloat _ _ _) = True+isNegatableLiteral (PrimDouble _ _ _) = True+isNegatableLiteral _ = False++splitBang :: PExp L -> [PExp L] -> (PExp L, [PExp L])+splitBang (App _ f x) es = splitBang f (x:es)+splitBang e es = (e, es)++checkPatField :: PFieldUpdate L -> P (PatField L)+checkPatField (FieldUpdate l n e) = do+ p <- checkPat e []+ return (PFieldPat l n p)+checkPatField (FieldPun l n) = return (PFieldPun l n)+checkPatField (FieldWildcard l) = return (PFieldWildcard l)++checkPAttr :: ParseXAttr L -> P (PXAttr L)+checkPAttr (XAttr l n v) = do p <- checkPat v []+ return $ PXAttr l n p++patFail :: String -> P a+patFail s = fail $ "Parse error in pattern: " ++ s++checkRPattern :: PExp L -> P (RPat L)+checkRPattern e' = case e' of+ SeqRP l es -> do+ rps <- mapM checkRPattern es+ return $ RPSeq l rps+ PostOp l e op -> do+ rpop <- checkRPatOp op+ rp <- checkRPattern e+ return $ RPOp l rp rpop+ GuardRP l e gs -> do+ rp <- checkPattern e+ return $ RPGuard l rp gs+ EitherRP l e1 e2 -> do+ rp1 <- checkRPattern e1+ rp2 <- checkRPattern e2+ return $ RPEither l rp1 rp2+ CAsRP l n e -> do+ rp <- checkRPattern e+ return $ RPCAs l n rp+ AsPat l n e -> do+ rp <- checkRPattern e+ return $ RPAs l n rp+ Paren l e -> do+ rp <- checkRPattern e+ return $ RPParen l rp+ _ -> do+ p <- checkPattern e'+ return $ RPPat (ann p) p++checkRPatOp :: QOp L -> P (RPatOp L)+checkRPatOp o@(QVarOp l (UnQual _ (Symbol _ sym))) =+ case sym of+ "*" -> return $ RPStar l+ "*!" -> return $ RPStarG l+ "+" -> return $ RPPlus l+ "+!" -> return $ RPPlusG l+ "?" -> return $ RPOpt l+ "?!" -> return $ RPOptG l+ _ -> rpOpFail o+checkRPatOp o = rpOpFail o++rpOpFail :: Pretty a => a -> P b+rpOpFail sym = fail $ "Unrecognized regular pattern operator: " ++ prettyPrint sym++fixRPOpPrec :: RPat L -> RPat L+fixRPOpPrec rp' = case rp' of+ RPOp l rp rpop -> fPrecOp rp (flip (RPOp l) rpop)+ RPEither l rp1 rp2 -> RPEither l (fixRPOpPrec rp1) (fixRPOpPrec rp2)+ RPSeq l rps -> RPSeq l $ map fixRPOpPrec rps+ RPCAs l n rp -> RPCAs l n $ fixRPOpPrec rp+ RPAs l n rp -> RPAs l n $ fixRPOpPrec rp+ RPParen l rp -> RPParen l $ fixRPOpPrec rp+ _ -> rp'++ where fPrecOp :: RPat L -> (RPat L -> RPat L) -> RPat L+ fPrecOp (RPOp l rp rpop) f = fPrecOp rp (f . flip (RPOp l) rpop)+ fPrecOp (RPCAs l n rp) f = fPrecAs rp f (RPCAs l n)+ fPrecOp (RPAs l n rp) f = fPrecAs rp f (RPAs l n)+ fPrecOp rp f = f $ fixRPOpPrec rp+ fPrecAs :: RPat L -> (RPat L -> RPat L) -> (RPat L -> RPat L) -> RPat L+ fPrecAs (RPCAs l n rp) f g = fPrecAs rp f (g . RPCAs l n)+ fPrecAs (RPAs l n rp) f g = fPrecAs rp f (g . RPAs l n)+ fPrecAs rp f g = g . f $ fixRPOpPrec rp+++mkChildrenPat :: [Pat L] -> [Pat L]+mkChildrenPat ps' = mkCPAux ps' []+ where mkCPAux :: [Pat L] -> [Pat L] -> [Pat L]+ mkCPAux [] qs = reverse qs+ mkCPAux (p:ps) qs = case p of+ (PRPat l rps) -> [mkCRP l ps (reverse rps ++ map (\q -> RPPat (ann q) q) qs)]+ _ -> mkCPAux ps (p:qs)++ mkCRP :: L -> [Pat L] -> [RPat L] -> Pat L+ mkCRP l [] rps = PXRPats l $ reverse rps+ mkCRP _ (p:ps) rps = case p of+ (PXRPats l rqs) -> mkCRP l ps (reverse rqs ++ rps)+ _ -> mkCRP (ann p) ps (RPPat (ann p) p : rps)++-----------------------------------------------------------------------------+-- Check Expression Syntax++checkExpr :: PExp L -> P (S.Exp L)+checkExpr e' = case e' of+ Var l v -> return $ S.Var l v+ OverloadedLabel l v -> return $ S.OverloadedLabel l v+ IPVar l v -> return $ S.IPVar l v+ Con l c -> return $ S.Con l c+ Lit l lit -> return $ S.Lit l lit+ InfixApp l e1 op e2 -> check2Exprs e1 e2 (flip (S.InfixApp l) op)+ App l e1 e2 -> check2Exprs e1 e2 (S.App l)+ NegApp _ (Lit _ (PrimWord _ _ _))+ -> fail $ "Parse error: negative primitive word literal: " ++ prettyPrint e'+ NegApp l e -> check1Expr e (S.NegApp l)+ Lambda loc ps e -> check1Expr e (S.Lambda loc ps)+ Let l bs e -> check1Expr e (S.Let l bs)+ If l e1 e2 e3 -> check3Exprs e1 e2 e3 (S.If l)+ MultiIf l alts -> return (S.MultiIf l alts)+ Case l e alts -> do+ e1 <- checkExpr e+ return (S.Case l e1 alts)+ Do l stmts -> checkDo stmts >> return (S.Do l stmts)+ MDo l stmts -> checkDo stmts >> return (S.MDo l stmts)+ TupleSection l bx mes -> if Nothing `notElem` mes+ then checkManyExprs (map fromJust mes) (S.Tuple l bx)+ else do checkEnabled TupleSections+ mes' <- mapM mCheckExpr mes+ return $ S.TupleSection l bx mes'+ UnboxedSum l before after e -> S.UnboxedSum l before after <$> checkExpr e+++ List l es -> checkManyExprs es (S.List l)+ ParArray l es -> checkManyExprs es (S.ParArray l)+ -- Since we don't parse things as left or right sections, we need to mangle them into that.+ Paren l e -> case e of+ PostOp _ e1 op -> check1Expr e1 (flip (S.LeftSection l) op)+ PreOp _ op e2 -> check1Expr e2 (S.RightSection l op)+ _ -> check1Expr e (S.Paren l)+ RecConstr l c fields -> do+ fields1 <- mapM checkField fields+ return (S.RecConstr l c fields1)+ RecUpdate l e fields -> do+ fields1 <- mapM checkField fields+ e1 <- checkExpr e+ return (S.RecUpdate l e1 fields1)+ EnumFrom l e -> check1Expr e (S.EnumFrom l)+ EnumFromTo l e1 e2 -> check2Exprs e1 e2 (S.EnumFromTo l)+ EnumFromThen l e1 e2 -> check2Exprs e1 e2 (S.EnumFromThen l)+ EnumFromThenTo l e1 e2 e3 -> check3Exprs e1 e2 e3 (S.EnumFromThenTo l)+ ParArrayFromTo l e1 e2 -> check2Exprs e1 e2 (S.ParArrayFromTo l)+ ParArrayFromThenTo l e1 e2 e3 -> check3Exprs e1 e2 e3 (S.ParArrayFromThenTo l)+ -- a parallel list comprehension, which could be just a simple one+ ParComp l e qualss -> do+ e1 <- checkExpr e+ case qualss of+ [quals] -> return (S.ListComp l e1 quals)+ _ -> return (S.ParComp l e1 qualss)+ ParArrayComp l e qualss -> do+ e1 <- checkExpr e+ return (S.ParArrayComp l e1 qualss)+ ExpTypeSig loc e ty -> do+ e1 <- checkExpr e+ return (S.ExpTypeSig loc e1 ty)++ --Template Haskell+ BracketExp l e -> return $ S.BracketExp l e+ SpliceExp l e -> return $ S.SpliceExp l e+ TypQuote l q -> return $ S.TypQuote l q+ VarQuote l q -> return $ S.VarQuote l q+ QuasiQuote l n q -> return $ S.QuasiQuote l n q++ -- Hsx+ XTag l n attrs mattr cs -> do attrs1 <- mapM checkAttr attrs+ cs1 <- mapM checkExpr cs+ mattr1 <- maybe (return Nothing)+ (\e -> checkExpr e >>= return . Just)+ mattr+ return $ S.XTag l n attrs1 mattr1 cs1+ XETag l n attrs mattr -> do attrs1 <- mapM checkAttr attrs+ mattr1 <- maybe (return Nothing)+ (\e -> checkExpr e >>= return . Just)+ mattr+ return $ S.XETag l n attrs1 mattr1+ XPcdata l p -> return $ S.XPcdata l p+ XExpTag l e -> do e1 <- checkExpr e+ return $ S.XExpTag l e1+ XChildTag l es -> do es1 <- mapM checkExpr es+ return $ S.XChildTag l es1+ -- Pragmas+ CorePragma l s e -> check1Expr e (S.CorePragma l s)+ SCCPragma l s e -> check1Expr e (S.SCCPragma l s)+ GenPragma l s xx yy e -> check1Expr e (S.GenPragma l s xx yy)+-- UnknownExpPragma n s -> return $ S.UnknownExpPragma n s++ -- Arrows+ Proc l p e -> do e1 <- checkExpr e+ return $ S.Proc l p e1+ LeftArrApp l e1 e2 -> check2Exprs e1 e2 (S.LeftArrApp l)+ RightArrApp l e1 e2 -> check2Exprs e1 e2 (S.RightArrApp l)+ LeftArrHighApp l e1 e2 -> check2Exprs e1 e2 (S.LeftArrHighApp l)+ RightArrHighApp l e1 e2 -> check2Exprs e1 e2 (S.RightArrHighApp l)+ ArrOp l e -> S.ArrOp l <$> checkExpr e++ -- LamdaCase+ LCase l alts -> return $ S.LCase l alts++ -- Hole+ TypeApp l ty -> return $ S.TypeApp l ty++ _ -> fail $ "Parse error in expression: " ++ prettyPrint e'++checkAttr :: ParseXAttr L -> P (S.XAttr L)+checkAttr (XAttr l n v) = do v' <- checkExpr v+ return $ S.XAttr l n v'++checkDo :: [Stmt t] -> P ()+checkDo [] = fail "Parse error: Last statement in a do-block must be an expression"+checkDo [Qualifier _ _] = return ()+checkDo (_:xs) = checkDo xs++-- type signature for polymorphic recursion!!+check1Expr :: PExp L -> (S.Exp L -> a) -> P a+check1Expr e1 f = do+ e1' <- checkExpr e1+ return (f e1')++check2Exprs :: PExp L -> PExp L -> (S.Exp L -> S.Exp L -> a) -> P a+check2Exprs e1 e2 f = do+ e1' <- checkExpr e1+ e2' <- checkExpr e2+ return (f e1' e2')++check3Exprs :: PExp L -> PExp L -> PExp L -> (S.Exp L -> S.Exp L -> S.Exp L -> a) -> P a+check3Exprs e1 e2 e3 f = do+ e1' <- checkExpr e1+ e2' <- checkExpr e2+ e3' <- checkExpr e3+ return (f e1' e2' e3')++checkManyExprs :: [PExp L] -> ([S.Exp L] -> a) -> P a+checkManyExprs es f = do+ es' <- mapM checkExpr es+ return (f es')++mCheckExpr :: Maybe (PExp L) -> P (Maybe (S.Exp L))+mCheckExpr Nothing = return Nothing+mCheckExpr (Just e) = checkExpr e >>= return . Just++checkRuleExpr :: PExp L -> P (S.Exp L)+checkRuleExpr = checkExpr++readTool :: Maybe String -> Maybe Tool+readTool = fmap readC+ where readC str = case str of+ "GHC" -> GHC+ "HUGS" -> HUGS+ "NHC98" -> NHC98+ "YHC" -> YHC+ "HADDOCK" -> HADDOCK+ _ -> UnknownTool str++checkField :: PFieldUpdate L -> P (S.FieldUpdate L)+checkField (FieldUpdate l n e) = check1Expr e (S.FieldUpdate l n)+checkField (FieldPun l n) = return $ S.FieldPun l n+checkField (FieldWildcard l) = return $ S.FieldWildcard l++getGConName :: S.Exp L -> P (QName L)+getGConName (S.Con _ n) = return n+getGConName (S.List l []) = return (list_cons_name l)+getGConName _ = fail "Expression in reification is not a name"++-----------------------------------------------------------------------------+-- Check Equation Syntax++checkValDef :: L -> PExp L -> Maybe (S.Type L, S) -> Rhs L -> Maybe (Binds L) -> P (Decl L)+checkValDef l lhs optsig rhs whereBinds = do+ mlhs <- isFunLhs lhs []+ let whpt = srcInfoPoints l+ case mlhs of+ Just (f,es,b,pts) -> do+ ps <- mapM checkPattern es+ let l' = l { srcInfoPoints = pts ++ whpt }+ case optsig of -- only pattern bindings can have signatures+ Nothing -> return (FunBind l $+ if b then [Match l' f ps rhs whereBinds]+ else let (a:bs) = ps+ in [InfixMatch l' a f bs rhs whereBinds])+ Just _ -> fail "Cannot give an explicit type signature to a function binding"+ Nothing -> do+ lhs1 <- checkPattern lhs+ let lhs' = case optsig of+ Nothing -> lhs1+ Just (ty, pt) -> let lp = (ann lhs1 <++> ann ty) <** [pt]+ in PatTypeSig lp lhs1 ty+ return (PatBind l lhs' rhs whereBinds)++-- A variable binding is parsed as a PatBind.++isFunLhs :: PExp L -> [PExp L] -> P (Maybe (Name L, [PExp L], Bool, [S]))+isFunLhs (InfixApp _ l (QVarOp loc (UnQual _ op)) r) es+ | op =~= Symbol () "!" = do+ exts <- getExtensions+ if BangPatterns `elem` exts+ then let (b,bs) = splitBang r []+ loc' = combSpanInfo loc (ann b)+ in isFunLhs l (BangPat loc' b : bs ++ es)+ else return $ Just (op, l:r:es, False, []) -- It's actually a definition of the operator !+ | otherwise =+ let infos = srcInfoPoints loc+ op' = amap (\s -> s { srcInfoPoints = infos }) op+ in (return $ Just (op', l:r:es, False, []))+isFunLhs (App _ (Var l (UnQual _ f)) e) es = return $ Just (f, e:es, True, srcInfoPoints l)+isFunLhs (App _ f e) es = isFunLhs f (e:es)+isFunLhs (Var _ (UnQual _ f)) es@(_:_) = return $ Just (f, es, True, [])+isFunLhs (Paren l f) es@(_:_) = do mlhs <- isFunLhs f es+ case mlhs of+ Just (f',es',b,pts) ->+ let [x,y] = srcInfoPoints l+ in return $ Just (f',es',b,x:pts++[y])+ _ -> return Nothing+isFunLhs _ _ = return Nothing++-- Separating between signature declarations and value definitions in+-- a post-processing step++checkSigVar :: PExp L -> P (Name L)+checkSigVar (Var _ (UnQual l n)) = return $ fmap (const l) n+checkSigVar e = fail $ "Left-hand side of type signature is not a variable: " ++ prettyPrint e++checkExplicitPatSyn :: S -> S -> ([Decl L], [S]) -> S -> P (PatternSynDirection L)+checkExplicitPatSyn whereLoc openLoc (decls, semis) closeLoc =+ let l = whereLoc <^^> closeLoc <** ([whereLoc, openLoc] ++ semis ++ [closeLoc])+ in S.ExplicitBidirectional l <$> mapM checkDecls decls+ where+ checkDecls :: Decl L -> P (Decl L)+ checkDecls p@(PatBind _ pat _ _) =+ case pat of+ PApp _ _ _ -> return p+ PInfixApp _ _ _ _ -> return p+ _ -> fail "Illegal pattern binding in PatternSynonym"+ checkDecls _ = fail "pattern synonym 'where' clause must contain a PatBind"++-----------------------------------------------------------------------------+-- In a class or instance body, a pattern binding must be of a variable.++checkClassBody :: [ClassDecl L] -> P [ClassDecl L]+checkClassBody decls = do+ mapM_ checkClassMethodDef decls+ return decls+ where checkClassMethodDef (ClsDecl _ decl) = checkMethodDef decl+ checkClassMethodDef _ = return ()++checkInstBody :: [InstDecl L] -> P [InstDecl L]+checkInstBody decls = do+ mapM_ checkInstMethodDef decls+ return decls+ where checkInstMethodDef (InsDecl _ decl) = checkMethodDef decl+ checkInstMethodDef _ = return ()++checkMethodDef :: Decl L -> P ()+checkMethodDef (PatBind _ (PVar _ _) _ _) = return ()+checkMethodDef (PatBind loc _ _ _) =+ fail "illegal method definition" `atSrcLoc` fromSrcInfo loc+checkMethodDef _ = return ()++checkDefSigDef :: Decl L -> P (Name L,S.Type L,S)+checkDefSigDef (TypeSig loc [name] typ) =+ let (b:_) = srcInfoPoints loc in return (name,typ,b)+checkDefSigDef (TypeSig _ _ _) =+ fail "default signature must be for a single name"+checkDefSigDef _ =+ fail "default signature must be a type signature"++-----------------------------------------------------------------------------+-- Check that an identifier or symbol is unqualified.+-- For occasions when doing this in the grammar would cause conflicts.++checkUnQual :: QName L -> P (Name L)+checkUnQual (Qual _ _ _) = fail "Illegal qualified name"+checkUnQual (UnQual l n) = return $ fmap (const l) n+checkUnQual (Special _ _) = fail "Illegal special name"++checkQualOrUnQual :: QName L -> P (QName L)+checkQualOrUnQual n@(Qual _ _ _) = return n+checkQualOrUnQual n@(UnQual _ _) = return n+checkQualOrUnQual (Special _ _) = fail "Illegal special name"++-----------------------------------------------------------------------------+-- Check that two xml tag names are equal+checkEqNames :: XName L -> XName L -> P (XName L)+checkEqNames n@(XName _ n1) (XName _ n2)+ | n1 == n2 = return n+checkEqNames n@(XDomName _ d1 n1) (XDomName _ d2 n2)+ | n1 == n2 && d1 == d2 = return n+checkEqNames n m = fail $ "opening tag '" ++ showTag n +++ "' does not match closing tag '" ++ showTag m ++ "'"+ where+ showTag (XName _ n') = n'+ showTag (XDomName _ d n') = d ++ ":" ++ n'+++-----------------------------------------------------------------------------+-- Miscellaneous utilities++checkPrec :: Integer -> P Int+checkPrec i | 0 <= i && i <= 9 = return (fromInteger i)+ | otherwise = fail ("Illegal precedence " ++ show i)++mkRecConstrOrUpdate :: PExp L -> [PFieldUpdate L] -> P (PExp L)+mkRecConstrOrUpdate (Con l c) fs = return (RecConstr l c fs)+mkRecConstrOrUpdate e fs@(_:_) = return (RecUpdate (ann e) e fs)+mkRecConstrOrUpdate _ _ = fail "Empty record update"++updateQNameLoc :: l -> QName l -> QName l+updateQNameLoc l (Qual _ mn n) = Qual l mn n+updateQNameLoc l (UnQual _ n) = UnQual l n+updateQNameLoc l (Special _ s) = Special l s++-----------------------------------------------------------------------------+-- For standalone top level Decl parser, check that we actually only+-- parsed one Decl. This is needed since we parse matches of the same+-- FunBind as multiple separate declarations, and merge them after.+-- This should be called *after* checkRevDecls.++checkSingleDecl :: [Decl L] -> P (Decl L)+checkSingleDecl [d] = return d+checkSingleDecl ds =+ fail $ "Expected a single declaration, found " ++ show (length ds)+++-- Reverse a list of declarations, merging adjacent FunBinds of the+-- same name and checking that their arities match.++checkRevDecls :: [Decl L] -> P [Decl L]+checkRevDecls = mergeFunBinds []+ where+ mergeFunBinds revDs [] = return revDs+ mergeFunBinds revDs (FunBind l' ms1@(Match _ name ps _ _:_):ds1) =+ mergeMatches ms1 ds1 l'+ where+ arity = length ps+ mergeMatches ms' (FunBind _ ms@(Match loc name' ps' _ _:_):ds) l+ | name' =~= name = do+ ignoreArity <- getIgnoreFunctionArity+ if length ps' == arity || ignoreArity+ then mergeMatches (ms++ms') ds (loc <++> l)+ else fail ("arity mismatch for '" ++ prettyPrint name ++ "'")+ `atSrcLoc` fromSrcInfo loc+ mergeMatches ms' ds l = mergeFunBinds (FunBind l ms':revDs) ds+ mergeFunBinds revDs (FunBind l' ims1@(InfixMatch _ _ name _ _ _:_):ds1) =+ mergeInfix ims1 ds1 l'+ where+ mergeInfix ims' (FunBind _ ims@(InfixMatch loc _ name' _ _ _:_):ds) l+ | name' =~= name =+ mergeInfix (ims++ims') ds (loc <++> l)+ mergeInfix ms' ds l = mergeFunBinds (FunBind l ms':revDs) ds+ mergeFunBinds revDs (d:ds) = mergeFunBinds (d:revDs) ds++checkRevClsDecls :: [ClassDecl L] -> P [ClassDecl L]+checkRevClsDecls = mergeClsFunBinds []+ where+ mergeClsFunBinds revDs [] = return revDs+ mergeClsFunBinds revDs (ClsDecl l' (FunBind _ ms1@(Match _ name ps _ _:_)):ds1) =+ mergeMatches ms1 ds1 l'+ where+ arity = length ps+ mergeMatches ms' (ClsDecl _ (FunBind _ ms@(Match loc name' ps' _ _:_)):ds) l+ | name' =~= name = do+ ignoreArity <- getIgnoreFunctionArity+ if length ps' == arity || ignoreArity+ then mergeMatches (ms++ms') ds (loc <++> l)+ else fail ("arity mismatch for '" ++ prettyPrint name ++ "'")+ `atSrcLoc` fromSrcInfo loc+ mergeMatches ms' ds l = mergeClsFunBinds (ClsDecl l (FunBind l ms'):revDs) ds+ mergeClsFunBinds revDs (ClsDecl l' (FunBind _ ims1@(InfixMatch _ _ name _ _ _:_)):ds1) =+ mergeInfix ims1 ds1 l'+ where+ mergeInfix ims' (ClsDecl _ (FunBind _ ims@(InfixMatch loc _ name' _ _ _:_)):ds) l+ | name' =~= name =+ mergeInfix (ims++ims') ds (loc <++> l)+ mergeInfix ms' ds l = mergeClsFunBinds (ClsDecl l (FunBind l ms'):revDs) ds+ mergeClsFunBinds revDs (d:ds) = mergeClsFunBinds (d:revDs) ds++checkRevInstDecls :: [InstDecl L] -> P [InstDecl L]+checkRevInstDecls = mergeInstFunBinds []+ where+ mergeInstFunBinds :: [InstDecl L] -> [InstDecl L] -> P [InstDecl L]+ mergeInstFunBinds revDs [] = return revDs+ mergeInstFunBinds revDs (InsDecl l' (FunBind _ ms1@(Match _ name ps _ _:_)):ds1) =+ mergeMatches ms1 ds1 l'+ where+ arity = length ps+ mergeMatches ms' (InsDecl _ (FunBind _ ms@(Match loc name' ps' _ _:_)):ds) l+ | name' =~= name = do+ ignoreArity <- getIgnoreFunctionArity+ if length ps' == arity || ignoreArity+ then mergeMatches (ms++ms') ds (loc <++> l)+ else fail ("arity mismatch for '" ++ prettyPrint name ++ "'")+ `atSrcLoc` fromSrcInfo loc+ mergeMatches ms' ds l = mergeInstFunBinds (InsDecl l (FunBind l ms'):revDs) ds+ mergeInstFunBinds revDs (InsDecl l' (FunBind _ ims1@(InfixMatch _ _ name _ _ _:_)):ds1) =+ mergeInfix ims1 ds1 l'+ where+ mergeInfix ims' (InsDecl _ (FunBind _ ims@(InfixMatch loc _ name' _ _ _:_)):ds) l+ | name' =~= name =+ mergeInfix (ims++ims') ds (loc <++> l)+ mergeInfix ms' ds l = mergeInstFunBinds (InsDecl l (FunBind l ms'):revDs) ds+ mergeInstFunBinds revDs (d:ds) = mergeInstFunBinds (d:revDs) ds++----------------------------------------------------------------+-- Check that newtype declarations have+-- the right number (1) of constructors++checkDataOrNew :: DataOrNew L -> [QualConDecl L] -> P ()+checkDataOrNew (DataType _) _ = return ()+checkDataOrNew (NewType _) [QualConDecl _ _ _ x] = cX x >> return ()+ where cX (ConDecl _ _ [_]) = return ()+ cX (RecDecl _ _ [_]) = return ()+ cX _ = fail "newtype declaration constructor must have exactly one parameter."+checkDataOrNew _ _ = fail "newtype declaration must have exactly one constructor."++checkDataOrNewG :: DataOrNew L -> [GadtDecl L] -> P ()+checkDataOrNewG (DataType _) _ = return ()+checkDataOrNewG (NewType _) [_] = return ()+checkDataOrNewG _ _ = fail "newtype declaration must have exactly one constructor."++checkSimpleType :: PType L -> P (DeclHead L)+checkSimpleType = checkSimple "test"++---------------------------------------+-- Check actual types++-- | Add a strictness/unpack annotation on a type.+bangType :: Maybe (L -> BangType L, S) -> Maybe (Unpackedness L) -> PType L -> PType L+bangType mstrict munpack ty =+ case (mstrict,munpack) of+ (Nothing, Just upack) -> TyBang (ann upack <++> ann ty) (NoStrictAnnot noSrcSpan) upack ty+ (Just (strict, pos), _) ->+ TyBang (fmap ann munpack <?+> noInfoSpan pos <++> ann ty) (strict (noInfoSpan pos))+ (fromMaybe (NoUnpackPragma noSrcSpan) munpack) ty+ (Nothing, Nothing) -> ty+++checkType :: PType L -> P (S.Type L)+checkType t = checkT t False++checkT :: PType L -> Bool -> P (S.Type L)+checkT t simple = case t of+ TyForall l Nothing cs pt -> do+ when simple $ checkEnabled ExplicitForAll+ ctxt <- checkContext cs+ check1Type pt (S.TyForall l Nothing ctxt)+ TyForall l tvs cs pt -> do+ checkEnabled ExplicitForAll+ ctxt <- checkContext cs+ check1Type pt (S.TyForall l tvs ctxt)+ TyStar l -> return $ S.TyStar l+ TyFun l at rt -> check2Types at rt (S.TyFun l)+ TyTuple l b pts -> checkTypes pts >>= return . S.TyTuple l b+ TyUnboxedSum l es -> checkTypes es >>= return . S.TyUnboxedSum l+ TyList l pt -> check1Type pt (S.TyList l)+ TyParArray l pt -> check1Type pt (S.TyParArray l)+ TyApp l ft at -> check2Types ft at (S.TyApp l)+ TyVar l n -> return $ S.TyVar l n+ TyCon l n -> do+ checkAndWarnTypeOperators n+ return $ S.TyCon l n+ TyParen l pt -> check1Type pt (S.TyParen l)+ -- Here we know that t will be used as an actual type (and not a data constructor)+ -- so we can check that TypeOperators are enabled.+ TyInfix l at op bt -> checkAndWarnTypeOperators (getMaybePromotedQName op)+ >> check2Types at bt (flip (S.TyInfix l) op)+ TyKind l pt k -> check1Type pt (flip (S.TyKind l) k)++ TyPromoted l p -> return $ S.TyPromoted l p -- ??+ TyEquals l at bt -> check2Types at bt (S.TyEquals l)+ TySplice l s -> do+ checkEnabled TemplateHaskell+ return $ S.TySplice l s+ TyBang l b u t' -> check1Type t' (S.TyBang l b u)+ TyWildCard l mn -> return $ S.TyWildCard l mn+ TyQuasiQuote l n s -> do+ checkEnabled QuasiQuotes+ return $ S.TyQuasiQuote l n s+ _ -> fail $ "Parse error in type: " ++ prettyPrint t++getMaybePromotedQName :: MaybePromotedName l -> QName l+getMaybePromotedQName (PromotedName _ q) = q+getMaybePromotedQName (UnpromotedName _ q) = q++check1Type :: PType L -> (S.Type L -> S.Type L) -> P (S.Type L)+check1Type pt f = checkT pt True >>= return . f++check2Types :: PType L -> PType L -> (S.Type L -> S.Type L -> S.Type L) -> P (S.Type L)+check2Types at bt f = checkT at True >>= \a -> checkT bt True >>= \b -> return (f a b)++checkTypes :: [PType L] -> P [S.Type L]+checkTypes = mapM (flip checkT True)++checkTyVar :: Name L -> P (PType L)+checkTyVar n = do+ e <- getExtensions+ return $+ case n of+ Ident il ('_':ident) | NamedWildCards `elem` e ->+ TyWildCard il (Just (Ident (reduceSrcSpanInfo il) ident))+ _ ->+ TyVar (ann n) n+ where+ -- Reduces the length of the SrcSpanInfo by 1 so that it just covers the identifier.+ reduceSrcSpanInfo spaninfo =+ let ss = srcInfoSpan spaninfo+ ss' = ss { srcSpanStartColumn = srcSpanStartColumn ss + 1 }+ in spaninfo { srcInfoSpan = ss' }+---------------------------------------+-- Check kinds++-- ConstraintKinds allow the kind "Constraint", but not "Nat", etc. Specifically+-- test for that.+checkKind :: Kind l -> P ()+checkKind k = case k of+ S.TyVar _ q | constrKind q -> checkEnabledOneOf [ConstraintKinds, DataKinds]+ where constrKind name = case name of+ Ident _ n -> n == "Constraint"+ _ -> False++ _ -> checkEnabled DataKinds++---------------------------------------+-- Converting a complete page++checkPageModule :: PExp L -> ([ModulePragma L],[S],L) -> P (Module L)+checkPageModule xml (os,ss,inf) = do+ mod <- getModuleName+ xml' <- checkExpr xml+ case xml' of+ S.XTag l xn ats mattr cs -> return $ XmlPage (inf<++>l<**(srcInfoPoints l ++ ss)) (ModuleName l mod) os xn ats mattr cs+ S.XETag l xn ats mattr -> return $ XmlPage (inf<++>l<**(srcInfoPoints l ++ ss)) (ModuleName l mod) os xn ats mattr []+ _ -> fail "Unexpected expression; tag is expected"++checkHybridModule :: PExp L -> Module L -> S -> S -> P (Module L)+checkHybridModule xml (Module inf mh os is ds) s1 s2 = do+ xml' <- checkExpr xml+ case xml' of+ S.XTag l xn ats mattr cs -> return $ XmlHybrid (inf<++>l<**(s1 : srcInfoPoints inf ++ s2 : srcInfoPoints l))+ mh os is ds xn ats mattr cs+ S.XETag l xn ats mattr -> return $ XmlHybrid (inf<++>l<**(s1 : srcInfoPoints inf ++ s2 : srcInfoPoints l))+ mh os is ds xn ats mattr []+ _ -> fail "Unexpected expression; tag is expected"+checkHybridModule _ _ _ _ = fail "Hybrid module expected"++---------------------------------------+-- Handle dash-identifiers++mkDVar :: [String] -> String+mkDVar = intercalate "-"++---------------------------------------+-- Combine adjacent for-alls.+--+-- A valid type must have one for-all at the top of the type, or of the fn arg types++mkTyForall :: L -> Maybe [TyVarBind L] -> Maybe (PContext L) -> PType L -> PType L+mkTyForall l mtvs ctxt ty =+ case (ctxt, ty) of+ (Nothing, TyForall _ Nothing ctxt2 ty2) -> TyForall l mtvs ctxt2 ty2+ _ -> TyForall l mtvs ctxt ty++-- Make a role annotation++mkRoleAnnotDecl :: S -> S -> QName L -> [(Maybe String, L)] -> P (Decl L)+mkRoleAnnotDecl l1 l2 tycon roles+ = do roles' <- mapM parse_role roles+ return (RoleAnnotDecl loc' tycon roles')+ where+ loc' =+ case roles of+ [] -> (l1 <^^> l2 <++> ann tycon) <** [l1, l2]+ _ -> (l1 <^^> l2 <++> ann tycon <++> foldl1 (<++>) (map snd roles)) <** [l1, l2]+ possible_roles = [ ("phantom", S.Phantom)+ , ("representational", S.Representational)+ , ("nominal", S.Nominal)]++ parse_role (Nothing, loc_role) = return $ S.RoleWildcard loc_role+ parse_role (Just role, loc_role)+ = case lookup role possible_roles of+ Just found_role -> return $ found_role loc_role+ Nothing ->+ fail ("Illegal role name " ++ role)+++++mkAssocType :: S -> PType L -> (Maybe (ResultSig L), Maybe (S, S.Type L), Maybe (InjectivityInfo L)) -> P (ClassDecl L)+mkAssocType tyloc ty (mres, mty, minj) =+ case (mres,mty, minj) of+ -- No additional information+ (Nothing, Nothing, Nothing) -> do+ dh <- checkSimpleType ty+ return $ ClsTyFam (noInfoSpan tyloc <++> ann ty) dh Nothing Nothing+ -- Type default+ (_, Just (eqloc, rhsty), Nothing) -> do+ ty' <- checkType ty+ let tyeq = TypeEqn (ann ty <++> ann rhsty <** [eqloc]) ty' rhsty+ return $ ClsTyDef (noInfoSpan tyloc <++> ann ty <** [tyloc]) tyeq+ -- Declaration with kind sig+ (Just ressig, _, _) -> do+ dh <- checkSimpleType ty+ return $ ClsTyFam (noInfoSpan tyloc <++> ann ressig <** [tyloc]) dh (Just ressig) Nothing+ -- Decl with inj info+ (Nothing, Just (eqloc, rhsty), Just injinfo) -> do+ ressig <- checkKTyVar eqloc rhsty+ dh <- checkSimpleType ty+ return $ ClsTyFam (noInfoSpan tyloc <++> ann injinfo <** [tyloc]) dh (Just ressig) minj+ _ -> error "mkAssocType"++ where+ checkKTyVar :: S -> S.Type L -> P (ResultSig L)+ checkKTyVar eqloc rhsty =+ case rhsty of+ S.TyVar l n -> return $ TyVarSig (noInfoSpan eqloc <++> l <** [eqloc]) (UnkindedVar l n)+ S.TyKind l (S.TyVar _ n) k -> return $ TyVarSig (noInfoSpan eqloc <++> l <** [eqloc]) (KindedVar l n k)+ _ -> fail ("Result of type family must be a type variable")++-- | Transform btype with strict_mark's into HsEqTy's+-- (((~a) ~b) c) ~d ==> ((~a) ~ (b c)) ~ d+splitTilde :: PType L -> PType L+splitTilde t = go t+ where go (TyApp loc t1 t2)+ | TyBang _ (LazyTy eqloc) (NoUnpackPragma _) t2' <- t2+ = TyEquals (loc <** [srcInfoSpan eqloc]) (go t1) t2'+ | otherwise+ = case go t1 of+ TyEquals eqloc tl tr ->+ TyEquals (eqloc <++> ann t2 <** srcInfoPoints eqloc) tl (TyApp (ann tr <++> ann t2) tr t2)+ t' -> TyApp loc t' t2++ go t' = t'++-- Expects the arguments in the right order+mkEThingWith :: L -> QName L -> [Either S (CName L)] -> P (ExportSpec L)+mkEThingWith loc qn mcns = do+ when (isWc wc && not (null cnames)) (checkEnabled PatternSynonyms)+ return $ EThingWith loc wc qn cnames+ where+ isWc (NoWildcard {}) = False+ isWc _ = True++ wc :: EWildcard L+ wc = maybe (NoWildcard noSrcSpan)+ (\(n,Left s) -> EWildcard (noInfoSpan s) n)+ (findWithIndex 0 checkLeft mcns)++ checkLeft :: Either a b -> Bool+ checkLeft (Left _) = True+ checkLeft _ = False++ cnames = rights mcns++ findWithIndex :: Int -> (a -> Bool) -> [a] -> Maybe (Int, a)+ findWithIndex _ _ [] = Nothing+ findWithIndex n p (x:xs)+ | p x = Just (n, x)+ | otherwise = findWithIndex (n + 1) p xs++data SumOrTuple l = SSum Int Int (PExp l)+ | STuple [Maybe (PExp l)]++mkSumOrTuple :: Boxed -> L -> SumOrTuple L -> P (PExp L)+mkSumOrTuple Unboxed s (SSum before after e) = return (UnboxedSum s before after e)+mkSumOrTuple boxity s (STuple ms) =+ return $ TupleSection s boxity ms+mkSumOrTuple Boxed _s (SSum {}) = fail "Boxed sums are not implemented"
@@ -1,154 +1,259 @@-module Language.Haskell.Exts.Parser - ( - -- * General parsing - Parseable(..), - ParseMode(..), defaultParseMode, ParseResult(..), fromParseResult, - -- * Parsing of specific AST elements - -- ** Modules - parseModule, parseModuleWithMode, parseModuleWithComments, - -- ** Expressions - parseExp, parseExpWithMode, parseExpWithComments, - -- ** Patterns - parsePat, parsePatWithMode, parsePatWithComments, - -- ** Declarations - parseDecl, parseDeclWithMode, parseDeclWithComments, - -- ** Types - parseType, parseTypeWithMode, parseTypeWithComments, - -- ** Option pragmas - getTopPragmas - ) where - - -import Language.Haskell.Exts.InternalParser ( ParseMode(..), defaultParseMode, ParseResult(..), fromParseResult ) -import qualified Language.Haskell.Exts.InternalParser as P - -import Language.Haskell.Exts.Annotated.Syntax -import qualified Language.Haskell.Exts.Syntax as S -import Language.Haskell.Exts.Annotated.Simplify - -import Language.Haskell.Exts.SrcLoc -import Language.Haskell.Exts.Comments - -getTopPragmas :: String -> ParseResult [S.OptionPragma] -getTopPragmas = fmap (map sOptionPragma) . P.getTopPragmas - --- | Class to reuse the parse function at many different types. -class Parseable ast where - -- | Parse a string with default mode. - parse :: String -> ParseResult ast - -- | Parse a string with an explicit mode. - parseWithMode :: ParseMode -> String -> ParseResult ast - -- | Parse a string with an explicit mode, returning all comments along the AST - parseWithComments :: ParseMode -> String -> ParseResult (ast, [Comment]) - - -instance SrcInfo loc => Parseable (Module loc) where - parse = fmap (fmap fromSrcInfo) . P.parseModule - parseWithMode = (fmap (fmap fromSrcInfo) .) . P.parseModuleWithMode - parseWithComments md s = P.parseModuleWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) - -instance SrcInfo loc => Parseable (Exp loc) where - parse = fmap (fmap fromSrcInfo) . P.parseExp - parseWithMode = (fmap (fmap fromSrcInfo) .) . P.parseExpWithMode - parseWithComments md s = P.parseExpWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) - -instance SrcInfo loc => Parseable (Pat loc) where - parse = fmap (fmap fromSrcInfo) . P.parsePat - parseWithMode = (fmap (fmap fromSrcInfo) .) . P.parsePatWithMode - parseWithComments md s = P.parsePatWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) - -instance SrcInfo loc => Parseable (Decl loc) where - parse = fmap (fmap fromSrcInfo) . P.parseDecl - parseWithMode = (fmap (fmap fromSrcInfo) .) . P.parseDeclWithMode - parseWithComments md s = P.parseDeclWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) - -instance SrcInfo loc => Parseable (Type loc) where - parse = fmap (fmap fromSrcInfo) . P.parseType - parseWithMode = (fmap (fmap fromSrcInfo) .) . P.parseTypeWithMode - parseWithComments md s = P.parseTypeWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) - - --- | Parse of a string, which should contain a complete Haskell module. -parseModule :: String -> ParseResult S.Module -parseModule = fmap sModule . P.parseModule - --- | Parse of a string containing a complete Haskell module, using an explicit mode. -parseModuleWithMode :: ParseMode -> String -> ParseResult S.Module -parseModuleWithMode = (fmap sModule .) . P.parseModuleWithMode - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseModuleWithComments :: ParseMode -> String -> ParseResult (S.Module, [Comment]) -parseModuleWithComments = (fmap (\(mod, cs) -> (sModule mod, cs)) .) . P.parseModuleWithComments - --- | Parse of a string containing a Haskell expression. -parseExp :: String -> ParseResult S.Exp -parseExp = fmap sExp . P.parseExp - --- | Parse of a string containing a Haskell expression, using an explicit mode. -parseExpWithMode :: ParseMode -> String -> ParseResult S.Exp -parseExpWithMode = (fmap sExp .) . P.parseExpWithMode - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseExpWithComments :: ParseMode -> String -> ParseResult (S.Exp, [Comment]) -parseExpWithComments = (fmap (\(e, cs) -> (sExp e, cs)) .) . P.parseExpWithComments - --- | Parse of a string containing a Haskell pattern. -parsePat :: String -> ParseResult S.Pat -parsePat = fmap sPat . P.parsePat - --- | Parse of a string containing a Haskell pattern, using an explicit mode. -parsePatWithMode :: ParseMode -> String -> ParseResult S.Pat -parsePatWithMode = (fmap sPat .) . P.parsePatWithMode - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parsePatWithComments :: ParseMode -> String -> ParseResult (S.Pat, [Comment]) -parsePatWithComments = (fmap (\(p, cs) -> (sPat p, cs)) .) . P.parsePatWithComments - --- | Parse of a string containing a Haskell top-level declaration. -parseDecl :: String -> ParseResult S.Decl -parseDecl = fmap sDecl . P.parseDecl - --- | Parse of a string containing a Haskell top-level declaration, using an explicit mode. -parseDeclWithMode :: ParseMode -> String -> ParseResult S.Decl -parseDeclWithMode = (fmap sDecl .) . P.parseDeclWithMode - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseDeclWithComments :: ParseMode -> String -> ParseResult (S.Decl, [Comment]) -parseDeclWithComments = (fmap (\(decl, cs) -> (sDecl decl, cs)) .) . P.parseDeclWithComments - --- | Parse of a string containing a Haskell type. -parseType :: String -> ParseResult S.Type -parseType = fmap sType . P.parseType - --- | Parse of a string containing a Haskell type, using an explicit mode. -parseTypeWithMode :: ParseMode -> String -> ParseResult S.Type -parseTypeWithMode = (fmap sType .) . P.parseTypeWithMode - --- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. -parseTypeWithComments :: ParseMode -> String -> ParseResult (S.Type, [Comment]) -parseTypeWithComments = (fmap (\(t, cs) -> (sType t, cs)) .) . P.parseTypeWithComments - -instance Parseable S.Module where - parse = parseModule - parseWithMode = parseModuleWithMode - parseWithComments = parseModuleWithComments - -instance Parseable S.Exp where - parse = parseExp - parseWithMode = parseExpWithMode - parseWithComments = parseExpWithComments - -instance Parseable S.Pat where - parse = parsePat - parseWithMode = parsePatWithMode - parseWithComments = parsePatWithComments - -instance Parseable S.Decl where - parse = parseDecl - parseWithMode = parseDeclWithMode - parseWithComments = parseDeclWithComments - -instance Parseable S.Type where - parse = parseType - parseWithMode = parseTypeWithMode - parseWithComments = parseTypeWithComments +{-# LANGUAGE CPP, DeriveDataTypeable, FlexibleInstances, DeriveFunctor #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Annotated.Parser+-- Copyright : (c) Niklas Broberg 2004-2009+-- (c) Michael Sloan 2013+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Annotated parser for Haskell with extensions.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.Parser+ (+ -- * General parsing+ Parseable(parse, parseWithMode, parseWithComments)+ , ParseMode(..), defaultParseMode, ParseResult(..), fromParseResult+ -- * Parsing of specific AST elements+ -- ** Modules+ , parseModule, parseModuleWithMode, parseModuleWithComments+ -- ** Expressions+ , parseExp, parseExpWithMode, parseExpWithComments+ -- ** Statements+ , parseStmt, parseStmtWithMode, parseStmtWithComments+ -- ** Patterns+ , parsePat, parsePatWithMode, parsePatWithComments+ -- ** Declarations+ , parseDecl, parseDeclWithMode, parseDeclWithComments+ -- ** Types+ , parseType, parseTypeWithMode, parseTypeWithComments+ -- ** Imports+ , parseImportDecl, parseImportDeclWithMode, parseImportDeclWithComments+ -- * Non-greedy parsers+ , NonGreedy(..)+ , ListOf(..), unListOf+ -- ** Module head parsers+ , getTopPragmas+ , PragmasAndModuleName(..)+ , PragmasAndModuleHead(..)+ , ModuleHeadAndImports(..)+ ) where++import Data.Data hiding (Fixity)+import Language.Haskell.Exts.Fixity+import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.Comments+import Language.Haskell.Exts.InternalParser+import Language.Haskell.Exts.ParseMonad+import Language.Haskell.Exts.SrcLoc++instance Parseable (Decl SrcSpanInfo) where parser = normalParser mparseDecl+instance Parseable (Exp SrcSpanInfo) where parser = normalParser mparseExp+instance Parseable (Module SrcSpanInfo) where parser = normalParser mparseModule+instance Parseable (Pat SrcSpanInfo) where parser = normalParser mparsePat+instance Parseable (Stmt SrcSpanInfo) where parser = normalParser mparseStmt+instance Parseable (Type SrcSpanInfo) where parser = normalParserNoFixity mparseType+instance Parseable (ImportDecl SrcSpanInfo) where parser = normalParserNoFixity mparseImportDecl++normalParser :: AppFixity a => P (a SrcSpanInfo) -> Maybe [Fixity] -> P (a SrcSpanInfo)+normalParser p Nothing = p+normalParser p (Just fixs) = p >>= \ast -> applyFixities fixs ast `atSrcLoc` noLoc++normalParserNoFixity :: P (a SrcSpanInfo) -> Maybe [Fixity] -> P (a SrcSpanInfo)+normalParserNoFixity p _ = p++-- Type-specific functions++-- | Parse of a string, which should contain a complete Haskell module, using 'defaultParseMode'.+parseModule :: String -> ParseResult (Module SrcSpanInfo)+parseModule = parse++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode'.+parseModuleWithMode :: ParseMode -> String -> ParseResult (Module SrcSpanInfo)+parseModuleWithMode = parseWithMode++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode', retaining comments.+parseModuleWithComments :: ParseMode -> String -> ParseResult (Module SrcSpanInfo, [Comment])+parseModuleWithComments = parseWithComments++-- | Parse of a string containing a Haskell expression, using 'defaultParseMode'.+parseExp :: String -> ParseResult (Exp SrcSpanInfo)+parseExp = parse++-- | Parse of a string containing a Haskell expression, using an explicit 'ParseMode'.+parseExpWithMode :: ParseMode -> String -> ParseResult (Exp SrcSpanInfo)+parseExpWithMode = parseWithMode++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode', retaining comments.+parseExpWithComments :: ParseMode -> String -> ParseResult (Exp SrcSpanInfo, [Comment])+parseExpWithComments = parseWithComments++-- | Parse of a string containing a Haskell pattern, using 'defaultParseMode'.+parsePat :: String -> ParseResult (Pat SrcSpanInfo)+parsePat = parse++-- | Parse of a string containing a Haskell pattern, using an explicit 'ParseMode'.+parsePatWithMode :: ParseMode -> String -> ParseResult (Pat SrcSpanInfo)+parsePatWithMode = parseWithMode++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode', retaining comments.+parsePatWithComments :: ParseMode -> String -> ParseResult (Pat SrcSpanInfo, [Comment])+parsePatWithComments = parseWithComments++-- | Parse of a string containing a Haskell top-level declaration, using 'defaultParseMode'.+parseDecl :: String -> ParseResult (Decl SrcSpanInfo)+parseDecl = parse++-- | Parse of a string containing a Haskell top-level declaration, using an explicit 'ParseMode'.+parseDeclWithMode :: ParseMode -> String -> ParseResult (Decl SrcSpanInfo)+parseDeclWithMode = parseWithMode++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode', retaining comments.+parseDeclWithComments :: ParseMode -> String -> ParseResult (Decl SrcSpanInfo, [Comment])+parseDeclWithComments = parseWithComments++-- | Parse of a string containing a Haskell type, using 'defaultParseMode'.+parseType :: String -> ParseResult (Type SrcSpanInfo)+parseType = parse++-- | Parse of a string containing a Haskell type, using an explicit 'ParseMode'.+parseTypeWithMode :: ParseMode -> String -> ParseResult (Type SrcSpanInfo)+parseTypeWithMode = parseWithMode++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode', retaining comments.+parseTypeWithComments :: ParseMode -> String -> ParseResult (Type SrcSpanInfo, [Comment])+parseTypeWithComments = parseWithComments++-- | Parse of a string containing a Haskell statement, using 'defaultParseMode'.+parseStmt :: String -> ParseResult (Stmt SrcSpanInfo)+parseStmt = parse++-- | Parse of a string containing a Haskell type, using an explicit 'ParseMode'.+parseStmtWithMode :: ParseMode -> String -> ParseResult (Stmt SrcSpanInfo)+parseStmtWithMode = parseWithMode++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode', retaining comments.+parseStmtWithComments :: ParseMode -> String -> ParseResult (Stmt SrcSpanInfo, [Comment])+parseStmtWithComments = parseWithComments++-- | Parse of a string containing a Haskell statement, using 'defaultParseMode'.+parseImportDecl :: String -> ParseResult (ImportDecl SrcSpanInfo)+parseImportDecl = parse++-- | Parse of a string containing a Haskell type, using an explicit 'ParseMode'.+parseImportDeclWithMode :: ParseMode -> String -> ParseResult (ImportDecl SrcSpanInfo)+parseImportDeclWithMode = parseWithMode++-- | Parse of a string containing a complete Haskell module, using an explicit 'ParseMode', retaining comments.+parseImportDeclWithComments :: ParseMode -> String -> ParseResult (ImportDecl SrcSpanInfo, [Comment])+parseImportDeclWithComments = parseWithComments++-- Non-greedy parsers (should use ng- prefixed parses exported by InternalParser)++-- | Non-greedy parse of a string starting with a series of top-level option pragmas.+getTopPragmas :: String -> ParseResult [ModulePragma SrcSpanInfo]+getTopPragmas = fmap (unListOf . unNonGreedy) . parse++instance Parseable (NonGreedy (ListOf (ModulePragma SrcSpanInfo))) where+ parser = nglistParserNoFixity ngparseModulePragmas++nglistParserNoFixity :: P ([a SrcSpanInfo], [SrcSpan], SrcSpanInfo) -> Maybe [Fixity] -> P (NonGreedy (ListOf (a SrcSpanInfo)))+nglistParserNoFixity f = fmap (NonGreedy . toListOf) . normalParserNoFixity f++-- | Type intended to be used with 'Parseable', with instances that implement a+-- non-greedy parse of the module name, including top-level pragmas. This+-- means that a parse error that comes after the module header won't be+-- returned. If the 'Maybe' value is 'Nothing', then this means that there was+-- no module header.+data PragmasAndModuleName l = PragmasAndModuleName l+ [ModulePragma l]+ (Maybe (ModuleName l))+ deriving (Eq,Ord,Show,Typeable,Data)++instance Parseable (NonGreedy (PragmasAndModuleName SrcSpanInfo)) where+ parser _ = do+ ((pragmas, pss, pl), mn) <- ngparsePragmasAndModuleName+ let l = combSpanMaybe (pl <** pss) (fmap ann mn)+ return $ NonGreedy $ PragmasAndModuleName l pragmas mn++-- Type intended to be used with 'Parseable', with instances that+-- implement a non-greedy parse of the module name, including+-- top-level pragmas. This means that a parse error that comes+-- after the module header won't be returned. If the 'Maybe' value+-- is 'Nothing', this means that there was no module head.+--+-- Note that the 'ParseMode' matters for this due to the 'MagicHash'+-- changing the lexing of identifiers to include \"#\".+data PragmasAndModuleHead l = PragmasAndModuleHead l+ [ModulePragma l]+ (Maybe (ModuleHead l))+ deriving (Eq,Ord,Show,Typeable,Data)++instance Parseable (NonGreedy (PragmasAndModuleHead SrcSpanInfo)) where+ parser _ = do+ ((pragmas, pss, pl), mh) <- ngparsePragmasAndModuleHead+ let l = combSpanMaybe (pl <** pss) (fmap ann mh)+ return $ NonGreedy $ PragmasAndModuleHead l pragmas mh++-- Type intended to be used with 'Parseable', with instances that+-- implement a non-greedy parse of the module head, including+-- top-level pragmas, module name, export list, and import+-- list. This means that if a parse error that comes after the+-- imports won't be returned. If the 'Maybe' value is 'Nothing',+-- this means that there was no module head.+--+-- Note that the 'ParseMode' matters for this due to the 'MagicHash'+-- changing the lexing of identifiers to include \"#\".+data ModuleHeadAndImports l = ModuleHeadAndImports l+ [ModulePragma l]+ (Maybe (ModuleHead l))+ [ImportDecl l]+ deriving (Eq,Ord,Show,Typeable,Data)++instance Parseable (NonGreedy (ModuleHeadAndImports SrcSpanInfo)) where+ parser _ = do+ ((pragmas, pss, pl), mh, mimps) <- ngparseModuleHeadAndImports+ let l = (pl <** pss) `combSpanMaybe`+ (fmap ann mh) `combSpanMaybe`+ (fmap (\(_, iss, il) -> il <** iss) mimps)+ imps = maybe [] (\(x, _, _) -> x) mimps+ return $ NonGreedy $ ModuleHeadAndImports l pragmas mh imps++-- | Instances of 'Parseable' for @NonGreedy a@ will only consume the input+-- until @a@ is fully parsed. This means that parse errors that come later+-- in the input will be ignored. It's also more efficient, as it's fully lazy+-- in the remainder of the input:+--+-- >>> parse (unlines ("module A where" : "main =" : repeat "blah")) :: ParseResult PragmasAndModuleHead+-- ParseOk (NonGreedy {unNonGreedy = PragmasAndModuleHead [] (ModuleName "A",Nothing,Nothing)})+--+-- (this example uses the simplified AST)+newtype NonGreedy a = NonGreedy { unNonGreedy :: a }+ deriving (Eq,Ord,Show,Typeable,Data)++instance Functor NonGreedy where+ fmap f (NonGreedy x) = NonGreedy (f x)++-- | @ListOf a@ stores lists of the AST type @a@, along with a 'SrcSpanInfo',+-- in order to provide 'Parseable' instances for lists. These instances are+-- provided when the type is used as a list in the syntax, and the same+-- delimiters are used in all of its usages. Some exceptions are made:+data ListOf a = ListOf SrcSpanInfo [a]+ deriving (Eq,Ord,Show,Typeable,Data,Functor)++unListOf :: ListOf a -> [a]+unListOf (ListOf _ xs) = xs++-- It's safe to forget about the previous SrcSpanInfo 'srcInfoPoints',+-- as long as they are created with (presently) are all created with+-- 'noInfoSpan' ('nIS'), '(<^^>)', or '(<++>)', all of which have+-- empty 'srcInfoPoints'. Ideally, the parsers would return better+-- types, but this works.+toListOf :: ([a], [SrcSpan], SrcSpanInfo) -> ListOf a+toListOf (xs, ss, l) = ListOf (infoSpan (srcInfoSpan l) ss) xs
@@ -1,1634 +1,1717 @@--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Exts.Pretty--- Copyright : (c) Niklas Broberg 2004-2009,--- (c) The GHC Team, Noel Winstanley 1997-2000--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@chalmers.se--- Stability : stable--- Portability : portable------ Pretty printer for Haskell with extensions.-----------------------------------------------------------------------------------module Language.Haskell.Exts.Pretty (- -- * Pretty printing- Pretty,- prettyPrintStyleMode, prettyPrintWithMode, prettyPrint,- -- * Pretty-printing styles (from "Text.PrettyPrint.HughesPJ")- P.Style(..), P.style, P.Mode(..),- -- * Haskell formatting modes- PPHsMode(..), Indent, PPLayout(..), defaultMode) where--import Language.Haskell.Exts.Syntax-import qualified Language.Haskell.Exts.Annotated.Syntax as A-import Language.Haskell.Exts.Annotated.Simplify-import qualified Language.Haskell.Exts.ParseSyntax as P--import Language.Haskell.Exts.SrcLoc--import qualified Text.PrettyPrint as P-import Data.List (intersperse)--infixl 5 $$$----------------------------------------------------------------------------------- | Varieties of layout we can use.-data PPLayout = PPOffsideRule -- ^ classical layout- | PPSemiColon -- ^ classical layout made explicit- | PPInLine -- ^ inline decls, with newlines between them- | PPNoLayout -- ^ everything on a single line- deriving Eq--type Indent = Int---- | Pretty-printing parameters.------ /Note:/ the 'onsideIndent' must be positive and less than all other indents.-data PPHsMode = PPHsMode {- -- | indentation of a class or instance- classIndent :: Indent,- -- | indentation of a @do@-expression- doIndent :: Indent,- -- | indentation of the body of a- -- @case@ expression- caseIndent :: Indent,- -- | indentation of the declarations in a- -- @let@ expression- letIndent :: Indent,- -- | indentation of the declarations in a- -- @where@ clause- whereIndent :: Indent,- -- | indentation added for continuation- -- lines that would otherwise be offside- onsideIndent :: Indent,- -- | blank lines between statements?- spacing :: Bool,- -- | Pretty-printing style to use- layout :: PPLayout,- -- | add GHC-style @LINE@ pragmas to output?- linePragmas :: Bool- }---- | The default mode: pretty-print using the offside rule and sensible--- defaults.-defaultMode :: PPHsMode-defaultMode = PPHsMode{- classIndent = 8,- doIndent = 3,- caseIndent = 4,- letIndent = 4,- whereIndent = 6,- onsideIndent = 2,- spacing = True,- layout = PPOffsideRule,- linePragmas = False- }---- | Pretty printing monad-newtype DocM s a = DocM (s -> a)--instance Functor (DocM s) where- fmap f xs = do x <- xs; return (f x)--instance Monad (DocM s) where- (>>=) = thenDocM- (>>) = then_DocM- return = retDocM--{-# INLINE thenDocM #-}-{-# INLINE then_DocM #-}-{-# INLINE retDocM #-}-{-# INLINE unDocM #-}-{-# INLINE getPPEnv #-}--thenDocM :: DocM s a -> (a -> DocM s b) -> DocM s b-thenDocM m k = DocM $ (\s -> case unDocM m $ s of a -> unDocM (k a) $ s)--then_DocM :: DocM s a -> DocM s b -> DocM s b-then_DocM m k = DocM $ (\s -> case unDocM m $ s of _ -> unDocM k $ s)--retDocM :: a -> DocM s a-retDocM a = DocM (\_s -> a)--unDocM :: DocM s a -> (s -> a)-unDocM (DocM f) = f---- all this extra stuff, just for this one function.-getPPEnv :: DocM s s-getPPEnv = DocM id---- So that pp code still looks the same--- this means we lose some generality though---- | The document type produced by these pretty printers uses a 'PPHsMode'--- environment.-type Doc = DocM PPHsMode P.Doc---- | Things that can be pretty-printed, including all the syntactic objects--- in "Language.Haskell.Exts.Syntax".-class Pretty a where- -- | Pretty-print something in isolation.- pretty :: a -> Doc- -- | Pretty-print something in a precedence context.- prettyPrec :: Int -> a -> Doc- pretty = prettyPrec 0- prettyPrec _ = pretty---- The pretty printing combinators--empty :: Doc-empty = return P.empty--nest :: Int -> Doc -> Doc-nest i m = m >>= return . P.nest i----- Literals--text, ptext :: String -> Doc-text = return . P.text-ptext = return . P.text--char :: Char -> Doc-char = return . P.char--int :: Int -> Doc-int = return . P.int--integer :: Integer -> Doc-integer = return . P.integer--float :: Float -> Doc-float = return . P.float--double :: Double -> Doc-double = return . P.double--rational :: Rational -> Doc-rational = return . P.rational---- Simple Combining Forms--parens, brackets, braces,quotes,doubleQuotes :: Doc -> Doc-parens d = d >>= return . P.parens-brackets d = d >>= return . P.brackets-braces d = d >>= return . P.braces-quotes d = d >>= return . P.quotes-doubleQuotes d = d >>= return . P.doubleQuotes--parensIf :: Bool -> Doc -> Doc-parensIf True = parens-parensIf False = id---- Constants--semi,comma,colon,space,equals :: Doc-semi = return P.semi-comma = return P.comma-colon = return P.colon-space = return P.space-equals = return P.equals--lparen,rparen,lbrack,rbrack,lbrace,rbrace :: Doc-lparen = return P.lparen-rparen = return P.rparen-lbrack = return P.lbrack-rbrack = return P.rbrack-lbrace = return P.lbrace-rbrace = return P.rbrace---- Combinators--(<>),(<+>),($$),($+$) :: Doc -> Doc -> Doc-aM <> bM = do{a<-aM;b<-bM;return (a P.<> b)}-aM <+> bM = do{a<-aM;b<-bM;return (a P.<+> b)}-aM $$ bM = do{a<-aM;b<-bM;return (a P.$$ b)}-aM $+$ bM = do{a<-aM;b<-bM;return (a P.$+$ b)}--hcat,hsep,vcat,sep,cat,fsep,fcat :: [Doc] -> Doc-hcat dl = sequence dl >>= return . P.hcat-hsep dl = sequence dl >>= return . P.hsep-vcat dl = sequence dl >>= return . P.vcat-sep dl = sequence dl >>= return . P.sep-cat dl = sequence dl >>= return . P.cat-fsep dl = sequence dl >>= return . P.fsep-fcat dl = sequence dl >>= return . P.fcat---- Some More--hang :: Doc -> Int -> Doc -> Doc-hang dM i rM = do{d<-dM;r<-rM;return $ P.hang d i r}---- Yuk, had to cut-n-paste this one from Pretty.hs-punctuate :: Doc -> [Doc] -> [Doc]-punctuate _ [] = []-punctuate p (d1:ds) = go d1 ds- where- go d [] = [d]- go d (e:es) = (d <> p) : go e es---- | render the document with a given style and mode.-renderStyleMode :: P.Style -> PPHsMode -> Doc -> String-renderStyleMode ppStyle ppMode d = P.renderStyle ppStyle . unDocM d $ ppMode---- | render the document with a given mode.-renderWithMode :: PPHsMode -> Doc -> String-renderWithMode = renderStyleMode P.style---- | render the document with 'defaultMode'.-render :: Doc -> String-render = renderWithMode defaultMode---- | pretty-print with a given style and mode.-prettyPrintStyleMode :: Pretty a => P.Style -> PPHsMode -> a -> String-prettyPrintStyleMode ppStyle ppMode = renderStyleMode ppStyle ppMode . pretty---- | pretty-print with the default style and a given mode.-prettyPrintWithMode :: Pretty a => PPHsMode -> a -> String-prettyPrintWithMode = prettyPrintStyleMode P.style---- | pretty-print with the default style and 'defaultMode'.-prettyPrint :: Pretty a => a -> String-prettyPrint = prettyPrintWithMode defaultMode--fullRenderWithMode :: PPHsMode -> P.Mode -> Int -> Float ->- (P.TextDetails -> a -> a) -> a -> Doc -> a-fullRenderWithMode ppMode m i f fn e mD =- P.fullRender m i f fn e $ (unDocM mD) ppMode---fullRender :: P.Mode -> Int -> Float -> (P.TextDetails -> a -> a)- -> a -> Doc -> a-fullRender = fullRenderWithMode defaultMode--------------------------- Pretty-Print a Module ---------------------instance Pretty Module where- pretty (Module pos m os mbWarn mbExports imp decls) =- markLine pos $- myVcat $ map pretty os ++- (if m == ModuleName "" then id- else \x -> [topLevel (ppModuleHeader m mbWarn mbExports) x])- (map pretty imp ++ map pretty decls)---------------------------- Module Header -------------------------------ppModuleHeader :: ModuleName -> Maybe WarningText -> Maybe [ExportSpec] -> Doc-ppModuleHeader m mbWarn mbExportList = mySep [- text "module",- pretty m,- maybePP ppWarnTxt mbWarn,- maybePP (parenList . map pretty) mbExportList,- text "where"]--ppWarnTxt :: WarningText -> Doc-ppWarnTxt (DeprText s) = mySep [text "{-# DEPRECATED", text s, text "#-}"]-ppWarnTxt (WarnText s) = mySep [text "{-# WARNING", text s, text "#-}"]--instance Pretty ModuleName where- pretty (ModuleName modName) = text modName--instance Pretty ExportSpec where- pretty (EVar name) = pretty name- pretty (EAbs name) = pretty name- pretty (EThingAll name) = pretty name <> text "(..)"- pretty (EThingWith name nameList) =- pretty name <> (parenList . map pretty $ nameList)- pretty (EModuleContents m) = text "module" <+> pretty m--instance Pretty ImportDecl where- pretty (ImportDecl pos m qual src mbPkg mbName mbSpecs) =- markLine pos $- mySep [text "import",- if src then text "{-# SOURCE #-}" else empty,- if qual then text "qualified" else empty,- maybePP (\s -> text (show s)) mbPkg,- pretty m,- maybePP (\m' -> text "as" <+> pretty m') mbName,- maybePP exports mbSpecs]- where- exports (b,specList) =- if b then text "hiding" <+> specs else specs- where specs = parenList . map pretty $ specList--instance Pretty ImportSpec where- pretty (IVar name) = pretty name- pretty (IAbs name) = pretty name- pretty (IThingAll name) = pretty name <> text "(..)"- pretty (IThingWith name nameList) =- pretty name <> (parenList . map pretty $ nameList)--------------------------- Declarations -------------------------------instance Pretty Decl where- pretty (TypeDecl loc name nameList htype) =- blankline $- markLine loc $- mySep ( [text "type", pretty name]- ++ map pretty nameList- ++ [equals, pretty htype])-- pretty (DataDecl loc don context name nameList constrList derives) =- blankline $- markLine loc $- mySep ( [pretty don, ppContext context, pretty name]- ++ map pretty nameList)- <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))- (map pretty constrList))- $$$ ppDeriving derives)-- pretty (GDataDecl loc don context name nameList optkind gadtList derives) =- blankline $- markLine loc $- mySep ( [pretty don, ppContext context, pretty name]- ++ map pretty nameList ++ ppOptKind optkind ++ [text "where"])- $$$ ppBody classIndent (map pretty gadtList)- $$$ ppDeriving derives-- pretty (TypeFamDecl loc name nameList optkind) =- blankline $- markLine loc $- mySep ([text "type", text "family", pretty name]- ++ map pretty nameList- ++ ppOptKind optkind)-- pretty (DataFamDecl loc context name nameList optkind) =- blankline $- markLine loc $- mySep ( [text "data", text "family", ppContext context, pretty name]- ++ map pretty nameList ++ ppOptKind optkind)-- pretty (TypeInsDecl loc ntype htype) =- blankline $- markLine loc $- mySep [text "type", text "instance", pretty ntype, equals, pretty htype]-- pretty (DataInsDecl loc don ntype constrList derives) =- blankline $- markLine loc $- mySep [pretty don, text "instance", pretty ntype]- <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))- (map pretty constrList))- $$$ ppDeriving derives)-- pretty (GDataInsDecl loc don ntype optkind gadtList derives) =- blankline $- markLine loc $- mySep ( [pretty don, text "instance", pretty ntype]- ++ ppOptKind optkind ++ [text "where"])- $$$ ppBody classIndent (map pretty gadtList)- $$$ ppDeriving derives-- --m{spacing=False}- -- special case for empty class declaration- pretty (ClassDecl pos context name nameList fundeps []) =- blankline $- markLine pos $- mySep ( [text "class", ppContext context, pretty name]- ++ map pretty nameList ++ [ppFunDeps fundeps])- pretty (ClassDecl pos context name nameList fundeps declList) =- blankline $- markLine pos $- mySep ( [text "class", ppContext context, pretty name]- ++ map pretty nameList ++ [ppFunDeps fundeps, text "where"])- $$$ ppBody classIndent (map pretty declList)-- -- m{spacing=False}- -- special case for empty instance declaration- pretty (InstDecl pos context name args []) =- blankline $- markLine pos $- mySep ( [text "instance", ppContext context, pretty name]- ++ map ppAType args)- pretty (InstDecl pos context name args declList) =- blankline $- markLine pos $- mySep ( [text "instance", ppContext context, pretty name]- ++ map ppAType args ++ [text "where"])- $$$ ppBody classIndent (map pretty declList)-- pretty (DerivDecl pos context name args) =- blankline $- markLine pos $- mySep ( [text "deriving", text "instance", ppContext context, pretty name]- ++ map ppAType args)- pretty (DefaultDecl pos htypes) =- blankline $- markLine pos $- text "default" <+> parenList (map pretty htypes)-- pretty (SpliceDecl pos splice) =- blankline $- markLine pos $- pretty splice-- pretty (TypeSig pos nameList qualType) =- blankline $- markLine pos $- mySep ((punctuate comma . map pretty $ nameList)- ++ [text "::", pretty qualType])-- pretty (FunBind matches) = do- e <- fmap layout getPPEnv- case e of PPOffsideRule -> foldr ($$$) empty (map pretty matches)- _ -> foldr (\x y -> x <> semi <> y) empty (map pretty matches)-- pretty (PatBind pos pat optsig rhs whereBinds) =- markLine pos $- myFsep [pretty pat, maybePP ppSig optsig, pretty rhs] $$$ ppWhere whereBinds-- pretty (InfixDecl pos assoc prec opList) =- blankline $- markLine pos $- mySep ([pretty assoc, int prec]- ++ (punctuate comma . map pretty $ opList))-- pretty (ForImp pos cconv saf str name typ) =- blankline $- markLine pos $- mySep [text "foreign import", pretty cconv, pretty saf,- text (show str), pretty name, text "::", pretty typ]-- pretty (ForExp pos cconv str name typ) =- blankline $- markLine pos $- mySep [text "foreign export", pretty cconv,- text (show str), pretty name, text "::", pretty typ]-- pretty (RulePragmaDecl pos rules) =- blankline $- markLine pos $- myVcat $ text "{-# RULES" : map pretty rules ++ [text " #-}"]-- pretty (DeprPragmaDecl pos deprs) =- blankline $- markLine pos $- myVcat $ text "{-# DEPRECATED" : map ppWarnDepr deprs ++ [text " #-}"]-- pretty (WarnPragmaDecl pos deprs) =- blankline $- markLine pos $- myVcat $ text "{-# WARNING" : map ppWarnDepr deprs ++ [text " #-}"]-- pretty (InlineSig pos inl activ name) =- blankline $- markLine pos $- mySep [text (if inl then "{-# INLINE" else "{-# NOINLINE"), pretty activ, pretty name, text "#-}"]-- pretty (SpecSig pos name types) =- blankline $- markLine pos $- mySep $ [text "{-# SPECIALISE", pretty name, text "::"]- ++ punctuate comma (map pretty types) ++ [text "#-}"]-- pretty (SpecInlineSig pos inl activ name types) =- blankline $- markLine pos $- mySep $ [text "{-# SPECIALISE", text (if inl then "INLINE" else "NOINLINE"),- pretty activ, pretty name, text "::"]- ++ (punctuate comma $ map pretty types) ++ [text "#-}"]-- pretty (InstSig pos context name args) =- blankline $- markLine pos $- mySep $ [text "{-# SPECIALISE", text "instance", ppContext context, pretty name]- ++ map ppAType args ++ [text "#-}"]--{- pretty (UnknownDeclPragma pos n s) =- blankline $- markLine pos $- mySep $ [text "{-#", text n, text s, text "#-}"] -}---instance Pretty DataOrNew where- pretty DataType = text "data"- pretty NewType = text "newtype"--instance Pretty Assoc where- pretty AssocNone = text "infix"- pretty AssocLeft = text "infixl"- pretty AssocRight = text "infixr"--instance Pretty Match where- pretty (Match pos f ps optsig rhs whereBinds) =- markLine pos $- myFsep (lhs ++ [maybePP ppSig optsig, pretty rhs])- $$$ ppWhere whereBinds- where- lhs = case ps of- l:r:ps' | isSymbolName f ->- let hd = [pretty l, ppName f, pretty r] in- if null ps' then hd- else parens (myFsep hd) : map (prettyPrec 2) ps'- _ -> pretty f : map (prettyPrec 2) ps--ppWhere :: Binds -> Doc-ppWhere (BDecls []) = empty-ppWhere (BDecls l) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty l))-ppWhere (IPBinds b) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty b))--ppSig :: Type -> Doc-ppSig t = text "::" <+> pretty t--instance Pretty ClassDecl where- pretty (ClsDecl decl) = pretty decl-- pretty (ClsDataFam loc context name nameList optkind) =- markLine loc $- mySep ( [text "data", ppContext context, pretty name]- ++ map pretty nameList ++ ppOptKind optkind)-- pretty (ClsTyFam loc name nameList optkind) =- markLine loc $- mySep ( [text "type", pretty name]- ++ map pretty nameList ++ ppOptKind optkind)-- pretty (ClsTyDef loc ntype htype) =- markLine loc $- mySep [text "type", pretty ntype, equals, pretty htype]--instance Pretty InstDecl where- pretty (InsDecl decl) = pretty decl-- pretty (InsType loc ntype htype) =- markLine loc $- mySep [text "type", pretty ntype, equals, pretty htype]-- pretty (InsData loc don ntype constrList derives) =- markLine loc $- mySep [pretty don, pretty ntype]- <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))- (map pretty constrList))- $$$ ppDeriving derives)-- pretty (InsGData loc don ntype optkind gadtList derives) =- markLine loc $- mySep ( [pretty don, pretty ntype]- ++ ppOptKind optkind ++ [text "where"])- $$$ ppBody classIndent (map pretty gadtList)- $$$ ppDeriving derives-- pretty (InsInline loc inl activ name) =- markLine loc $- mySep [text (if inl then "{-# INLINE" else "{-# NOINLINE"), pretty activ, pretty name, text "#-}"]---------------------------- FFI stuff --------------------------------------instance Pretty Safety where- pretty PlayRisky = text "unsafe"- pretty (PlaySafe b) = text $ if b then "threadsafe" else "safe"--instance Pretty CallConv where- pretty StdCall = text "stdcall"- pretty CCall = text "ccall"--------------------------- Pragmas ----------------------------------------ppWarnDepr :: ([Name], String) -> Doc-ppWarnDepr (names, txt) = mySep $ (punctuate comma $ map pretty names) ++ [text $ show txt]--instance Pretty Rule where- pretty (Rule tag activ rvs rhs lhs) =- mySep $ [text $ show tag, pretty activ,- maybePP ppRuleVars rvs,- pretty rhs, char '=', pretty lhs]--ppRuleVars :: [RuleVar] -> Doc-ppRuleVars [] = empty-ppRuleVars rvs = mySep $ text "forall" : map pretty rvs ++ [char '.']--instance Pretty Activation where- pretty AlwaysActive = empty- pretty (ActiveFrom i) = char '[' <> int i <> char ']'- pretty (ActiveUntil i) = text "[~" <> int i <> char ']'--instance Pretty RuleVar where- pretty (RuleVar n) = pretty n- pretty (TypedRuleVar n t) = mySep [pretty n, text "::", pretty t]--instance Pretty OptionPragma where- pretty (LanguagePragma _ ns) =- myFsep $ text "{-# LANGUAGE" : punctuate (char ',') (map pretty ns) ++ [text "#-}"]- pretty (IncludePragma _ s) =- myFsep $ [text "{-# INCLUDE", text s, text "#-}"]- pretty (CFilesPragma _ s) =- myFsep $ [text "{-# CFILES", text s, text "#-}"]- pretty (OptionsPragma _ (Just tool) s) =- myFsep $ [text "{-# OPTIONS_" <> pretty tool, text s, text "#-}"]- pretty (OptionsPragma _ _ s) =- myFsep $ [text "{-# OPTIONS", text s, text "#-}"]-{- pretty (UnknownTopPragma _ n s) =- myFsep $ map text ["{-#", n, s, "#-}"] -}--instance Pretty Tool where- pretty (UnknownTool s) = text s- pretty t = text $ show t--------------------------- Data & Newtype Bodies --------------------------instance Pretty QualConDecl where- pretty (QualConDecl _pos tvs ctxt con) =- myFsep [ppForall (Just tvs), ppContext ctxt, pretty con]--instance Pretty GadtDecl where- pretty (GadtDecl _pos name ty) =- myFsep [pretty name, text "::", pretty ty]--instance Pretty ConDecl where- pretty (RecDecl name fieldList) =- pretty name <> (braceList . map ppField $ fieldList)--{- pretty (ConDecl name@(Symbol _) [l, r]) =- myFsep [prettyPrec prec_btype l, ppName name,- prettyPrec prec_btype r] -}- pretty (ConDecl name typeList) =- mySep $ ppName name : map (prettyPrec prec_atype) typeList- pretty (InfixConDecl l name r) =- myFsep [prettyPrec prec_btype l, ppNameInfix name,- prettyPrec prec_btype r]--ppField :: ([Name],BangType) -> Doc-ppField (names, ty) =- myFsepSimple $ (punctuate comma . map pretty $ names) ++- [text "::", pretty ty]--instance Pretty BangType where- prettyPrec _ (BangedTy ty) = char '!' <> ppAType ty- prettyPrec p (UnBangedTy ty) = prettyPrec p ty- prettyPrec p (UnpackedTy ty) = text "{-# UNPACK #-}" <+> char '!' <> prettyPrec p ty--ppDeriving :: [Deriving] -> Doc-ppDeriving [] = empty-ppDeriving [(d, [])] = text "deriving" <+> ppQName d-ppDeriving ds = text "deriving" <+> parenList (map ppDer ds)- where ppDer :: (QName, [Type]) -> Doc- ppDer (n, ts) = mySep (pretty n : map pretty ts)--------------------------- Types --------------------------ppBType :: Type -> Doc-ppBType = prettyPrec prec_btype--ppAType :: Type -> Doc-ppAType = prettyPrec prec_atype---- precedences for types-prec_btype, prec_atype :: Int-prec_btype = 1 -- left argument of ->,- -- or either argument of an infix data constructor-prec_atype = 2 -- argument of type or data constructor, or of a class--instance Pretty Type where- prettyPrec p (TyForall mtvs ctxt htype) = parensIf (p > 0) $- myFsep [ppForall mtvs, ppContext ctxt, pretty htype]- prettyPrec p (TyFun a b) = parensIf (p > 0) $- myFsep [ppBType a, text "->", pretty b]- prettyPrec _ (TyTuple bxd l) =- let ds = map pretty l- in case bxd of- Boxed -> parenList ds- Unboxed -> hashParenList ds- prettyPrec _ (TyList t) = brackets $ pretty t- prettyPrec p (TyApp a b) =- {-- | a == list_tycon = brackets $ pretty b -- special case- | otherwise = -} parensIf (p > prec_btype) $- myFsep [pretty a, ppAType b]- prettyPrec _ (TyVar name) = pretty name- prettyPrec _ (TyCon name) = pretty name- prettyPrec _ (TyParen t) = parens (pretty t)--- prettyPrec _ (TyPred asst) = pretty asst- prettyPrec _ (TyInfix a op b) = myFsep [pretty a, ppQNameInfix op, pretty b]- prettyPrec _ (TyKind t k) = parens (myFsep [pretty t, text "::", pretty k])---instance Pretty TyVarBind where- pretty (KindedVar var kind) = parens $ myFsep [pretty var, text "::", pretty kind]- pretty (UnkindedVar var) = pretty var--ppForall :: Maybe [TyVarBind] -> Doc-ppForall Nothing = empty-ppForall (Just []) = empty-ppForall (Just vs) = myFsep (text "forall" : map pretty vs ++ [char '.'])------------------------------ Kinds ------------------------------instance Pretty Kind where- pretty KindStar = text "*"- pretty KindBang = text "!"- pretty (KindFn a b) = myFsep [pretty a, text "->", pretty b]- pretty (KindParen k) = parens $ pretty k- pretty (KindVar n) = pretty n--ppOptKind :: Maybe Kind -> [Doc]-ppOptKind Nothing = []-ppOptKind (Just k) = [text "::", pretty k]--------------------- Functional Dependencies --------------------instance Pretty FunDep where- pretty (FunDep from to) =- myFsep $ map pretty from ++ [text "->"] ++ map pretty to---ppFunDeps :: [FunDep] -> Doc-ppFunDeps [] = empty-ppFunDeps fds = myFsep $ (char '|':) . punctuate comma . map pretty $ fds--------------------------- Expressions --------------------------instance Pretty Rhs where- pretty (UnGuardedRhs e) = equals <+> pretty e- pretty (GuardedRhss guardList) = myVcat . map pretty $ guardList--instance Pretty GuardedRhs where- pretty (GuardedRhs _pos guards ppBody) =- myFsep $ [char '|'] ++ (punctuate comma . map pretty $ guards) ++ [equals, pretty ppBody]--instance Pretty Literal where- pretty (Int i) = integer i- pretty (Char c) = text (show c)- pretty (String s) = text (show s)- pretty (Frac r) = double (fromRational r)- -- GHC unboxed literals:- pretty (PrimChar c) = text (show c) <> char '#'- pretty (PrimString s) = text (show s) <> char '#'- pretty (PrimInt i) = integer i <> char '#'- pretty (PrimWord w) = integer w <> text "##"- pretty (PrimFloat r) = float (fromRational r) <> char '#'- pretty (PrimDouble r) = double (fromRational r) <> text "##"--instance Pretty Exp where- pretty (Lit l) = pretty l- -- lambda stuff- pretty (InfixApp a op b) = myFsep [pretty a, pretty op, pretty b]- pretty (NegApp e) = myFsep [char '-', pretty e]- pretty (App a b) = myFsep [pretty a, pretty b]- pretty (Lambda _loc expList ppBody) = myFsep $- char '\\' : map pretty expList ++ [text "->", pretty ppBody]- -- keywords- -- two cases for lets- pretty (Let (BDecls declList) letBody) =- ppLetExp declList letBody- pretty (Let (IPBinds bindList) letBody) =- ppLetExp bindList letBody-- pretty (If cond thenexp elsexp) =- myFsep [text "if", pretty cond,- text "then", pretty thenexp,- text "else", pretty elsexp]- pretty (Case cond altList) =- myFsep [text "case", pretty cond, text "of"]- $$$ ppBody caseIndent (map pretty altList)- pretty (Do stmtList) =- text "do" $$$ ppBody doIndent (map pretty stmtList)- pretty (MDo stmtList) =- text "mdo" $$$ ppBody doIndent (map pretty stmtList)- -- Constructors & Vars- pretty (Var name) = pretty name- pretty (IPVar ipname) = pretty ipname- pretty (Con name) = pretty name- pretty (Tuple expList) = parenList . map pretty $ expList- pretty (TupleSection mExpList) = parenList . map (maybePP pretty) $ mExpList- -- weird stuff- pretty (Paren e) = parens . pretty $ e- pretty (LeftSection e op) = parens (pretty e <+> pretty op)- pretty (RightSection op e) = parens (pretty op <+> pretty e)- pretty (RecConstr c fieldList) =- pretty c <> (braceList . map pretty $ fieldList)- pretty (RecUpdate e fieldList) =- pretty e <> (braceList . map pretty $ fieldList)- -- Lists- pretty (List list) =- bracketList . punctuate comma . map pretty $ list- pretty (EnumFrom e) =- bracketList [pretty e, text ".."]- pretty (EnumFromTo from to) =- bracketList [pretty from, text "..", pretty to]- pretty (EnumFromThen from thenE) =- bracketList [pretty from <> comma, pretty thenE, text ".."]- pretty (EnumFromThenTo from thenE to) =- bracketList [pretty from <> comma, pretty thenE,- text "..", pretty to]- pretty (ListComp e qualList) =- bracketList ([pretty e, char '|']- ++ (punctuate comma . map pretty $ qualList))- pretty (ParComp e qualLists) =- bracketList (intersperse (char '|') $- pretty e : (punctuate comma . concatMap (map pretty) $ qualLists))- pretty (ExpTypeSig _pos e ty) =- myFsep [pretty e, text "::", pretty ty]- -- Template Haskell- pretty (BracketExp b) = pretty b- pretty (SpliceExp s) = pretty s- pretty (TypQuote t) = text "\'\'" <> pretty t- pretty (VarQuote x) = text "\'" <> pretty x- pretty (QuasiQuote n qt) = text ("[$" ++ n ++ "|" ++ qt ++ "|]")- -- Hsx- pretty (XTag _ n attrs mattr cs) =- let ax = maybe [] (return . pretty) mattr- in hcat $- (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):- map pretty cs ++ [myFsep $ [text "</" <> pretty n, char '>']]- pretty (XETag _ n attrs mattr) =- let ax = maybe [] (return . pretty) mattr- in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [text "/>"]- pretty (XPcdata s) = text s- pretty (XExpTag e) =- myFsep $ [text "<%", pretty e, text "%>"]- -- Pragmas- pretty (CorePragma s e) = myFsep $ map text ["{-# CORE", show s, "#-}"] ++ [pretty e]- pretty (SCCPragma s e) = myFsep $ map text ["{-# SCC", show s, "#-}"] ++ [pretty e]- pretty (GenPragma s (a,b) (c,d) e) =- myFsep $ [text "{-# GENERATED", text $ show s,- int a, char ':', int b, char '-',- int c, char ':', int d, text "#-}", pretty e]- -- Arrows- pretty (Proc p e) = myFsep $ [text "proc", pretty p, text "->", pretty e]- pretty (LeftArrApp l r) = myFsep $ [pretty l, text "-<", pretty r]- pretty (RightArrApp l r) = myFsep $ [pretty l, text ">-", pretty r]- pretty (LeftArrHighApp l r) = myFsep $ [pretty l, text "-<<", pretty r]- pretty (RightArrHighApp l r) = myFsep $ [pretty l, text ">>-", pretty r]---instance Pretty XAttr where- pretty (XAttr n v) =- myFsep [pretty n, char '=', pretty v]--instance Pretty XName where- pretty (XName n) = text n- pretty (XDomName d n) = text d <> char ':' <> text n----ppLetExp :: [Decl] -> Exp -> Doc-ppLetExp l b = myFsep [text "let" <+> ppBody letIndent (map pretty l),- text "in", pretty b]--ppWith binds = nest 2 (text "with" $$$ ppBody withIndent (map pretty binds))-withIndent = whereIndent----------------------- Template Haskell ---------------------------instance Pretty Bracket where- pretty (ExpBracket e) = ppBracket "[|" e- pretty (PatBracket p) = ppBracket "[p|" p- pretty (TypeBracket t) = ppBracket "[t|" t- pretty (DeclBracket d) =- myFsep $ text "[d|" : map pretty d ++ [text "|]"]--ppBracket o x = myFsep [text o, pretty x, text "|]"]--instance Pretty Splice where- pretty (IdSplice s) = char '$' <> text s- pretty (ParenSplice e) =- myFsep [text "$(", pretty e, char ')']--------------------------- Patterns -------------------------------instance Pretty Pat where- prettyPrec _ (PVar name) = pretty name- prettyPrec _ (PLit lit) = pretty lit- prettyPrec _ (PNeg p) = myFsep [char '-', pretty p]- prettyPrec p (PInfixApp a op b) = parensIf (p > 0) $- myFsep [pretty a, pretty (QConOp op), pretty b]- prettyPrec p (PApp n ps) = parensIf (p > 1) $- myFsep (pretty n : map pretty ps)- prettyPrec _ (PTuple ps) = parenList . map pretty $ ps- prettyPrec _ (PList ps) =- bracketList . punctuate comma . map pretty $ ps- prettyPrec _ (PParen p) = parens . pretty $ p- prettyPrec _ (PRec c fields) =- pretty c <> (braceList . map pretty $ fields)- -- special case that would otherwise be buggy- prettyPrec _ (PAsPat name (PIrrPat pat)) =- myFsep [pretty name <> char '@', char '~' <> pretty pat]- prettyPrec _ (PAsPat name pat) =- hcat [pretty name, char '@', pretty pat]- prettyPrec _ PWildCard = char '_'- prettyPrec _ (PIrrPat pat) = char '~' <> pretty pat- prettyPrec _ (PatTypeSig _pos pat ty) =- myFsep [pretty pat, text "::", pretty ty]- prettyPrec _ (PViewPat e p) =- myFsep [pretty e, text "->", pretty p]- prettyPrec _ (PNPlusK n k) =- myFsep [pretty n, text "+", text $ show k]- -- HaRP- prettyPrec _ (PRPat rs) =- bracketList . punctuate comma . map pretty $ rs- -- Hsx- prettyPrec _ (PXTag _ n attrs mattr cp) =- let ap = maybe [] (return . pretty) mattr- in hcat $ -- TODO: should not introduce blanks- (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [char '>']):- map pretty cp ++ [myFsep $ [text "</" <> pretty n, char '>']]- prettyPrec _ (PXETag _ n attrs mattr) =- let ap = maybe [] (return . pretty) mattr- in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [text "/>"]- prettyPrec _ (PXPcdata s) = text s- prettyPrec _ (PXPatTag p) =- myFsep $ [text "<%", pretty p, text "%>"]- prettyPrec _ (PXRPats ps) =- myFsep $ text "<[" : map pretty ps ++ [text "%>"]- -- Generics- prettyPrec _ (PExplTypeArg qn t) =- myFsep [pretty qn, text "{|", pretty t, text "|}"]- -- BangPatterns- prettyPrec _ (PBangPat p) = text "!" <> pretty p--instance Pretty PXAttr where- pretty (PXAttr n p) =- myFsep [pretty n, char '=', pretty p]--instance Pretty PatField where- pretty (PFieldPat name pat) =- myFsep [pretty name, equals, pretty pat]- pretty (PFieldPun name) = pretty name- pretty (PFieldWildcard) = text ".."----------------------- Regular Patterns ---------------------------instance Pretty RPat where- pretty (RPOp r op) = pretty r <> pretty op- pretty (RPEither r1 r2) = parens . myFsep $- [pretty r1, char '|', pretty r2]- pretty (RPSeq rs) =- myFsep $ text "(/" : map pretty rs ++ [text "/)"]- pretty (RPGuard r gs) =- myFsep $ text "(|" : pretty r : char '|' : map pretty gs ++ [text "|)"]- -- special case that would otherwise be buggy- pretty (RPCAs n (RPPat (PIrrPat p))) =- myFsep [pretty n <> text "@:", char '~' <> pretty p]- pretty (RPCAs n r) = hcat [pretty n, text "@:", pretty r]- -- special case that would otherwise be buggy- pretty (RPAs n (RPPat (PIrrPat p))) =- myFsep [pretty n <> text "@:", char '~' <> pretty p]- pretty (RPAs n r) = hcat [pretty n, char '@', pretty r]- pretty (RPPat p) = pretty p- pretty (RPParen rp) = parens . pretty $ rp--instance Pretty RPatOp where- pretty RPStar = char '*'- pretty RPStarG = text "*!"- pretty RPPlus = char '+'- pretty RPPlusG = text "+!"- pretty RPOpt = char '?'- pretty RPOptG = text "?!"--------------------------- Case bodies --------------------------instance Pretty Alt where- pretty (Alt _pos e gAlts binds) =- pretty e <+> pretty gAlts $$$ ppWhere binds--instance Pretty GuardedAlts where- pretty (UnGuardedAlt e) = text "->" <+> pretty e- pretty (GuardedAlts altList) = myVcat . map pretty $ altList--instance Pretty GuardedAlt where- pretty (GuardedAlt _pos guards body) =- myFsep $ char '|': (punctuate comma . map pretty $ guards) ++ [text "->", pretty body]--------------------------- Statements in monads, guards & list comprehensions ------instance Pretty Stmt where- pretty (Generator _loc e from) =- pretty e <+> text "<-" <+> pretty from- pretty (Qualifier e) = pretty e- -- two cases for lets- pretty (LetStmt (BDecls declList)) =- ppLetStmt declList- pretty (LetStmt (IPBinds bindList)) =- ppLetStmt bindList- pretty (RecStmt stmtList) =- text "rec" $$$ ppBody letIndent (map pretty stmtList)--ppLetStmt l = text "let" $$$ ppBody letIndent (map pretty l)--instance Pretty QualStmt where- pretty (QualStmt s) = pretty s- pretty (ThenTrans f) = myFsep $ [text "then", pretty f]- pretty (ThenBy f e) = myFsep $ [text "then", pretty f, text "by", pretty e]- pretty (GroupBy e) = myFsep $ [text "then", text "group", text "by", pretty e]- pretty (GroupUsing f) = myFsep $ [text "then", text "group", text "using", pretty f]- pretty (GroupByUsing e f) = myFsep $ [text "then", text "group", text "by",- pretty e, text "using", pretty f]----------------------------- Record updates-instance Pretty FieldUpdate where- pretty (FieldUpdate name e) =- myFsep [pretty name, equals, pretty e]- pretty (FieldPun name) = pretty name- pretty (FieldWildcard) = text ".."--------------------------- Names --------------------------instance Pretty QOp where- pretty (QVarOp n) = ppQNameInfix n- pretty (QConOp n) = ppQNameInfix n--ppQNameInfix :: QName -> Doc-ppQNameInfix name- | isSymbolName (getName name) = ppQName name- | otherwise = char '`' <> ppQName name <> char '`'--instance Pretty QName where- pretty name = case name of- UnQual (Symbol ('#':_)) -> char '(' <+> ppQName name <+> char ')'- _ -> parensIf (isSymbolName (getName name)) (ppQName name)--ppQName :: QName -> Doc-ppQName (UnQual name) = ppName name-ppQName (Qual m name) = pretty m <> char '.' <> ppName name-ppQName (Special sym) = text (specialName sym)--instance Pretty Op where- pretty (VarOp n) = ppNameInfix n- pretty (ConOp n) = ppNameInfix n--ppNameInfix :: Name -> Doc-ppNameInfix name- | isSymbolName name = ppName name- | otherwise = char '`' <> ppName name <> char '`'--instance Pretty Name where- pretty name = case name of- Symbol ('#':_) -> char '(' <+> ppName name <+> char ')'- _ -> parensIf (isSymbolName name) (ppName name)--ppName :: Name -> Doc-ppName (Ident s) = text s-ppName (Symbol s) = text s--instance Pretty IPName where- pretty (IPDup s) = char '?' <> text s- pretty (IPLin s) = char '%' <> text s--instance Pretty IPBind where- pretty (IPBind _loc ipname exp) =- myFsep [pretty ipname, equals, pretty exp]--instance Pretty CName where- pretty (VarName n) = pretty n- pretty (ConName n) = pretty n--isSymbolName :: Name -> Bool-isSymbolName (Symbol _) = True-isSymbolName _ = False--getName :: QName -> Name-getName (UnQual s) = s-getName (Qual _ s) = s-getName (Special Cons) = Symbol ":"-getName (Special FunCon) = Symbol "->"-getName (Special s) = Ident (specialName s)--specialName :: SpecialCon -> String-specialName UnitCon = "()"-specialName ListCon = "[]"-specialName FunCon = "->"-specialName (TupleCon b n) = "(" ++ hash ++ replicate (n-1) ',' ++ hash ++ ")"- where hash = if b == Unboxed then "#" else ""-specialName Cons = ":"--ppContext :: Context -> Doc-ppContext [] = empty-ppContext context = mySep [parenList (map pretty context), text "=>"]---- hacked for multi-parameter type classes-instance Pretty Asst where- pretty (ClassA a ts) = myFsep $ ppQName a : map ppAType ts- pretty (InfixA a op b) = myFsep $ [pretty a, ppQNameInfix op, pretty b]- pretty (IParam i t) = myFsep $ [pretty i, text "::", pretty t]- pretty (EqualP t1 t2) = myFsep $ [pretty t1, text "~", pretty t2]---- Pretty print a source location, useful for printing out error messages-instance Pretty SrcLoc where- pretty srcLoc =- return $ P.hsep [ colonFollow (P.text $ srcFilename srcLoc)- , colonFollow (P.int $ srcLine srcLoc)- , P.int $ srcColumn srcLoc- ]--colonFollow p = P.hcat [ p, P.colon ]---instance Pretty SrcSpan where- pretty srcSpan =- return $ P.hsep [ colonFollow (P.text $ srcSpanFilename srcSpan)- , P.hcat [ P.text "("- , P.int $ srcSpanStartLine srcSpan- , P.colon- , P.int $ srcSpanStartColumn srcSpan- , P.text ")"- ]- , P.text "-"- , P.hcat [ P.text "("- , P.int $ srcSpanEndLine srcSpan- , P.colon- , P.int $ srcSpanEndColumn srcSpan- , P.text ")"- ]- ]-------------------------------------------------------------------------- Annotated version--------------------------- Pretty-Print a Module ---------------------instance SrcInfo pos => Pretty (A.Module pos) where- pretty (A.Module pos mbHead os imp decls) =- markLine pos $- myVcat $ map pretty os ++- (case mbHead of- Nothing -> id- Just h -> \x -> [topLevel (pretty h) x])- (map pretty imp ++ map pretty decls)- pretty (A.XmlPage pos _mn os n attrs mattr cs) =- markLine pos $- myVcat $ map pretty os ++- [let ax = maybe [] (return . pretty) mattr- in hcat $- (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):- map pretty cs ++ [myFsep $ [text "</" <> pretty n, char '>']]]- pretty (A.XmlHybrid pos mbHead os imp decls n attrs mattr cs) =- markLine pos $- myVcat $ map pretty os ++ [text "<%"] ++- (case mbHead of- Nothing -> id- Just h -> \x -> [topLevel (pretty h) x])- (map pretty imp ++ map pretty decls ++- [let ax = maybe [] (return . pretty) mattr- in hcat $- (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):- map pretty cs ++ [myFsep $ [text "</" <> pretty n, char '>']]])------------------------------ Module Header -------------------------------instance Pretty (A.ModuleHead l) where- pretty (A.ModuleHead _ m mbWarn mbExportList) = mySep [- text "module",- pretty m,- maybePP pretty mbWarn,- maybePP pretty mbExportList,- text "where"]--instance Pretty (A.WarningText l) where- pretty = ppWarnTxt. sWarningText--instance Pretty (A.ModuleName l) where- pretty = pretty . sModuleName--instance Pretty (A.ExportSpecList l) where- pretty (A.ExportSpecList _ especs) = parenList $ map pretty especs--instance Pretty (A.ExportSpec l) where- pretty = pretty . sExportSpec--instance SrcInfo pos => Pretty (A.ImportDecl pos) where- pretty = pretty . sImportDecl--instance Pretty (A.ImportSpecList l) where- pretty (A.ImportSpecList _ b ispecs) =- (if b then text "hiding" else empty)- <+> parenList (map pretty ispecs)--instance Pretty (A.ImportSpec l) where- pretty = pretty . sImportSpec--------------------------- Declarations -------------------------------instance SrcInfo pos => Pretty (A.Decl pos) where- pretty = pretty . sDecl--instance Pretty (A.DeclHead l) where- pretty (A.DHead l n tvs) = mySep (pretty n : map pretty tvs)- pretty (A.DHInfix l tva n tvb) = mySep [pretty tva, pretty n, pretty tvb]- pretty (A.DHParen l dh) = parens (pretty dh)--instance Pretty (A.InstHead l) where- pretty (A.IHead l qn ts) = mySep (pretty qn : map pretty ts)- pretty (A.IHInfix l ta qn tb) = mySep [pretty ta, pretty qn, pretty tb]- pretty (A.IHParen l ih) = parens (pretty ih)--instance Pretty (A.DataOrNew l) where- pretty = pretty . sDataOrNew--instance Pretty (A.Assoc l) where- pretty = pretty . sAssoc--instance SrcInfo pos => Pretty (A.Match pos) where- pretty = pretty . sMatch--instance SrcInfo loc => Pretty (A.ClassDecl loc) where- pretty = pretty . sClassDecl--instance SrcInfo loc => Pretty (A.InstDecl loc) where- pretty = pretty . sInstDecl--------------------------- FFI stuff --------------------------------------instance Pretty (A.Safety l) where- pretty = pretty . sSafety--instance Pretty (A.CallConv l) where- pretty = pretty . sCallConv--------------------------- Pragmas ----------------------------------------instance SrcInfo loc => Pretty (A.Rule loc) where- pretty = pretty . sRule--instance Pretty (A.Activation l) where- pretty = pretty . sActivation--instance Pretty (A.RuleVar l) where- pretty = pretty . sRuleVar--instance Pretty (A.OptionPragma l) where- pretty (A.LanguagePragma _ ns) =- myFsep $ text "{-# LANGUAGE" : punctuate (char ',') (map pretty ns) ++ [text "#-}"]- pretty (A.IncludePragma _ s) =- myFsep $ [text "{-# INCLUDE", text s, text "#-}"]- pretty (A.CFilesPragma _ s) =- myFsep $ [text "{-# CFILES", text s, text "#-}"]- pretty (A.OptionsPragma _ (Just tool) s) =- myFsep $ [text "{-# OPTIONS_" <> pretty tool, text s, text "#-}"]- pretty (A.OptionsPragma _ _ s) =- myFsep $ [text "{-# OPTIONS", text s, text "#-}"]--------------------------- Data & Newtype Bodies --------------------------instance Pretty (A.QualConDecl l) where- pretty (A.QualConDecl _pos mtvs ctxt con) =- myFsep [ppForall (fmap (map sTyVarBind) mtvs), ppContext $ maybe [] sContext ctxt, pretty con]--instance Pretty (A.GadtDecl l) where- pretty (A.GadtDecl _pos name ty) =- myFsep [pretty name, text "::", pretty ty]--instance Pretty (A.ConDecl l) where- pretty = pretty . sConDecl--instance Pretty (A.FieldDecl l) where- pretty (A.FieldDecl _ names ty) =- myFsepSimple $ (punctuate comma . map pretty $ names) ++- [text "::", pretty ty]---instance Pretty (A.BangType l) where- pretty = pretty . sBangType--instance Pretty (A.Deriving l) where- pretty (A.Deriving _ []) = text "deriving" <+> parenList []- pretty (A.Deriving _ [A.IHead _ d []]) = text "deriving" <+> pretty d- pretty (A.Deriving _ ihs) = text "deriving" <+> parenList (map pretty ihs)--------------------------- Types --------------------------instance Pretty (A.Type l) where- pretty = pretty . sType--instance Pretty (A.TyVarBind l) where- pretty = pretty . sTyVarBind------------------------------ Kinds ------------------------------instance Pretty (A.Kind l) where- pretty = pretty . sKind--------------------- Functional Dependencies --------------------instance Pretty (A.FunDep l) where- pretty = pretty . sFunDep--------------------------- Expressions --------------------------instance SrcInfo loc => Pretty (A.Rhs loc) where- pretty = pretty . sRhs--instance SrcInfo loc => Pretty (A.GuardedRhs loc) where- pretty = pretty . sGuardedRhs--instance Pretty (A.Literal l) where- pretty = pretty . sLiteral--instance SrcInfo loc => Pretty (A.Exp loc) where- pretty = pretty . sExp--instance SrcInfo loc => Pretty (A.XAttr loc) where- pretty = pretty . sXAttr--instance Pretty (A.XName l) where- pretty = pretty . sXName----------------------- Template Haskell ---------------------------instance SrcInfo loc => Pretty (A.Bracket loc) where- pretty = pretty . sBracket--instance SrcInfo loc => Pretty (A.Splice loc) where- pretty = pretty . sSplice--------------------------- Patterns -------------------------------instance SrcInfo loc => Pretty (A.Pat loc) where- pretty = pretty . sPat--instance SrcInfo loc => Pretty (A.PXAttr loc) where- pretty = pretty . sPXAttr--instance SrcInfo loc => Pretty (A.PatField loc) where- pretty = pretty . sPatField----------------------- Regular Patterns ---------------------------instance SrcInfo loc => Pretty (A.RPat loc) where- pretty = pretty . sRPat--instance Pretty (A.RPatOp l) where- pretty = pretty . sRPatOp--------------------------- Case bodies --------------------------instance SrcInfo loc => Pretty (A.Alt loc) where- pretty = pretty . sAlt--instance SrcInfo loc => Pretty (A.GuardedAlts loc) where- pretty = pretty . sGuardedAlts--instance SrcInfo loc => Pretty (A.GuardedAlt loc) where- pretty = pretty . sGuardedAlt--------------------------- Statements in monads, guards & list comprehensions ------instance SrcInfo loc => Pretty (A.Stmt loc) where- pretty = pretty . sStmt--instance SrcInfo loc => Pretty (A.QualStmt loc) where- pretty = pretty . sQualStmt--------------------------- Record updates-instance SrcInfo loc => Pretty (A.FieldUpdate loc) where- pretty = pretty . sFieldUpdate--------------------------- Names --------------------------instance Pretty (A.QOp l) where- pretty = pretty . sQOp--instance Pretty (A.QName l) where- pretty = pretty . sQName--instance Pretty (A.Op l) where- pretty = pretty . sOp--instance Pretty (A.Name l) where- pretty = pretty . sName--instance Pretty (A.IPName l) where- pretty = pretty . sIPName--instance SrcInfo loc => Pretty (A.IPBind loc) where- pretty = pretty . sIPBind--instance Pretty (A.CName l) where- pretty = pretty . sCName--instance Pretty (A.Context l) where- pretty (A.CxEmpty _) = mySep [text "()", text "=>"]- pretty (A.CxSingle _ asst) = mySep [pretty asst, text "=>"]- pretty (A.CxTuple _ assts) = myFsep $ [parenList (map pretty assts), text "=>"]- pretty (A.CxParen _ asst) = parens (pretty asst)---- hacked for multi-parameter type classes-instance Pretty (A.Asst l) where- pretty = pretty . sAsst--------------------------- pp utils --------------------------maybePP :: (a -> Doc) -> Maybe a -> Doc-maybePP pp Nothing = empty-maybePP pp (Just a) = pp a--parenList :: [Doc] -> Doc-parenList = parens . myFsepSimple . punctuate comma--hashParenList :: [Doc] -> Doc-hashParenList = hashParens . myFsepSimple . punctuate comma- where hashParens = parens . hashes- hashes = \doc -> char '#' <> doc <> char '#'--braceList :: [Doc] -> Doc-braceList = braces . myFsepSimple . punctuate comma--bracketList :: [Doc] -> Doc-bracketList = brackets . myFsepSimple---- Wrap in braces and semicolons, with an extra space at the start in--- case the first doc begins with "-", which would be scanned as {--flatBlock :: [Doc] -> Doc-flatBlock = braces . (space <>) . hsep . punctuate semi---- Same, but put each thing on a separate line-prettyBlock :: [Doc] -> Doc-prettyBlock = braces . (space <>) . vcat . punctuate semi---- Monadic PP Combinators -- these examine the env--blankline :: Doc -> Doc-blankline dl = do{e<-getPPEnv;if spacing e && layout e /= PPNoLayout- then space $$ dl else dl}-topLevel :: Doc -> [Doc] -> Doc-topLevel header dl = do- e <- fmap layout getPPEnv- case e of- PPOffsideRule -> header $$ vcat dl- PPSemiColon -> header $$ prettyBlock dl- PPInLine -> header $$ prettyBlock dl- PPNoLayout -> header <+> flatBlock dl--ppBody :: (PPHsMode -> Int) -> [Doc] -> Doc-ppBody f dl = do- e <- fmap layout getPPEnv- case e of PPOffsideRule -> indent- PPSemiColon -> indentExplicit- _ -> flatBlock dl- where- indent = do{i <-fmap f getPPEnv;nest i . vcat $ dl}- indentExplicit = do {i <- fmap f getPPEnv;- nest i . prettyBlock $ dl}--($$$) :: Doc -> Doc -> Doc-a $$$ b = layoutChoice (a $$) (a <+>) b--mySep :: [Doc] -> Doc-mySep = layoutChoice mySep' hsep- where- -- ensure paragraph fills with indentation.- mySep' [x] = x- mySep' (x:xs) = x <+> fsep xs- mySep' [] = error "Internal error: mySep"--myVcat :: [Doc] -> Doc-myVcat = layoutChoice vcat hsep--myFsepSimple :: [Doc] -> Doc-myFsepSimple = layoutChoice fsep hsep---- same, except that continuation lines are indented,--- which is necessary to avoid triggering the offside rule.-myFsep :: [Doc] -> Doc-myFsep = layoutChoice fsep' hsep- where fsep' [] = empty- fsep' (d:ds) = do- e <- getPPEnv- let n = onsideIndent e- nest n (fsep (nest (-n) d:ds))--layoutChoice :: (a -> Doc) -> (a -> Doc) -> a -> Doc-layoutChoice a b dl = do e <- getPPEnv- if layout e == PPOffsideRule ||- layout e == PPSemiColon- then a dl else b dl---- Prefix something with a LINE pragma, if requested.--- GHC's LINE pragma actually sets the current line number to n-1, so--- that the following line is line n. But if there's no newline before--- the line we're talking about, we need to compensate by adding 1.--markLine :: SrcInfo s => s -> Doc -> Doc-markLine loc doc = do- e <- getPPEnv- let y = startLine loc- let line l =- text ("{-# LINE " ++ show l ++ " \"" ++ fileName loc ++ "\" #-}")- if linePragmas e then layoutChoice (line y $$) (line (y+1) <+>) doc- else doc------------------------------------------------------------------------------------- Pretty-printing of internal constructs, for error messages while parsing--instance SrcInfo loc => Pretty (P.PExp loc) where- pretty (P.Lit _ l) = pretty l- pretty (P.InfixApp _ a op b) = myFsep [pretty a, pretty op, pretty b]- pretty (P.NegApp _ e) = myFsep [char '-', pretty e]- pretty (P.App _ a b) = myFsep [pretty a, pretty b]- pretty (P.Lambda _loc expList ppBody) = myFsep $- char '\\' : map pretty expList ++ [text "->", pretty ppBody]- pretty (P.Let _ (A.BDecls _ declList) letBody) =- ppLetExp declList letBody- pretty (P.Let _ (A.IPBinds _ bindList) letBody) =- ppLetExp bindList letBody- pretty (P.If _ cond thenexp elsexp) =- myFsep [text "if", pretty cond,- text "then", pretty thenexp,- text "else", pretty elsexp]- pretty (P.Case _ cond altList) =- myFsep [text "case", pretty cond, text "of"]- $$$ ppBody caseIndent (map pretty altList)- pretty (P.Do _ stmtList) =- text "do" $$$ ppBody doIndent (map pretty stmtList)- pretty (P.MDo _ stmtList) =- text "mdo" $$$ ppBody doIndent (map pretty stmtList)- pretty (P.Var _ name) = pretty name- pretty (P.IPVar _ ipname) = pretty ipname- pretty (P.Con _ name) = pretty name- pretty (P.TupleSection _ mExpList) = parenList . map (maybePP pretty) $ mExpList- pretty (P.Paren _ e) = parens . pretty $ e- pretty (P.RecConstr _ c fieldList) =- pretty c <> (braceList . map pretty $ fieldList)- pretty (P.RecUpdate _ e fieldList) =- pretty e <> (braceList . map pretty $ fieldList)- pretty (P.List _ list) =- bracketList . punctuate comma . map pretty $ list- pretty (P.EnumFrom _ e) =- bracketList [pretty e, text ".."]- pretty (P.EnumFromTo _ from to) =- bracketList [pretty from, text "..", pretty to]- pretty (P.EnumFromThen _ from thenE) =- bracketList [pretty from <> comma, pretty thenE, text ".."]- pretty (P.EnumFromThenTo _ from thenE to) =- bracketList [pretty from <> comma, pretty thenE,- text "..", pretty to]- pretty (P.ParComp _ e qualLists) =- bracketList (intersperse (char '|') $- pretty e : (punctuate comma . concatMap (map pretty) $ qualLists))- pretty (P.ExpTypeSig _pos e ty) =- myFsep [pretty e, text "::", pretty ty]- pretty (P.BracketExp _ b) = pretty b- pretty (P.SpliceExp _ s) = pretty s- pretty (P.TypQuote _ t) = text "\'\'" <> pretty t- pretty (P.VarQuote _ x) = text "\'" <> pretty x- pretty (P.QuasiQuote _ n qt) = text ("[$" ++ n ++ "|" ++ qt ++ "|]")- pretty (P.XTag _ n attrs mattr cs) =- let ax = maybe [] (return . pretty) mattr- in hcat $- (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):- map pretty cs ++ [myFsep $ [text "</" <> pretty n, char '>']]- pretty (P.XETag _ n attrs mattr) =- let ax = maybe [] (return . pretty) mattr- in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [text "/>"]- pretty (P.XPcdata _ s) = text s- pretty (P.XExpTag _ e) =- myFsep $ [text "<%", pretty e, text "%>"]- pretty (P.CorePragma _ s e) = myFsep $ map text ["{-# CORE", show s, "#-}"] ++ [pretty e]- pretty (P.SCCPragma _ s e) = myFsep $ map text ["{-# SCC", show s, "#-}"] ++ [pretty e]- pretty (P.GenPragma _ s (a,b) (c,d) e) =- myFsep $ [text "{-# GENERATED", text $ show s,- int a, char ':', int b, char '-',- int c, char ':', int d, text "#-}", pretty e]- pretty (P.Proc _ p e) = myFsep $ [text "proc", pretty p, text "->", pretty e]- pretty (P.LeftArrApp _ l r) = myFsep $ [pretty l, text "-<", pretty r]- pretty (P.RightArrApp _ l r) = myFsep $ [pretty l, text ">-", pretty r]- pretty (P.LeftArrHighApp _ l r) = myFsep $ [pretty l, text "-<<", pretty r]- pretty (P.RightArrHighApp _ l r) = myFsep $ [pretty l, text ">>-", pretty r]- pretty (P.AsPat _ name (P.IrrPat _ pat)) =- myFsep [pretty name <> char '@', char '~' <> pretty pat]- pretty (P.AsPat _ name pat) =- hcat [pretty name, char '@', pretty pat]- pretty (P.WildCard _) = char '_'- pretty (P.IrrPat _ pat) = char '~' <> pretty pat- pretty (P.PostOp _ e op) = pretty e <+> pretty op- pretty (P.PreOp _ op e) = pretty op <+> pretty e- pretty (P.ViewPat _ e p) =- myFsep [pretty e, text "->", pretty p]- pretty (P.SeqRP _ rs) = myFsep $ text "(/" : map pretty rs ++ [text "/)"]- pretty (P.GuardRP _ r gs) =- myFsep $ text "(|" : pretty r : char '|' : map pretty gs ++ [text "|)"]- pretty (P.EitherRP _ r1 r2) = parens . myFsep $ [pretty r1, char '|', pretty r2]- pretty (P.CAsRP _ n (P.IrrPat _ e)) =- myFsep [pretty n <> text "@:", char '~' <> pretty e]- pretty (P.CAsRP _ n r) = hcat [pretty n, text "@:", pretty r]- pretty (P.XRPats _ ps) =- myFsep $ text "<[" : map pretty ps ++ [text "%>"]- pretty (P.ExplTypeArg _ qn t) =- myFsep [pretty qn, text "{|", pretty t, text "|}"]- pretty (P.BangPat _ e) = text "!" <> pretty e--instance SrcInfo loc => Pretty (P.PFieldUpdate loc) where- pretty (P.FieldUpdate _ name e) =- myFsep [pretty name, equals, pretty e]- pretty (P.FieldPun _ name) = pretty name- pretty (P.FieldWildcard _) = text ".."--instance SrcInfo loc => Pretty (P.ParseXAttr loc) where- pretty (P.XAttr _ n v) =- myFsep [pretty n, char '=', pretty v]--instance SrcInfo loc => Pretty (P.PContext loc) where- pretty (P.CxEmpty _) = mySep [text "()", text "=>"]- pretty (P.CxSingle _ asst) = mySep [pretty asst, text "=>"]- pretty (P.CxTuple _ assts) = myFsep $ [parenList (map pretty assts), text "=>"]- pretty (P.CxParen _ asst) = parens (pretty asst)--instance SrcInfo loc => Pretty (P.PAsst loc) where- pretty (P.ClassA _ a ts) = myFsep $ ppQName (sQName a) : map (prettyPrec prec_atype) ts- pretty (P.InfixA _ a op b) = myFsep $ [pretty a, ppQNameInfix (sQName op), pretty b]- pretty (P.IParam _ i t) = myFsep $ [pretty i, text "::", pretty t]- pretty (P.EqualP _ t1 t2) = myFsep $ [pretty t1, text "~", pretty t2]--instance SrcInfo loc => Pretty (P.PType loc) where- prettyPrec p (P.TyForall _ mtvs ctxt htype) = parensIf (p > 0) $- myFsep [ppForall (fmap (map sTyVarBind) mtvs), maybePP pretty ctxt, pretty htype]- prettyPrec p (P.TyFun _ a b) = parensIf (p > 0) $- myFsep [prettyPrec prec_btype a, text "->", pretty b]- prettyPrec _ (P.TyTuple _ bxd l) =- let ds = map pretty l- in case bxd of- Boxed -> parenList ds- Unboxed -> hashParenList ds- prettyPrec _ (P.TyList _ t) = brackets $ pretty t- prettyPrec p (P.TyApp _ a b) =- {-- | a == list_tycon = brackets $ pretty b -- special case- | otherwise = -} parensIf (p > prec_btype) $- myFsep [pretty a, prettyPrec prec_atype b]- prettyPrec _ (P.TyVar _ name) = pretty name- prettyPrec _ (P.TyCon _ name) = pretty name- prettyPrec _ (P.TyParen _ t) = parens (pretty t)- prettyPrec _ (P.TyPred _ asst) = pretty asst- prettyPrec _ (P.TyInfix _ a op b) = myFsep [pretty a, ppQNameInfix (sQName op), pretty b]- prettyPrec _ (P.TyKind _ t k) = parens (myFsep [pretty t, text "::", pretty k])+{-# LANGUAGE CPP #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Pretty+-- Copyright : (c) Niklas Broberg 2004-2009,+-- (c) The GHC Team, Noel Winstanley 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Pretty printer for Haskell with extensions.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Pretty (+ -- * Pretty printing+ Pretty,+ prettyPrintStyleMode, prettyPrintWithMode, prettyPrint,+ -- * Pretty-printing styles (from "Text.PrettyPrint.HughesPJ")+ P.Style(..), P.style, P.Mode(..),+ -- * Haskell formatting modes+ PPHsMode(..), Indent, PPLayout(..), defaultMode+ -- * Primitive Printers+ , prettyPrim, prettyPrimWithMode+ ) where++import Language.Haskell.Exts.Syntax+import qualified Language.Haskell.Exts.ParseSyntax as P++import Language.Haskell.Exts.SrcLoc hiding (loc)++import Prelude hiding ( exp+#if MIN_VERSION_base(4,11,0)+ , (<>)+#endif+ )+import qualified Text.PrettyPrint as P+import Data.List (intersperse)+import Data.Maybe (isJust , fromMaybe)+#if __GLASGOW_HASKELL__ < 710+import Control.Applicative (Applicative(..), (<$>))+#endif+import qualified Control.Monad as M (ap)++infixl 5 $$$++-----------------------------------------------------------------------------++-- | Varieties of layout we can use.+data PPLayout = PPOffsideRule -- ^ classical layout+ | PPSemiColon -- ^ classical layout made explicit+ | PPInLine -- ^ inline decls, with newlines between them+ | PPNoLayout -- ^ everything on a single line+ deriving Eq++type Indent = Int++-- | Pretty-printing parameters.+--+-- /Note:/ the 'onsideIndent' must be positive and less than all other indents.+data PPHsMode = PPHsMode {+ -- | indentation of a class or instance+ classIndent :: Indent,+ -- | indentation of a @do@-expression+ doIndent :: Indent,+ -- | indentation of the body of a+ -- @case@ expression+ multiIfIndent :: Indent,+ -- | indentation of the body of a+ -- multi-@if@ expression+ caseIndent :: Indent,+ -- | indentation of the declarations in a+ -- @let@ expression+ letIndent :: Indent,+ -- | indentation of the declarations in a+ -- @where@ clause+ whereIndent :: Indent,+ -- | indentation added for continuation+ -- lines that would otherwise be offside+ onsideIndent :: Indent,+ -- | blank lines between statements?+ spacing :: Bool,+ -- | Pretty-printing style to use+ layout :: PPLayout,+ -- | add GHC-style @LINE@ pragmas to output?+ linePragmas :: Bool+ }++-- | The default mode: pretty-print using the offside rule and sensible+-- defaults.+defaultMode :: PPHsMode+defaultMode = PPHsMode{+ classIndent = 8,+ doIndent = 3,+ multiIfIndent = 3,+ caseIndent = 4,+ letIndent = 4,+ whereIndent = 6,+ onsideIndent = 2,+ spacing = True,+ layout = PPOffsideRule,+ linePragmas = False+ }++-- | Pretty printing monad+newtype DocM s a = DocM (s -> a)++instance Functor (DocM s) where+ fmap f xs = do x <- xs; return (f x)++instance Applicative (DocM s) where+ pure = retDocM+ (<*>) = M.ap++instance Monad (DocM s) where+ (>>=) = thenDocM+ (>>) = then_DocM++{-# INLINE thenDocM #-}+{-# INLINE then_DocM #-}+{-# INLINE retDocM #-}+{-# INLINE unDocM #-}+{-# INLINE getPPEnv #-}++thenDocM :: DocM s a -> (a -> DocM s b) -> DocM s b+thenDocM m k = DocM $ \s -> case unDocM m s of a -> unDocM (k a) s++then_DocM :: DocM s a -> DocM s b -> DocM s b+then_DocM m k = DocM $ \s -> case unDocM m s of _ -> unDocM k s++retDocM :: a -> DocM s a+retDocM a = DocM $ const a++unDocM :: DocM s a -> s -> a+unDocM (DocM f) = f++-- all this extra stuff, just for this one function.+getPPEnv :: DocM s s+getPPEnv = DocM id++-- So that pp code still looks the same+-- this means we lose some generality though++-- | The document type produced by these pretty printers uses a 'PPHsMode'+-- environment.+type Doc = DocM PPHsMode P.Doc++-- | Things that can be pretty-printed, including all the syntactic objects+-- in "Language.Haskell.Exts.Syntax".+class Pretty a where+ -- | Pretty-print something in isolation.+ pretty :: a -> Doc+ -- | Pretty-print something in a precedence context.+ prettyPrec :: Int -> a -> Doc+ pretty = prettyPrec 0+ prettyPrec _ = pretty++-- The pretty printing combinators++empty :: Doc+empty = return P.empty++nest :: Int -> Doc -> Doc+nest i m = m >>= return . P.nest i+++-- Literals++text :: String -> Doc+text = return . P.text++char :: Char -> Doc+char = return . P.char++int :: Int -> Doc+int = return . P.int++integer :: Integer -> Doc+integer = return . P.integer++float :: Float -> Doc+float = return . P.float++double :: Double -> Doc+double = return . P.double++-- rational :: Rational -> Doc+-- rational = return . P.rational++-- Simple Combining Forms++parens, brackets, braces, doubleQuotes :: Doc -> Doc+parens d = d >>= return . P.parens+brackets d = d >>= return . P.brackets+braces d = d >>= return . P.braces+-- quotes :: Doc -> Doc+-- quotes d = d >>= return . P.quotes+doubleQuotes d = d >>= return . P.doubleQuotes++parensIf :: Bool -> Doc -> Doc+parensIf True = parens+parensIf False = id++-- Constants++semi,comma,space,equals :: Doc+semi = return P.semi+comma = return P.comma+-- colon :: Doc+-- colon = return P.colon+space = return P.space+equals = return P.equals++{-+lparen,rparen,lbrack,rbrack,lbrace,rbrace :: Doc+lparen = return P.lparen+rparen = return P.rparen+lbrack = return P.lbrack+rbrack = return P.rbrack+lbrace = return P.lbrace+rbrace = return P.rbrace+-}++-- Combinators++(<>),(<+>),($$) :: Doc -> Doc -> Doc+aM <> bM = do{a<-aM;b<-bM;return (a P.<> b)}+aM <+> bM = do{a<-aM;b<-bM;return (a P.<+> b)}+aM $$ bM = do{a<-aM;b<-bM;return (a P.$$ b)}+($+$) :: Doc -> Doc -> Doc+aM $+$ bM = do{a<-aM;b<-bM;return (a P.$+$ b)}++hcat,hsep,vcat,fsep :: [Doc] -> Doc+hcat dl = sequence dl >>= return . P.hcat+hsep dl = sequence dl >>= return . P.hsep+vcat dl = sequence dl >>= return . P.vcat+-- sep, cat, fcat :: [Doc] -> Doc+-- sep dl = sequence dl >>= return . P.sep+-- cat dl = sequence dl >>= return . P.cat+fsep dl = sequence dl >>= return . P.fsep+-- fcat dl = sequence dl >>= return . P.fcat++-- Some More++-- hang :: Doc -> Int -> Doc -> Doc+-- hang dM i rM = do{d<-dM;r<-rM;return $ P.hang d i r}++-- Yuk, had to cut-n-paste this one from Pretty.hs+punctuate :: Doc -> [Doc] -> [Doc]+punctuate _ [] = []+punctuate p (d1:ds) = go d1 ds+ where+ go d [] = [d]+ go d (e:es) = (d <> p) : go e es++-- | render the document with a given style and mode.+renderStyleMode :: P.Style -> PPHsMode -> Doc -> String+renderStyleMode ppStyle ppMode d = P.renderStyle ppStyle . unDocM d $ ppMode++-- | render the document with a given mode.+-- renderWithMode :: PPHsMode -> Doc -> String+-- renderWithMode = renderStyleMode P.style++-- | render the document with 'defaultMode'.+-- render :: Doc -> String+-- render = renderWithMode defaultMode++-- | pretty-print with a given style and mode.+prettyPrintStyleMode :: Pretty a => P.Style -> PPHsMode -> a -> String+prettyPrintStyleMode ppStyle ppMode = renderStyleMode ppStyle ppMode . pretty++-- | pretty-print with the default style and a given mode.+prettyPrintWithMode :: Pretty a => PPHsMode -> a -> String+prettyPrintWithMode = prettyPrintStyleMode P.style++-- | pretty-print with the default style and 'defaultMode'.+prettyPrint :: Pretty a => a -> String+prettyPrint = prettyPrintWithMode defaultMode++-- fullRenderWithMode :: PPHsMode -> P.Mode -> Int -> Float ->+-- (P.TextDetails -> a -> a) -> a -> Doc -> a+-- fullRenderWithMode ppMode m i f fn e mD =+-- P.fullRender m i f fn e $ (unDocM mD) ppMode+++-- fullRender :: P.Mode -> Int -> Float -> (P.TextDetails -> a -> a)+-- -> a -> Doc -> a+-- fullRender = fullRenderWithMode defaultMode++-- | pretty-print with the default style and 'defaultMode'.+prettyPrim :: Pretty a => a -> P.Doc+prettyPrim = prettyPrimWithMode defaultMode++-- | pretty-print with the default style and a given mode.+prettyPrimWithMode :: Pretty a => PPHsMode -> a -> P.Doc+prettyPrimWithMode pphs doc = unDocM (pretty doc) pphs+++------------------------- Pretty-Print a Module --------------------+{-+instance Pretty (Module l) where+ pretty (Module pos m os mbWarn mbExports imp decls) =+ markLine pos $ (myVcat $ map pretty os) $$+ myVcat (+ (if m == ModuleName "" then id+ else \x -> [topLevel (ppModuleHeader m mbWarn mbExports) x])+ (map pretty imp +++ ppDecls (m /= ModuleName "" ||+ not (null imp) ||+ not (null os))+ decls]-}++-------------------------- Module Header ------------------------------+instance Pretty (ModuleHead l) where+ pretty (ModuleHead _ m mbWarn mbExportList) =+ mySep [+ text "module",+ pretty m,+ maybePP ppWarnTxt mbWarn,+ maybePP pretty mbExportList,+ text "where"]++instance Pretty (ExportSpecList l) where+ pretty (ExportSpecList _ especs) = parenList $ map pretty especs++ppWarnTxt :: WarningText l -> Doc+ppWarnTxt (DeprText _ s) = mySep [text "{-# DEPRECATED", text (show s), text "#-}"]+ppWarnTxt (WarnText _ s) = mySep [text "{-# WARNING", text (show s), text "#-}"]++instance Pretty (ModuleName l) where+ pretty (ModuleName _ modName) = text modName++instance Pretty (Namespace l) where+ pretty NoNamespace {} = empty+ pretty TypeNamespace {} = text "type"+ pretty PatternNamespace {} = text "pattern"++instance Pretty (ExportSpec l) where+ pretty (EVar _ name) = pretty name+ pretty (EAbs _ ns name) = pretty ns <+> pretty name+ pretty (EThingWith _ wc name nameList) =+ let prettyNames = map pretty nameList+ names = case wc of+ NoWildcard {} -> prettyNames+ EWildcard _ n ->+ let (before,after) = splitAt n prettyNames+ in before ++ [text ".."] ++ after+ in pretty name <> (parenList names)+ pretty (EModuleContents _ m) = text "module" <+> pretty m++instance Pretty (ImportDecl l) where+ pretty (ImportDecl _ m qual src safe mbPkg mbName mbSpecs) =+ mySep [text "import",+ if src then text "{-# SOURCE #-}" else empty,+ if safe then text "safe" else empty,+ if qual then text "qualified" else empty,+ maybePP (\s -> text (show s)) mbPkg,+ pretty m,+ maybePP (\m' -> text "as" <+> pretty m') mbName,+ maybePP pretty mbSpecs]++instance Pretty (ImportSpecList l) where+ pretty (ImportSpecList _ b ispecs) =+ (if b then text "hiding" else empty)+ <+> parenList (map pretty ispecs)++instance Pretty (ImportSpec l) where+ pretty (IVar _ name ) = pretty name+ pretty (IAbs _ ns name) = pretty ns <+> pretty name+ pretty (IThingAll _ name) = pretty name <> text "(..)"+ pretty (IThingWith _ name nameList) =+ pretty name <> (parenList . map pretty $ nameList)++instance Pretty (TypeEqn l) where+ pretty (TypeEqn _ pat eqn) = mySep [pretty pat, equals, pretty eqn]++------------------------- Declarations ------------------------------+class Pretty a => PrettyDeclLike a where+ wantsBlankline :: a -> Bool++instance PrettyDeclLike (Decl l) where+ wantsBlankline (FunBind {}) = False+ wantsBlankline (PatBind {}) = False+ wantsBlankline _ = True++condBlankline :: PrettyDeclLike a => a -> Doc+condBlankline d = (if wantsBlankline d then blankline else id) $ pretty d++ppDecls :: PrettyDeclLike a => Bool -> [a] -> [Doc]+ppDecls True ds = map condBlankline ds+ppDecls False (d:ds) = pretty d : map condBlankline ds+ppDecls _ _ = []+--ppDecls = map condBlankline++instance Pretty (InjectivityInfo l) where+ pretty (InjectivityInfo _ from to) =+ char '|' <+> pretty from <+> text "->" <+> hsep (map pretty to)++instance Pretty (ResultSig l) where+ pretty (KindSig _ kind) = text "::" <+> pretty kind+ pretty (TyVarSig _ tv) = char '=' <+> pretty tv++instance Pretty (Decl l) where+ pretty (TypeDecl _ dHead htype) =+ mySep ( [text "type", pretty dHead]+ ++ [equals, pretty htype])++ pretty (DataDecl _ don context dHead constrList derives) =+ mySep ( [pretty don, maybePP pretty context, pretty dHead])++ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppIndent letIndent (map pretty derives))++ pretty (GDataDecl _ don context dHead optkind gadtList derives) =+ mySep ( [pretty don, maybePP pretty context, pretty dHead]+ ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+ $$$ ppIndent letIndent (map pretty derives)++ pretty (TypeFamDecl _ dHead optkind optinj) =+ mySep ([text "type", text "family", pretty dHead+ , maybePP pretty optkind, maybePP pretty optinj])++ pretty (ClosedTypeFamDecl _ dHead optkind optinj eqns) =+ mySep ([text "type", text "family", pretty dHead+ , maybePP pretty optkind ,maybePP pretty optinj+ , text "where"]) $$$ ppBody classIndent (map pretty eqns)++ pretty (DataFamDecl _ context dHead optkind) =+ mySep ( [text "data", text "family", maybePP pretty context, pretty dHead+ , maybePP pretty optkind])++ pretty (TypeInsDecl _ ntype htype) =+ mySep [text "type", text "instance", pretty ntype, equals, pretty htype]++ pretty (DataInsDecl _ don ntype constrList derives) =+ mySep [pretty don, text "instance ", pretty ntype]+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppIndent letIndent (map pretty derives))++ pretty (GDataInsDecl _ don ntype optkind gadtList derives) =+ mySep ( [pretty don, text "instance ", pretty ntype]+ ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+ $$$ ppIndent letIndent (map pretty derives)++ --m{spacing=False}+ -- special case for empty class declaration+ pretty (ClassDecl _ context dHead fundeps Nothing) =+ mySep ( [text "class", maybePP pretty context, pretty dHead+ , ppFunDeps fundeps])+ pretty (ClassDecl _ context dHead fundeps declList) =+ mySep ( [text "class", maybePP pretty context, pretty dHead+ , ppFunDeps fundeps, text "where"])+ $$$ ppBody classIndent (fromMaybe [] ((ppDecls False) <$> declList))++ -- m{spacing=False}+ -- special case for empty instance declaration+ pretty (InstDecl _ moverlap iHead Nothing) =+ mySep ( [text "instance", maybePP pretty moverlap, pretty iHead])+ pretty (InstDecl _ overlap iHead declList) =+ mySep ( [ text "instance", maybePP pretty overlap+ , pretty iHead, text "where"])+ $$$ ppBody classIndent (fromMaybe [] ((ppDecls False) <$> declList))++ pretty (DerivDecl _ mds overlap irule) =+ mySep ( [ text "deriving"+ , maybePP pretty mds+ , text "instance"+ , maybePP pretty overlap+ , pretty irule])+ pretty (DefaultDecl _ htypes) =+ text "default" <+> parenList (map pretty htypes)++ pretty (SpliceDecl _ splice) =+ pretty splice++ pretty (TSpliceDecl _ splice) =+ pretty splice++ pretty (TypeSig _ nameList qualType) =+ mySep ((punctuate comma . map pretty $ nameList)+ ++ [text "::", pretty qualType])++ -- Req can be ommitted if it is empty+ -- We must print prov if req is nonempty+ pretty (PatSynSig _ ns mtvs prov mtvs2 req t) =+ let contexts = [maybePP pretty prov, ppForall mtvs2, maybePP pretty req]+ in+ mySep ( [text "pattern" ]+ ++ punctuate comma (map pretty ns)+ ++ [ text "::", ppForall mtvs] +++ contexts ++ [pretty t] )+++ pretty (FunBind _ matches) = do+ e <- fmap layout getPPEnv+ case e of PPOffsideRule -> foldr ($$$) empty (map pretty matches)+ _ -> hsep $ punctuate semi (map pretty matches)++ pretty (PatBind _ pat rhs whereBinds) =+ myFsep [pretty pat, pretty rhs] $$$ ppWhere whereBinds++ pretty (InfixDecl _ assoc prec opList) =+ mySep ([pretty assoc, maybePP int prec]+ ++ (punctuate comma . map pretty $ opList))++ pretty (PatSyn _ pat rhs dir) =+ let sep = case dir of+ ImplicitBidirectional {} -> "="+ ExplicitBidirectional {} -> "<-"+ Unidirectional {} -> "<-"+ in+ (mySep ([text "pattern", pretty pat, text sep, pretty rhs])) $$$+ (case dir of+ ExplicitBidirectional _ ds ->+ nest 2 (text "where" $$$ ppBody whereIndent (ppDecls False ds))+ _ -> empty)++ pretty (ForImp _ cconv saf str name typ) =+ mySep [text "foreign import", pretty cconv, maybePP pretty saf,+ maybe empty (text . show) str, pretty name, text "::", pretty typ]++ pretty (ForExp _ cconv str name typ) =+ mySep [text "foreign export", pretty cconv,+ text (show str), pretty name, text "::", pretty typ]++ pretty (RulePragmaDecl _ rules) =+ myVcat $ text "{-# RULES" : map pretty rules ++ [text " #-}"]++ pretty (DeprPragmaDecl _ deprs) =+ myVcat $ text "{-# DEPRECATED" : map ppWarnDepr deprs ++ [text " #-}"]++ pretty (WarnPragmaDecl _ deprs) =+ myVcat $ text "{-# WARNING" : map ppWarnDepr deprs ++ [text " #-}"]++ pretty (InlineSig _ inl activ name) =+ mySep [text (if inl then "{-# INLINE" else "{-# NOINLINE")+ , maybePP pretty activ, pretty name, text "#-}"]++ pretty (InlineConlikeSig _ activ name) =+ mySep [ text "{-# INLINE CONLIKE", maybePP pretty activ+ , pretty name, text "#-}"]++ pretty (SpecSig _ activ name types) =+ mySep $ [text "{-# SPECIALISE", maybePP pretty activ+ , pretty name, text "::"]+ ++ punctuate comma (map pretty types) ++ [text "#-}"]++ pretty (SpecInlineSig _ inl activ name types) =+ mySep $ [text "{-# SPECIALISE", text (if inl then "INLINE" else "NOINLINE"),+ maybePP pretty activ, pretty name, text "::"]+ ++ (punctuate comma $ map pretty types) ++ [text "#-}"]++ pretty (InstSig _ irule) =+ mySep $ [ text "{-# SPECIALISE", text "instance", pretty irule+ , text "#-}"]++ pretty (AnnPragma _ annp) =+ mySep [text "{-# ANN", pretty annp, text "#-}"]++ pretty (MinimalPragma _ b) =+ let bs = case b of { Just b' -> pretty b'; _ -> empty }+ in myFsep [text "{-# MINIMAL", bs, text "#-}"]++ pretty (RoleAnnotDecl _ qn rs) =+ mySep ( [text "type", text "role", pretty qn]+ ++ map pretty rs )+ pretty (CompletePragma _ cls opt_ts) =+ let cls_p = punctuate comma $ map pretty cls+ ts_p = maybe empty (\tc -> text "::" <+> pretty tc) opt_ts+ in myFsep $ [text "{-# COMPLETE"] ++ cls_p ++ [ts_p, text "#-}"]++instance Pretty (InstRule l) where+ pretty (IRule _ tvs mctxt qn) =+ mySep [ppForall tvs+ , maybePP pretty mctxt, pretty qn]+ pretty (IParen _ ih) = parens (pretty ih)++instance Pretty (InstHead l) where+ pretty (IHCon _ qn) = pretty qn+ pretty (IHInfix _ ta qn) = mySep [pretty ta, pretty qn]+ pretty (IHParen _ ih) = parens (pretty ih)+ pretty (IHApp _ ih t) = myFsep [pretty ih, pretty t]+++instance Pretty (Annotation l) where+ pretty (Ann _ n e) = myFsep [pretty n, pretty e]+ pretty (TypeAnn _ n e) = myFsep [text "type", pretty n, pretty e]+ pretty (ModuleAnn _ e) = myFsep [text "module", pretty e]++instance Pretty (BooleanFormula l) where+ pretty (VarFormula _ n) = pretty n+ pretty (AndFormula _ bs) = myFsep $ punctuate (text " ,") $ map pretty bs+ pretty (OrFormula _ bs) = myFsep $ punctuate (text " |") $ map pretty bs+ pretty (ParenFormula _ b) = parens $ pretty b++instance Pretty (Role l) where+ pretty RoleWildcard{} = char '_'+ pretty Nominal{} = text "nominal"+ pretty Representational{} = text "representational"+ pretty Phantom{} = text "phantom"++instance Pretty (DataOrNew l) where+ pretty DataType{} = text "data"+ pretty NewType{} = text "newtype"++instance Pretty (Assoc l) where+ pretty AssocNone{} = text "infix"+ pretty AssocLeft{} = text "infixl"+ pretty AssocRight{} = text "infixr"++instance Pretty (Match l) where+ pretty (InfixMatch _ l op rs rhs wbinds) =+ let+ lhs = case rs of+ [] -> [] -- Should never reach+ (r:rs') ->+ let hd = [prettyPrec 2 l, ppNameInfix op, prettyPrec 2 r]+ in if null rs'+ then hd+ else parens (myFsep hd) : map (prettyPrec 3) rs'++ in myFsep (lhs ++ [pretty rhs]) $$$ ppWhere wbinds+ pretty (Match _ f ps rhs whereBinds) =+ myFsep (pretty f : map (prettyPrec 3) ps ++ [pretty rhs])+ $$$ ppWhere whereBinds++ppWhere :: Maybe (Binds l) -> Doc+ppWhere Nothing = empty+ppWhere (Just (BDecls _ l)) = nest 2 (text "where" $$$ ppBody whereIndent (ppDecls False l))+ppWhere (Just (IPBinds _ b)) = nest 2 (text "where" $$$ ppBody whereIndent (ppDecls False b))++instance PrettyDeclLike (ClassDecl l) where+ wantsBlankline (ClsDecl _ d) = wantsBlankline d+ wantsBlankline (ClsDefSig {}) = True+ wantsBlankline _ = False++instance Pretty (ClassDecl l) where+ pretty (ClsDecl _ decl) = pretty decl++ pretty (ClsDataFam _ context declHead optkind) =+ mySep ( [text "data", maybePP pretty context, pretty declHead+ , maybePP pretty optkind])++ pretty (ClsTyFam _ declHead optkind optinj) =+ mySep ( [text "type", pretty declHead+ , maybePP pretty optkind, maybePP pretty optinj])++ pretty (ClsTyDef _ ntype) =+ mySep [text "type", pretty ntype]++ pretty (ClsDefSig _ name typ) =+ mySep [+ text "default",+ pretty name,+ text "::",+ pretty typ]++instance Pretty (DeclHead l) where+ pretty (DHead _ n) = pretty n+ pretty (DHInfix _ tv n) = pretty tv <+> ppNameInfix n+ pretty (DHParen _ d) = parens (pretty d)+ pretty (DHApp _ dh tv) = pretty dh <+> pretty tv++++instance PrettyDeclLike (InstDecl l) where+ wantsBlankline (InsDecl _ d) = wantsBlankline d+ wantsBlankline _ = False++instance Pretty (InstDecl l) where+ pretty (InsDecl _ decl) = pretty decl++ pretty (InsType _ ntype htype) =+ mySep [text "type", pretty ntype, equals, pretty htype]++ pretty (InsData _ don ntype constrList derives) =+ mySep [pretty don, pretty ntype]+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppIndent letIndent (map pretty derives))++ pretty (InsGData _ don ntype optkind gadtList derives) =+ mySep ( [pretty don, pretty ntype]+ ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+ $$$ ppIndent letIndent (map pretty derives)++-- pretty (InsInline loc inl activ name) =+-- markLine loc $+-- mySep [text (if inl then "{-# INLINE" else "{-# NOINLINE"), pretty activ, pretty name, text "#-}"]+++------------------------- FFI stuff -------------------------------------+instance Pretty (Safety l) where+ pretty PlayRisky {} = text "unsafe"+ pretty (PlaySafe _ b) = text $ if b then "threadsafe" else "safe"+ pretty PlayInterruptible {} = text "interruptible"++instance Pretty (CallConv l) where+ pretty StdCall {} = text "stdcall"+ pretty CCall {} = text "ccall"+ pretty CPlusPlus {} = text "cplusplus"+ pretty DotNet {} = text "dotnet"+ pretty Jvm {} = text "jvm"+ pretty Js {} = text "js"+ pretty JavaScript {} = text "javascript"+ pretty CApi {} = text "capi"++------------------------- Pragmas ---------------------------------------+ppWarnDepr :: ([Name l], String) -> Doc+ppWarnDepr (names, txt) = mySep $ punctuate comma (map pretty names) ++ [text $ show txt]++instance Pretty (Rule l) where+ pretty (Rule _ tag activ rvs rhs lhs) =+ mySep [text $ show tag, maybePP pretty activ,+ maybePP ppRuleVars rvs,+ pretty rhs, char '=', pretty lhs]++ppRuleVars :: [RuleVar l] -> Doc+ppRuleVars [] = empty+ppRuleVars rvs = mySep $ text "forall" : map pretty rvs ++ [char '.']++instance Pretty (Activation l) where+ pretty (ActiveFrom _ i) = char '[' <> int i <> char ']'+ pretty (ActiveUntil _ i) = text "[~" <> int i <> char ']'++instance Pretty (Overlap l) where+ pretty Overlap {} = text "{-# OVERLAP #-}"+ pretty Overlaps {} = text "{-# OVERLAPS #-}"+ pretty Overlapping {} = text "{-# OVERLAPPING #-}"+ pretty Overlappable {} = text "{-# OVERLAPPABLE #-}"+ pretty NoOverlap {} = text "{-# NO_OVERLAP #-}"+ pretty Incoherent {} = text "{-# INCOHERENT #-}"++instance Pretty (RuleVar l) where+ pretty (RuleVar _ n) = pretty n+ pretty (TypedRuleVar _ n t) = parens $ mySep [pretty n, text "::", pretty t]++-- Spaces are stripped from the pragma text but other whitespace+-- is not.+ppOptionsPragma :: Doc -> String -> Doc+ppOptionsPragma opt s =+ case s of+ ('\n':_) -> opt <> text s <> text "#-}"+ _ -> myFsep [opt, text s <> text "#-}"]++instance Pretty (ModulePragma l) where+ pretty (LanguagePragma _ ns) =+ myFsep $ text "{-# LANGUAGE" : punctuate (char ',') (map pretty ns) ++ [text "#-}"]+ pretty (OptionsPragma _ (Just tool) s) =+ ppOptionsPragma (text "{-# OPTIONS_" <> pretty tool) s+ pretty (OptionsPragma _ _ s) =+ ppOptionsPragma (text "{-# OPTIONS") s+ pretty (AnnModulePragma _ mann) =+ myFsep [text "{-# ANN", pretty mann, text "#-}"]+++instance Pretty Tool where+ pretty (UnknownTool s) = text s+ pretty t = text $ show t++------------------------- Data & Newtype Bodies -------------------------+instance Pretty (QualConDecl l) where+ pretty (QualConDecl _pos tvs ctxt con) =+ myFsep [ppForall tvs, maybePP pretty ctxt, pretty con]++instance Pretty (GadtDecl l) where+ pretty (GadtDecl _pos name tvs ctxt names ty) =+ case names of+ Nothing ->+ myFsep [pretty name, text "::", pretty ty]+ Just ts' ->+ myFsep [pretty name, text "::" , ppForall tvs, maybePP pretty ctxt,+ braceList . map pretty $ ts', text "->", pretty ty]++instance Pretty (ConDecl l) where+ pretty (RecDecl _ name fieldList) =+ pretty name <> braceList (map pretty fieldList)++{- pretty (ConDecl name@(Symbol _) [l, r]) =+ myFsep [prettyPrec prec_btype l, ppName name,+ prettyPrec prec_btype r] -}+ pretty (ConDecl _ name typeList) =+ mySep $ pretty name : map (prettyPrec prec_atype) typeList+ pretty (InfixConDecl _ l name r) =+ myFsep [prettyPrec prec_btype l, ppNameInfix name,+ prettyPrec prec_btype r]+++instance Pretty (FieldDecl l) where+ pretty (FieldDecl _ names ty) =+ myFsepSimple $ (punctuate comma . map pretty $ names) +++ [text "::", pretty ty]++instance Pretty (BangType l) where+ pretty BangedTy {} = char '!'+ pretty LazyTy {} = char '~'+ pretty NoStrictAnnot {} = empty++instance Pretty (Unpackedness l) where+ pretty Unpack {} = text "{-# UNPACK #-} "+ pretty NoUnpack {} = text "{-# NOUNPACK #-} "+ pretty NoUnpackPragma {} = empty++instance Pretty (Deriving l) where+ pretty (Deriving _ mds d) =+ hsep [ text "deriving"+ , pp_strat_before+ , pp_dct+ , pp_strat_after ]+ where+ pp_dct =+ case d of+ [d'] -> pretty d'+ _ -> parenList (map pretty d)++ -- @via@ is unique in that in comes /after/ the class being derived,+ -- so we must special-case it.+ (pp_strat_before, pp_strat_after) =+ case mds of+ Just (via@DerivVia{}) -> (empty, pretty via)+ _ -> (maybePP pretty mds, empty)++instance Pretty (DerivStrategy l) where+ pretty ds =+ case ds of+ DerivStock _ -> text "stock"+ DerivAnyclass _ -> text "anyclass"+ DerivNewtype _ -> text "newtype"+ DerivVia _ ty -> text "via" <+> pretty ty++------------------------- Types -------------------------+ppBType :: Type l -> Doc+ppBType = prettyPrec prec_btype++ppAType :: Type l -> Doc+ppAType = prettyPrec prec_atype++-- precedences for types+prec_btype, prec_atype :: Int+prec_btype = 1 -- left argument of ->,+ -- or either argument of an infix data constructor+prec_atype = 2 -- argument of type or data constructor, or of a class++instance Pretty (Type l) where+ prettyPrec p (TyForall _ mtvs ctxt htype) = parensIf (p > 0) $+ myFsep [ppForall mtvs, maybePP pretty ctxt, pretty htype]+ prettyPrec _ (TyStar _) = text "*"+ prettyPrec p (TyFun _ a b) = parensIf (p > 0) $+ myFsep [ppBType a, text "->", pretty b]+ prettyPrec _ (TyTuple _ bxd l) =+ let ds = map pretty l+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ prettyPrec _ (TyUnboxedSum _ es) = unboxedSumType (map pretty es)++ prettyPrec _ (TyList _ t) = brackets $ pretty t+ prettyPrec _ (TyParArray _ t) = bracketColonList [pretty t]+ prettyPrec p (TyApp _ a b) =+ {-+ | a == list_tycon = brackets $ pretty b -- special case+ | otherwise = -} parensIf (p > prec_btype) $+ myFsep [pretty a, ppAType b]+ prettyPrec _ (TyVar _ name) = pretty name+ prettyPrec _ (TyCon _ name) = pretty name+ prettyPrec _ (TyParen _ t) = parens (pretty t)+ prettyPrec _ (TyInfix _ a op b) = myFsep [pretty a, pretty op, pretty b]+ prettyPrec _ (TyKind _ t k) = parens (myFsep [pretty t, text "::", pretty k])+ prettyPrec _ (TyPromoted _ p) = pretty p+ prettyPrec p (TyEquals _ a b) = parensIf (p > 0) (myFsep [pretty a, text "~", pretty b])+ prettyPrec _ (TySplice _ s) = pretty s+ prettyPrec _ (TyBang _ b u t) = pretty u <> pretty b <> prettyPrec prec_atype t+ prettyPrec _ (TyWildCard _ mn) = char '_' <> maybePP pretty mn+ prettyPrec _ (TyQuasiQuote _ n qt) = text ("[" ++ n ++ "|" ++ qt ++ "|]")++instance Pretty (MaybePromotedName l) where+ pretty (PromotedName _ q) = char '\'' <> ppQNameInfix q+ pretty (UnpromotedName _ q) = ppQNameInfix q+++instance Pretty (Promoted l) where+ pretty p =+ case p of+ PromotedInteger _ n _ -> integer n+ PromotedString _ s _ -> doubleQuotes $ text s+ PromotedCon _ hasQuote qn ->+ addQuote hasQuote (pretty qn)+ PromotedList _ hasQuote list ->+ addQuote hasQuote $ brackets . addSpace list . prettyList $ list+ PromotedTuple _ list ->+ addQuote True $ parens . addSpace list . prettyList $ list+ PromotedUnit {} -> addQuote True $ text "()"+ where+ addQuote True doc = char '\'' <> doc+ addQuote False doc = doc++ checkQuote (PromotedCon _ q _) = q+ checkQuote (PromotedList _ q _) = q+ checkQuote (PromotedTuple _ _) = True+ checkQuote _ = False++ addSpace (TyPromoted _ l0:_) | checkQuote l0 = (space <>)+ addSpace _ = id++ prettyList = myFsepSimple . punctuate comma . map pretty+++instance Pretty (TyVarBind l) where+ pretty (KindedVar _ var kind) = parens $ myFsep [pretty var, text "::", pretty kind]+ pretty (UnkindedVar _ var) = pretty var++ppForall :: Maybe [TyVarBind l] -> Doc+ppForall Nothing = empty+ppForall (Just []) = empty+ppForall (Just vs) = myFsep (text "forall" : map pretty vs ++ [char '.'])++---------------------------- Kinds ----------------------------++ppOptKind :: Maybe (Kind l) -> [Doc]+ppOptKind Nothing = []+ppOptKind (Just k) = [text "::", pretty k]++------------------- Functional Dependencies -------------------+instance Pretty (FunDep l) where+ pretty (FunDep _ from to) =+ myFsep $ map pretty from ++ [text "->"] ++ map pretty to+++ppFunDeps :: [FunDep l] -> Doc+ppFunDeps [] = empty+ppFunDeps fds = myFsep $ (char '|':) . punctuate comma . map pretty $ fds++------------------------- Expressions -------------------------+instance Pretty (Rhs l) where+ pretty (UnGuardedRhs _ e) = equals <+> pretty e+ pretty (GuardedRhss _ guardList) = myVcat . map pretty $ guardList++instance Pretty (GuardedRhs l) where+ pretty (GuardedRhs _pos guards ppBody') =+ myFsep $ [char '|'] ++ (punctuate comma . map pretty $ guards) ++ [equals, pretty ppBody']++newtype GuardedAlts l = GuardedAlts (Rhs l)+newtype GuardedAlt l = GuardedAlt (GuardedRhs l)++instance Pretty (GuardedAlts l) where+ pretty (GuardedAlts (UnGuardedRhs _ e)) = text "->" <+> pretty e+ pretty (GuardedAlts (GuardedRhss _ guardList)) = myVcat . map (pretty . GuardedAlt) $ guardList++instance Pretty (GuardedAlt l) where+ pretty (GuardedAlt (GuardedRhs _pos guards ppBody')) =+ myFsep $ [char '|'] ++ (punctuate comma . map pretty $ guards) ++ [text "->", pretty ppBody']++instance Pretty (Literal l) where+ pretty (Int _ i _) = integer i+ pretty (Char _ c _) = text (show c)+ pretty (String _ s _) = text (show s)+ pretty (Frac _ r _) = double (fromRational r)+ -- GHC unboxed literals:+ pretty (PrimChar _ c _) = text (show c) <> char '#'+ pretty (PrimString _ s _) = text (show s) <> char '#'+ pretty (PrimInt _ i _) = integer i <> char '#'+ pretty (PrimWord _ w _) = integer w <> text "##"+ pretty (PrimFloat _ r _) = float (fromRational r) <> char '#'+ pretty (PrimDouble _ r _) = double (fromRational r) <> text "##"++instance Pretty (Exp l) where+ prettyPrec _ (Lit _ l) = pretty l+ -- lambda stuff+ -- WARNING: This stuff is fragile. See #152 for one example of how+ -- things can break.+ prettyPrec p (InfixApp _ a op b) = parensIf (p > 2) $ myFsep [prettyPrec 1 a, pretty op, prettyPrec 1 b]+ prettyPrec p (NegApp _ e) = parensIf (p > 0) $ char '-' <> prettyPrec 2 e+ prettyPrec p (App _ a b) = parensIf (p > 3) $ myFsep [prettyPrec 3 a, prettyPrec 4 b]+ prettyPrec p (Lambda _loc patList ppBody') = parensIf (p > 1) $ myFsep $+ char '\\' : map (prettyPrec 3) patList ++ [text "->", pretty ppBody']+ -- keywords+ -- two cases for lets+ prettyPrec p (Let _ (BDecls _ declList) letBody) =+ parensIf (p > 1) $ ppLetExp declList letBody+ prettyPrec p (Let _ (IPBinds _ bindList) letBody) =+ parensIf (p > 1) $ ppLetExp bindList letBody++ prettyPrec p (If _ cond thenexp elsexp) = parensIf (p > 1) $+ myFsep [text "if", pretty cond,+ text "then", pretty thenexp,+ text "else", pretty elsexp]+ prettyPrec p (MultiIf _ alts) = parensIf (p > 1) $+ text "if"+ $$$ ppBody multiIfIndent (map (pretty . GuardedAlt) alts)+ prettyPrec p (Case _ cond altList) = parensIf (p > 1) $+ myFsep ([text "case", pretty cond, text "of"] +++ if null altList then [text "{", text "}"] else [])+ $$$ ppBody caseIndent (map pretty altList)+ prettyPrec p (Do _ stmtList) = parensIf (p > 1) $+ text "do" $$$ ppBody doIndent (map pretty stmtList)+ prettyPrec p (MDo _ stmtList) = parensIf (p > 1) $+ text "mdo" $$$ ppBody doIndent (map pretty stmtList)+ -- Constructors & Vars+ prettyPrec _ (Var _ name) = pretty name+ prettyPrec _ (OverloadedLabel _ name) = text ('#':name)+ prettyPrec _ (IPVar _ ipname) = pretty ipname+ prettyPrec _ (Con _ name) = pretty name+ prettyPrec _ (Tuple _ bxd expList) =+ let ds = map pretty expList+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ prettyPrec _ (UnboxedSum _ before after exp) =+ printUnboxedSum before after exp+ prettyPrec _ (TupleSection _ bxd mExpList) =+ let ds = map (maybePP pretty) mExpList+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ -- weird stuff+ prettyPrec _ (Paren _ e) = parens . pretty $ e+ prettyPrec _ (LeftSection _ e op) = parens (pretty e <+> pretty op)+ prettyPrec _ (RightSection _ op e) = parens (pretty op <+> pretty e)+ prettyPrec _ (RecConstr _ c fieldList) =+ pretty c <> (braceList . map pretty $ fieldList)+ prettyPrec _ (RecUpdate _ e fieldList) =+ pretty e <> (braceList . map pretty $ fieldList)+ -- Lists and parallel arrays+ prettyPrec _ (List _ list) =+ bracketList . punctuate comma . map pretty $ list+ prettyPrec _ (ParArray _ arr) =+ bracketColonList . map pretty $ arr+ prettyPrec _ (EnumFrom _ e) =+ bracketList [pretty e, text ".."]+ prettyPrec _ (EnumFromTo _ from to) =+ bracketList [pretty from, text "..", pretty to]+ prettyPrec _ (EnumFromThen _ from thenE) =+ bracketList [pretty from <> comma, pretty thenE, text ".."]+ prettyPrec _ (EnumFromThenTo _ from thenE to) =+ bracketList [pretty from <> comma, pretty thenE,+ text "..", pretty to]+ prettyPrec _ (ParArrayFromTo _ from to) =+ bracketColonList [pretty from, text "..", pretty to]+ prettyPrec _ (ParArrayFromThenTo _ from thenE to) =+ bracketColonList [pretty from <> comma, pretty thenE,+ text "..", pretty to]+ prettyPrec _ (ListComp _ e qualList) =+ bracketList ([pretty e, char '|']+ ++ (punctuate comma . map pretty $ qualList))+ prettyPrec _ (ParComp _ e qualLists) =+ bracketList (punctuate (char '|') $+ pretty e : map (hsep . punctuate comma . map pretty) qualLists)+ prettyPrec _ (ParArrayComp _ e qualArrs) =+ bracketColonList (punctuate (char '|') $+ pretty e : map (hsep . punctuate comma . map pretty) qualArrs)+ prettyPrec p (ExpTypeSig _pos e ty) = parensIf (p > 0) $+ myFsep [pretty e, text "::", pretty ty]+ -- Template Haskell+ prettyPrec _ (BracketExp _ b) = pretty b+ prettyPrec _ (SpliceExp _ s) = pretty s+ prettyPrec _ (TypQuote _ t) = text "\'\'" <> pretty t+ prettyPrec _ (VarQuote _ x) = text "\'" <> pretty x+ prettyPrec _ (QuasiQuote _ n qt) = text ("[" ++ n ++ "|" ++ qt ++ "|]")+ -- Hsx+ prettyPrec _ (XTag _ n attrs mattr cs) =+ let ax = maybe [] (return . pretty) mattr+ in hcat $+ (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):+ map pretty cs ++ [myFsep [text "</" <> pretty n, char '>']]+ prettyPrec _ (XETag _ n attrs mattr) =+ let ax = maybe [] (return . pretty) mattr+ in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [text "/>"]+ prettyPrec _ (XPcdata _ s) = text s+ prettyPrec _ (XExpTag _ e) =+ myFsep [text "<%", pretty e, text "%>"]+ prettyPrec _ (XChildTag _ cs) =+ myFsep $ text "<%>" : map pretty cs ++ [text "</%>"]++ -- Pragmas+ prettyPrec _ (CorePragma _ s e) = myFsep $ map text ["{-# CORE", show s, "#-}"] ++ [pretty e]+ prettyPrec _ (SCCPragma _ s e) = myFsep $ map text ["{-# SCC", show s, "#-}"] ++ [pretty e]+ prettyPrec _ (GenPragma _ s (a,b) (c,d) e) =+ myFsep [text "{-# GENERATED", text $ show s,+ int a, char ':', int b, char '-',+ int c, char ':', int d, text "#-}", pretty e]+ -- Arrows+ prettyPrec p (Proc _ pat e) = parensIf (p > 1) $ myFsep [text "proc", pretty pat, text "->", pretty e]+ prettyPrec p (LeftArrApp _ l r) = parensIf (p > 0) $ myFsep [pretty l, text "-<", pretty r]+ prettyPrec p (RightArrApp _ l r) = parensIf (p > 0) $ myFsep [pretty l, text ">-", pretty r]+ prettyPrec p (LeftArrHighApp _ l r) = parensIf (p > 0) $ myFsep [pretty l, text "-<<", pretty r]+ prettyPrec p (RightArrHighApp _ l r) = parensIf (p > 0) $ myFsep [pretty l, text ">>-", pretty r]+ prettyPrec _ (ArrOp _ e) = myFsep [text "(|", pretty e, text "|)"]++ -- LamdaCase+ prettyPrec p (LCase _ altList) = parensIf (p > 1) $+ myFsep (text "\\case":+ if null altList then [text "{", text "}"] else [])+ $$$ ppBody caseIndent (map pretty altList)+ prettyPrec _ (TypeApp _ ty) = char '@' <> pretty ty++printUnboxedSum :: Pretty e => Int -> Int -> e -> Doc+printUnboxedSum before after exp =+ hashParens . myFsep $ (replicate before (text "|")+ ++ [pretty exp]+ ++ (replicate after (text "|")))+++instance Pretty (XAttr l) where+ pretty (XAttr _ n v) =+ myFsep [pretty n, char '=', pretty v]++instance Pretty (XName l) where+ pretty (XName _ n) = text n+ pretty (XDomName _ d n) = text d <> char ':' <> text n++ppLetExp :: (PrettyDeclLike a, Pretty b) => [a] -> b -> Doc+ppLetExp l b = myFsep [text "let" <+> ppBody letIndent (ppDecls False l),+ text "in", pretty b]++--------------------- Template Haskell -------------------------++instance Pretty (Bracket l) where+ pretty (ExpBracket _ e) = ppBracket "[|" e+ pretty (TExpBracket _ e) = myFsep [text "[||", pretty e, text "||]"]+ pretty (PatBracket _ p) = ppBracket "[p|" p+ pretty (TypeBracket _ t) = ppBracket "[t|" t+ pretty (DeclBracket _ d) =+ myFsep $ text "[d|" : ppDecls True d ++ [text "|]"]++ppBracket :: Pretty a => String -> a -> Doc+ppBracket o x = myFsep [text o, pretty x, text "|]"]++instance Pretty (Splice l) where+ pretty (IdSplice _ s) = char '$' <> text s+ pretty (TIdSplice _ s) = char '$' <> char '$' <> text s+ pretty (TParenSplice _ e) =+ myFsep [text "$$(", pretty e, char ')']+ pretty (ParenSplice _ e) =+ myFsep [text "$(", pretty e, char ')']++------------------------- Patterns -----------------------------++instance Pretty (Pat l) where+ prettyPrec _ (PVar _ name) = pretty name+ prettyPrec _ (PLit _ (Signless {}) lit) = pretty lit+ prettyPrec p (PLit _ (Negative{}) lit) = parensIf (p > 1) $ char '-' <> pretty lit+ prettyPrec p (PInfixApp l a op b) = parensIf (p > 0) $+ myFsep [prettyPrec 1 a, pretty (QConOp l op), prettyPrec 1 b]+ prettyPrec p (PApp _ n ps) = parensIf (p > 2 && not (null ps)) $+ myFsep (pretty n : map (prettyPrec 3) ps)+ prettyPrec _ (PTuple _ bxd ps) =+ let ds = map pretty ps+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ prettyPrec _ (PUnboxedSum _ before after exp) =+ printUnboxedSum before after exp+ prettyPrec _ (PList _ ps) =+ bracketList . punctuate comma . map pretty $ ps+ prettyPrec _ (PParen _ pat) = parens . pretty $ pat+ prettyPrec _ (PRec _ c fields) =+ pretty c <> (braceList . map pretty $ fields)+ -- special case that would otherwise be buggy+ prettyPrec _ (PAsPat _ name (PIrrPat _ pat)) =+ myFsep [pretty name <> char '@', char '~' <> prettyPrec 3 pat]+ prettyPrec _ (PAsPat _ name pat) =+ hcat [pretty name, char '@', prettyPrec 3 pat]+ prettyPrec _ PWildCard {} = char '_'+ prettyPrec _ (PIrrPat _ pat) = char '~' <> prettyPrec 3 pat+ prettyPrec p (PatTypeSig _pos pat ty) = parensIf (p > 0) $+ myFsep [pretty pat, text "::", pretty ty]+ prettyPrec p (PViewPat _ e pat) = parensIf (p > 0) $+ myFsep [pretty e, text "->", pretty pat]+ prettyPrec p (PNPlusK _ n k) = parensIf (p > 0) $+ myFsep [pretty n, text "+", text $ show k]+ -- HaRP+ prettyPrec _ (PRPat _ rs) =+ bracketList . punctuate comma . map pretty $ rs+ -- Hsx+ prettyPrec _ (PXTag _ n attrs mattr cp) =+ let ap = maybe [] (return . pretty) mattr+ in hcat $ -- TODO: should not introduce blanks+ (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [char '>']):+ map pretty cp ++ [myFsep [text "</" <> pretty n, char '>']]+ prettyPrec _ (PXETag _ n attrs mattr) =+ let ap = maybe [] (return . pretty) mattr+ in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [text "/>"]+ prettyPrec _ (PXPcdata _ s) = text s+ prettyPrec _ (PXPatTag _ p) =+ myFsep [text "<%", pretty p, text "%>"]+ prettyPrec _ (PXRPats _ ps) =+ myFsep $ text "<[" : map pretty ps ++ [text "%>"]+ -- BangPatterns+ prettyPrec _ (PBangPat _ pat) = text "!" <> prettyPrec 3 pat+ prettyPrec _ (PSplice _ s) = pretty s+ prettyPrec _ (PQuasiQuote _ n qt) = text ("[$" ++ n ++ "|" ++ qt ++ "|]")++instance Pretty (PXAttr l) where+ pretty (PXAttr _ n p) =+ myFsep [pretty n, char '=', pretty p]++instance Pretty (PatField l) where+ pretty (PFieldPat _ name pat) =+ myFsep [pretty name, equals, pretty pat]+ pretty (PFieldPun _ name) = pretty name+ pretty (PFieldWildcard{}) = text ".."++--------------------- Regular Patterns -------------------------++instance Pretty (RPat l) where+ pretty (RPOp _ r op) = pretty r <> pretty op+ pretty (RPEither _ r1 r2) = parens . myFsep $+ [pretty r1, char '|', pretty r2]+ pretty (RPSeq _ rs) =+ myFsep $ text "(|" : (punctuate comma . map pretty $ rs)+ ++ [text "|)"]+ pretty (RPGuard _ r gs) =+ myFsep $ text "(|" : pretty r : char '|' :+ (punctuate comma . map pretty $ gs) ++ [text "|)"]+ -- special case that would otherwise be buggy+ pretty (RPCAs _ n (RPPat _ (PIrrPat _ p))) =+ myFsep [pretty n <> text "@:", char '~' <> pretty p]+ pretty (RPCAs _ n r) = hcat [pretty n, text "@:", pretty r]+ -- special case that would otherwise be buggy+ pretty (RPAs _ n (RPPat _ (PIrrPat _ p))) =+ myFsep [pretty n <> text "@:", char '~' <> pretty p]+ pretty (RPAs _ n r) = hcat [pretty n, char '@', pretty r]+ pretty (RPPat _ p) = pretty p+ pretty (RPParen _ rp) = parens . pretty $ rp++instance Pretty (RPatOp l) where+ pretty RPStar{} = char '*'+ pretty RPStarG{} = text "*!"+ pretty RPPlus{} = char '+'+ pretty RPPlusG{} = text "+!"+ pretty RPOpt{} = char '?'+ pretty RPOptG{} = text "?!"++------------------------- Case bodies -------------------------+instance Pretty (Alt l) where+ pretty (Alt _pos e gAlts binds) =+ pretty e <+> pretty (GuardedAlts gAlts) $$$ ppWhere binds++------------------------- Statements in monads, guards & list comprehensions -----+instance Pretty (Stmt l) where+ pretty (Generator _loc e from) =+ pretty e <+> text "<-" <+> pretty from+ pretty (Qualifier _ e) = pretty e+ -- two cases for lets+ pretty (LetStmt _ (BDecls _ declList)) =+ ppLetStmt declList+ pretty (LetStmt _ (IPBinds _ bindList)) =+ ppLetStmt bindList+ pretty (RecStmt _ stmtList) =+ text "rec" $$$ ppBody letIndent (map pretty stmtList)++ppLetStmt :: Pretty a => [a] -> Doc+ppLetStmt l = text "let" $$$ ppBody letIndent (map pretty l)++instance Pretty (QualStmt l) where+ pretty (QualStmt _ s) = pretty s+ pretty (ThenTrans _ f) = myFsep [text "then", pretty f]+ pretty (ThenBy _ f e) = myFsep [text "then", pretty f, text "by", pretty e]+ pretty (GroupBy _ e) = myFsep [text "then", text "group", text "by", pretty e]+ pretty (GroupUsing _ f) = myFsep [text "then", text "group", text "using", pretty f]+ pretty (GroupByUsing _ e f) = myFsep [text "then", text "group", text "by",+ pretty e, text "using", pretty f]++++------------------------- Record updates+instance Pretty (FieldUpdate l) where+ pretty (FieldUpdate _ name e) =+ myFsep [pretty name, equals, pretty e]+ pretty (FieldPun _ name) = pretty name+ pretty (FieldWildcard {}) = text ".."++------------------------- Names -------------------------+instance Pretty (QOp l) where+ pretty (QVarOp _ n) = ppQNameInfix n+ pretty (QConOp _ n) = ppQNameInfix n++ppQNameInfix :: QName l -> Doc+ppQNameInfix name+ | isSymbolQName name = ppQName name+ | otherwise = char '`' <> ppQName name <> char '`'++instance Pretty (QName l) where+ pretty name = case name of+ UnQual _ (Symbol _ ('#':_)) -> char '(' <+> ppQName name <+> char ')'+ _ -> parensIf (isSymbolQName name) (ppQName name)++ppQName :: QName l -> Doc+ppQName (UnQual _ name) = ppName name+ppQName (Qual _ m name) = pretty m <> char '.' <> ppName name+ppQName (Special _ sym) = pretty sym++instance Pretty (Op l) where+ pretty (VarOp _ n) = ppNameInfix n+ pretty (ConOp _ n) = ppNameInfix n++ppNameInfix :: Name l -> Doc+ppNameInfix name+ | isSymbolName name = ppName name+ | otherwise = char '`' <> ppName name <> char '`'++instance Pretty (Name l) where+ pretty name = case name of+ Symbol _ ('#':_) -> char '(' <+> ppName name <+> char ')'+ _ -> parensIf (isSymbolName name) (ppName name)++ppName :: Name l -> Doc+ppName (Ident _ s) = text s+ppName (Symbol _ s) = text s++instance Pretty (IPName l) where+ pretty (IPDup _ s) = char '?' <> text s+ pretty (IPLin _ s) = char '%' <> text s++instance PrettyDeclLike (IPBind l) where+ wantsBlankline _ = False++instance Pretty (IPBind l) where+ pretty (IPBind _loc ipname exp) =+ myFsep [pretty ipname, equals, pretty exp]++instance Pretty (CName l) where+ pretty (VarName _ n) = pretty n+ pretty (ConName _ n) = pretty n++instance Pretty (SpecialCon l) where+ pretty (UnitCon {}) = text "()"+ pretty (ListCon {}) = text "[]"+ pretty (FunCon {}) = text "->"+ pretty (TupleCon _ b n) = listFun $ foldr (<>) empty (replicate (n-1) comma)+ where listFun = if b == Unboxed then hashParens else parens+ pretty (Cons {}) = text ":"+ pretty (UnboxedSingleCon {}) = text "(# #)"+ pretty (ExprHole {}) = text "_"++isSymbolName :: Name l -> Bool+isSymbolName (Symbol {}) = True+isSymbolName _ = False++isSymbolQName :: QName l -> Bool+isSymbolQName (UnQual _ n) = isSymbolName n+isSymbolQName (Qual _ _ n) = isSymbolName n+isSymbolQName (Special _ (Cons {})) = True+isSymbolQName (Special _ (FunCon {})) = True+isSymbolQName _ = False++--getSpecialName :: QName l -> Maybe (SpecialCon l)+--getSpecialName (Special _ n) = Just n+--getSpecialName _ = Nothing++-- Contexts are "sets" of assertions. Several members really means it's a+-- CxTuple, but we can't represent that in our list of assertions.+-- Therefore: print single member contexts without parenthesis, and treat+-- larger contexts as tuples.+instance (Pretty (Context l)) where+ pretty (CxEmpty _) = text "()" <+> text "=>"+ pretty (CxSingle _ ctxt) = pretty ctxt <+> text "=>"+ pretty (CxTuple _ context) = mySep [parenList (map pretty context), text "=>"]++instance Pretty (Asst l) where+ pretty (TypeA _ t) = pretty t+ pretty (IParam _ i t) = myFsep [pretty i, text "::", pretty t]+ pretty (ParenA _ a) = parens (pretty a)++-- Pretty print a source location, useful for printing out error messages+instance Pretty SrcLoc where+ pretty srcLoc =+ return $ P.hcat [ colonFollow (P.text $ srcFilename srcLoc)+ , colonFollow (P.int $ srcLine srcLoc)+ , P.int $ srcColumn srcLoc+ ]++colonFollow :: P.Doc -> P.Doc+colonFollow p = P.hcat [ p, P.colon ]+++instance Pretty SrcSpan where+ pretty srcSpan =+ return $ P.hsep [ colonFollow (P.text $ srcSpanFilename srcSpan)+ , P.hcat [ P.text "("+ , P.int $ srcSpanStartLine srcSpan+ , P.colon+ , P.int $ srcSpanStartColumn srcSpan+ , P.text ")"+ ]+ , P.text "-"+ , P.hcat [ P.text "("+ , P.int $ srcSpanEndLine srcSpan+ , P.colon+ , P.int $ srcSpanEndColumn srcSpan+ , P.text ")"+ ]+ ]++---------------------------------------------------------------------+-- Annotated version+++------------------------- Pretty-Print a Module --------------------+instance Pretty (Module pos) where+ pretty (Module _ mbHead os imp decls) =+ myVcat $ map pretty os +++ (case mbHead of+ Nothing -> id+ Just h -> \x -> [topLevel (pretty h) x])+ (map pretty imp +++ ppDecls (isJust mbHead ||+ not (null imp) ||+ not (null os))+ decls)+ pretty (XmlPage _ _mn os n attrs mattr cs) =+ myVcat $ map pretty os +++ [let ax = maybe [] (return . pretty) mattr+ in hcat $+ (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):+ map pretty cs ++ [myFsep [text "</" <> pretty n, char '>']]]+ pretty (XmlHybrid _ mbHead os imp decls n attrs mattr cs) =+ myVcat $ map pretty os ++ [text "<%"] +++ (case mbHead of+ Nothing -> id+ Just h -> \x -> [topLevel (pretty h) x])+ (map pretty imp +++ ppDecls (isJust mbHead || not (null imp) || not (null os)) decls +++ [let ax = maybe [] (return . pretty) mattr+ in hcat $+ (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):+ map pretty cs ++ [myFsep [text "</" <> pretty n, char '>']]])++++------------------------- pp utils -------------------------+maybePP :: (a -> Doc) -> Maybe a -> Doc+maybePP _ Nothing = empty+maybePP pp (Just a) = pp a++parenList :: [Doc] -> Doc+parenList = parens . myFsepSimple . punctuate comma++hashParenList :: [Doc] -> Doc+hashParenList = hashParens . myFsepSimple . punctuate comma++unboxedSumType :: [Doc] -> Doc+unboxedSumType = hashParens . myFsepSimple . punctuate (text " |")++hashParens :: Doc -> Doc+hashParens = parens . hashes+ where+ hashes doc = char '#' <+> doc <+> char '#'++braceList :: [Doc] -> Doc+braceList = braces . myFsepSimple . punctuate comma++bracketList :: [Doc] -> Doc+bracketList = brackets . myFsepSimple++bracketColonList :: [Doc] -> Doc+bracketColonList = bracketColons . myFsepSimple+ where bracketColons = brackets . colons+ colons doc = char ':' <> doc <> char ':'++-- Wrap in braces and semicolons, with an extra space at the start in+-- case the first doc begins with "-", which would be scanned as {-+flatBlock :: [Doc] -> Doc+flatBlock = braces . (space <>) . hsep . punctuate semi++-- Same, but put each thing on a separate line+prettyBlock :: [Doc] -> Doc+prettyBlock = braces . (space <>) . vcat . punctuate semi++-- Monadic PP Combinators -- these examine the env++blankline :: Doc -> Doc+blankline dl = do{e<-getPPEnv;if spacing e && layout e /= PPNoLayout+ then text "" $+$ dl else dl}+topLevel :: Doc -> [Doc] -> Doc+topLevel header dl = do+ e <- fmap layout getPPEnv+ case e of+ PPOffsideRule -> header $$ vcat dl+ PPSemiColon -> header $$ prettyBlock dl+ PPInLine -> header $$ prettyBlock dl+ PPNoLayout -> header <+> flatBlock dl++ppBody :: (PPHsMode -> Int) -> [Doc] -> Doc+ppBody f dl = do+ e <- fmap layout getPPEnv+ case e of PPOffsideRule -> indent+ PPSemiColon -> indentExplicit+ _ -> flatBlock dl+ where+ indent = do{i <-fmap f getPPEnv;nest i . vcat $ dl}+ indentExplicit = do {i <- fmap f getPPEnv;+ nest i . prettyBlock $ dl}++-- | Indent without braces. Useful for deriving clauses etc.+ppIndent :: (PPHsMode -> Int) -> [Doc] -> Doc+ppIndent f dl = do+ i <- fmap f getPPEnv+ nest i . vcat $ dl++($$$) :: Doc -> Doc -> Doc+a $$$ b = layoutChoice (a $$) (a <+>) b++mySep :: [Doc] -> Doc+mySep = layoutChoice mySep' hsep+ where+ -- ensure paragraph fills with indentation.+ mySep' [x] = x+ mySep' (x:xs) = x <+> fsep xs+ mySep' [] = error "Internal error: mySep"++myVcat :: [Doc] -> Doc+myVcat = layoutChoice vcat hsep++myFsepSimple :: [Doc] -> Doc+myFsepSimple = layoutChoice fsep hsep++-- same, except that continuation lines are indented,+-- which is necessary to avoid triggering the offside rule.+myFsep :: [Doc] -> Doc+myFsep = layoutChoice fsep' hsep+ where fsep' [] = empty+ fsep' (d:ds) = do+ e <- getPPEnv+ let n = onsideIndent e+ nest n (fsep (nest (-n) d:ds))++layoutChoice :: (a -> Doc) -> (a -> Doc) -> a -> Doc+layoutChoice a b dl = do e <- getPPEnv+ if layout e == PPOffsideRule ||+ layout e == PPSemiColon+ then a dl else b dl++--------------------------------------------------------------------------------+-- Pretty-printing of internal constructs, for error messages while parsing++instance SrcInfo loc => Pretty (P.PExp loc) where+ pretty (P.Lit _ l) = pretty l+ pretty (P.InfixApp _ a op b) = myFsep [pretty a, pretty op, pretty b]+ pretty (P.NegApp _ e) = myFsep [char '-', pretty e]+ pretty (P.App _ a b) = myFsep [pretty a, pretty b]+ pretty (P.Lambda _loc expList ppBody') = myFsep $+ char '\\' : map pretty expList ++ [text "->", pretty ppBody']+ pretty (P.Let _ (BDecls _ declList) letBody) =+ ppLetExp declList letBody+ pretty (P.Let _ (IPBinds _ bindList) letBody) =+ ppLetExp bindList letBody+ pretty (P.If _ cond thenexp elsexp) =+ myFsep [text "if", pretty cond,+ text "then", pretty thenexp,+ text "else", pretty elsexp]+ pretty (P.MultiIf _ alts) =+ text "if"+ $$$ ppBody caseIndent (map pretty alts)+ pretty (P.Case _ cond altList) =+ myFsep [text "case", pretty cond, text "of"]+ $$$ ppBody caseIndent (map pretty altList)+ pretty (P.Do _ stmtList) =+ text "do" $$$ ppBody doIndent (map pretty stmtList)+ pretty (P.MDo _ stmtList) =+ text "mdo" $$$ ppBody doIndent (map pretty stmtList)+ pretty (P.Var _ name) = pretty name+ pretty (P.OverloadedLabel _ name) = text name+ pretty (P.IPVar _ ipname) = pretty ipname+ pretty (P.Con _ name) = pretty name+ pretty (P.TupleSection _ bxd mExpList) =+ let ds = map (maybePP pretty) mExpList+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ pretty (P.UnboxedSum _ before after exp) =+ printUnboxedSum before after exp+ pretty (P.Paren _ e) = parens . pretty $ e+ pretty (P.RecConstr _ c fieldList) =+ pretty c <> (braceList . map pretty $ fieldList)+ pretty (P.RecUpdate _ e fieldList) =+ pretty e <> (braceList . map pretty $ fieldList)+ pretty (P.List _ list) =+ bracketList . punctuate comma . map pretty $ list+ pretty (P.ParArray _ arr) =+ bracketColonList . punctuate comma . map pretty $ arr+ pretty (P.EnumFrom _ e) =+ bracketList [pretty e, text ".."]+ pretty (P.EnumFromTo _ from to) =+ bracketList [pretty from, text "..", pretty to]+ pretty (P.EnumFromThen _ from thenE) =+ bracketList [pretty from <> comma, pretty thenE, text ".."]+ pretty (P.EnumFromThenTo _ from thenE to) =+ bracketList [pretty from <> comma, pretty thenE,+ text "..", pretty to]+ pretty (P.ParArrayFromTo _ from to) =+ bracketColonList [pretty from, text "..", pretty to]+ pretty (P.ParArrayFromThenTo _ from thenE to) =+ bracketColonList [pretty from <> comma, pretty thenE,+ text "..", pretty to]+ pretty (P.ParComp _ e qualLists) =+ bracketList (intersperse (char '|') $+ pretty e : (punctuate comma . concatMap (map pretty) $ qualLists))+ pretty (P.ParArrayComp _ e qualArrs) =+ bracketColonList (intersperse (char '|') $+ pretty e : (punctuate comma . concatMap (map pretty) $ qualArrs))+ pretty (P.ExpTypeSig _pos e ty) =+ myFsep [pretty e, text "::", pretty ty]+ pretty (P.BracketExp _ b) = pretty b+ pretty (P.SpliceExp _ s) = pretty s+ pretty (P.TypQuote _ t) = text "\'\'" <> pretty t+ pretty (P.VarQuote _ x) = text "\'" <> pretty x+ pretty (P.QuasiQuote _ n qt) = text ("[$" ++ n ++ "|" ++ qt ++ "|]")+ pretty (P.XTag _ n attrs mattr cs) =+ let ax = maybe [] (return . pretty) mattr+ in hcat $+ (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):+ map pretty cs ++ [myFsep [text "</" <> pretty n, char '>']]+ pretty (P.XETag _ n attrs mattr) =+ let ax = maybe [] (return . pretty) mattr+ in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [text "/>"]+ pretty (P.XPcdata _ s) = text s+ pretty (P.XExpTag _ e) =+ myFsep [text "<%", pretty e, text "%>"]+ pretty (P.XChildTag _ es) =+ myFsep $ text "<%>" : map pretty es ++ [text "</%>"]+ pretty (P.CorePragma _ s e) = myFsep $ map text ["{-# CORE", show s, "#-}"] ++ [pretty e]+ pretty (P.SCCPragma _ s e) = myFsep $ map text ["{-# SCC", show s, "#-}"] ++ [pretty e]+ pretty (P.GenPragma _ s (a,b) (c,d) e) =+ myFsep [text "{-# GENERATED", text $ show s,+ int a, char ':', int b, char '-',+ int c, char ':', int d, text "#-}", pretty e]+ pretty (P.Proc _ p e) = myFsep [text "proc", pretty p, text "->", pretty e]+ pretty (P.LeftArrApp _ l r) = myFsep [pretty l, text "-<", pretty r]+ pretty (P.RightArrApp _ l r) = myFsep [pretty l, text ">-", pretty r]+ pretty (P.LeftArrHighApp _ l r) = myFsep [pretty l, text "-<<", pretty r]+ pretty (P.RightArrHighApp _ l r) = myFsep [pretty l, text ">>-", pretty r]+ pretty (P.ArrOp _ e) = myFsep [text "(|", pretty e, text "|)"]+ pretty (P.AsPat _ name (P.IrrPat _ pat)) =+ myFsep [pretty name <> char '@', char '~' <> pretty pat]+ pretty (P.AsPat _ name pat) =+ hcat [pretty name, char '@', pretty pat]+ pretty (P.WildCard _) = char '_'+ pretty (P.IrrPat _ pat) = char '~' <> pretty pat+ pretty (P.PostOp _ e op) = pretty e <+> pretty op+ pretty (P.PreOp _ op e) = pretty op <+> pretty e+ pretty (P.ViewPat _ e p) =+ myFsep [pretty e, text "->", pretty p]+ pretty (P.SeqRP _ rs) =+ myFsep $ text "(|" : (punctuate comma . map pretty $ rs) ++ [text "|)"]+ pretty (P.GuardRP _ r gs) =+ myFsep $ text "(|" : pretty r : char '|' :+ (punctuate comma . map pretty $ gs) ++ [text "|)"]+ pretty (P.EitherRP _ r1 r2) = parens . myFsep $ [pretty r1, char '|', pretty r2]+ pretty (P.CAsRP _ n (P.IrrPat _ e)) =+ myFsep [pretty n <> text "@:", char '~' <> pretty e]+ pretty (P.CAsRP _ n r) = hcat [pretty n, text "@:", pretty r]+ pretty (P.XRPats _ ps) =+ myFsep $ text "<[" : map pretty ps ++ [text "%>"]+ pretty (P.BangPat _ e) = text "!" <> pretty e+ pretty (P.LCase _ altList) = text "\\case" $$$ ppBody caseIndent (map pretty altList)+ pretty (P.TypeApp _ ty) = char '@' <> pretty ty++instance SrcInfo loc => Pretty (P.PFieldUpdate loc) where+ pretty (P.FieldUpdate _ name e) =+ myFsep [pretty name, equals, pretty e]+ pretty (P.FieldPun _ name) = pretty name+ pretty (P.FieldWildcard _) = text ".."++instance SrcInfo loc => Pretty (P.ParseXAttr loc) where+ pretty (P.XAttr _ n v) =+ myFsep [pretty n, char '=', pretty v]++instance SrcInfo loc => Pretty (P.PContext loc) where+ pretty (P.CxEmpty _) = mySep [text "()", text "=>"]+ pretty (P.CxSingle _ asst) = mySep [pretty asst, text "=>"]+ pretty (P.CxTuple _ assts) = myFsep [parenList (map pretty assts), text "=>"]++instance SrcInfo loc => Pretty (P.PAsst loc) where+ pretty (P.TypeA _ t) = pretty t+ pretty (P.IParam _ i t) = myFsep [pretty i, text "::", pretty t]+ pretty (P.ParenA _ a) = parens (pretty a)++instance SrcInfo loc => Pretty (P.PType loc) where+ prettyPrec p (P.TyForall _ mtvs ctxt htype) = parensIf (p > 0) $+ myFsep [ppForall mtvs, maybePP pretty ctxt, pretty htype]+ prettyPrec _ (P.TyStar _) = text "*"+ prettyPrec p (P.TyFun _ a b) = parensIf (p > 0) $+ myFsep [prettyPrec prec_btype a, text "->", pretty b]+ prettyPrec _ (P.TyTuple _ bxd l) =+ let ds = map pretty l+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ prettyPrec _ (P.TyUnboxedSum _ es) =+ unboxedSumType (map pretty es)+ prettyPrec _ (P.TyList _ t) = brackets $ pretty t+ prettyPrec _ (P.TyParArray _ t) = bracketColonList [pretty t]+ prettyPrec p (P.TyApp _ a b) =+ {-+ | a == list_tycon = brackets $ pretty b -- special case+ | otherwise = -} parensIf (p > prec_btype) $+ myFsep [pretty a, prettyPrec prec_atype b]+ prettyPrec _ (P.TyVar _ name) = pretty name+ prettyPrec _ (P.TyCon _ name) = pretty name+ prettyPrec _ (P.TyParen _ t) = parens (pretty t)+ prettyPrec _ (P.TyPred _ asst) = pretty asst+ prettyPrec _ (P.TyInfix _ a op b) = myFsep [pretty a, pretty op, pretty b]+ prettyPrec _ (P.TyKind _ t k) = parens (myFsep [pretty t, text "::", pretty k])+ prettyPrec _ (P.TyPromoted _ p) = pretty p+ prettyPrec _ (P.TyEquals _ a b) = myFsep [pretty a, text "~", pretty b]+ prettyPrec _ (P.TySplice _ s) = pretty s+ prettyPrec _ (P.TyBang _ b u t) = pretty u <+> pretty b <> prettyPrec prec_atype t+ prettyPrec _ (P.TyWildCard _ mn) = char '_' <> maybePP pretty mn+ prettyPrec _ (P.TyQuasiQuote _ n qt) = text ("[$" ++ n ++ "|" ++ qt ++ "|]")
@@ -1,146 +1,194 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-} ------------------------------------------------------------------------------ --- | --- Module : Language.Haskell.Exts.SrcLoc --- Copyright : (c) Niklas Broberg 2009 --- License : BSD-style (see the file LICENSE.txt) --- --- Maintainer : Niklas Broberg, d00nibro@chalmers.se --- Stability : stable --- Portability : portable --- --- This module defines various data types representing source location --- information, of varying degree of preciseness. --- ------------------------------------------------------------------------------ -module Language.Haskell.Exts.SrcLoc where - -#ifdef __GLASGOW_HASKELL__ -#ifdef BASE4 -import Data.Data -#else -import Data.Generics (Data(..),Typeable(..)) -#endif -#endif - --- | A single position in the source. -data SrcLoc = SrcLoc - { srcFilename :: String - , srcLine :: Int - , srcColumn :: Int - } -#ifdef __GLASGOW_HASKELL__ - deriving (Eq,Ord,Show,Typeable,Data) -#else - deriving (Eq,Ord,Show) -#endif - - --- | A portion of the source, spanning one or more lines and zero or more columns. -data SrcSpan = SrcSpan - { srcSpanFilename :: String - , srcSpanStartLine :: Int - , srcSpanStartColumn :: Int - , srcSpanEndLine :: Int - , srcSpanEndColumn :: Int - } -#ifdef __GLASGOW_HASKELL__ - deriving (Eq,Ord,Show,Typeable,Data) -#else - deriving (Eq,Ord,Show) -#endif - --- | Combine two locations in the source to denote a span. -mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan -mkSrcSpan (SrcLoc fn sl sc) (SrcLoc _ el ec) = SrcSpan fn sl sc el ec - --- | Merge two source spans into a single span from the start of the first --- to the end of the second. Assumes that the two spans are given in the --- order they appear in the source. -mergeSrcSpan :: SrcSpan -> SrcSpan -> SrcSpan -mergeSrcSpan (SrcSpan fn sl sc _ _) (SrcSpan _ _ _ el ec) = SrcSpan fn sl sc el ec - --- | Test if a given span starts and ends at the same location. -isNullSpan ss = srcSpanStartLine ss == srcSpanEndLine ss && - srcSpanStartColumn ss >= srcSpanEndColumn ss - --- | An entity located in the source. -data Loc a = Loc - { loc :: SrcSpan - , unLoc :: a - } - deriving (Eq,Ord,Show) - - --- | A portion of the source, extended with information on the position of entities within the span. -data SrcSpanInfo = SrcSpanInfo - { srcInfoSpan :: SrcSpan --- , explLayout :: Bool - , srcInfoPoints :: [SrcSpan] -- Marks the location of specific entities inside the span - } -#ifdef __GLASGOW_HASKELL__ - deriving (Eq,Ord,Show,Typeable,Data) -#else - deriving (Eq,Ord,Show) -#endif - - -noInfoSpan :: SrcSpan -> SrcSpanInfo -noInfoSpan ss = SrcSpanInfo ss [] - -infoSpan :: SrcSpan -> [SrcSpan] -> SrcSpanInfo -infoSpan x y = SrcSpanInfo x y - -(<++>), combSpanInfo :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo -combSpanInfo s1 s2 = SrcSpanInfo - (mergeSrcSpan (srcInfoSpan s1) (srcInfoSpan s2)) - [] - -(<++>) = combSpanInfo - -(<+?>) :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo -a <+?> b = case b of {Nothing -> a; Just b -> a <++> b} - -(<?+>) :: Maybe SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo -a <?+> b = case a of {Nothing -> b; Just a -> a <++> b} - -(<**) :: SrcSpanInfo -> [SrcSpan] -> SrcSpanInfo -ss@(SrcSpanInfo {srcInfoPoints = ps}) <** xs = ss {srcInfoPoints = ps ++ xs} - -(<^^>) :: SrcSpan -> SrcSpan -> SrcSpanInfo -a <^^> b = noInfoSpan (mergeSrcSpan a b) - -infixl 6 <^^> -infixl 5 <++> -infixl 4 <**, <+?>, <?+> - -class SrcInfo si where - toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> si - fromSrcInfo :: SrcSpanInfo -> si - getPointLoc :: si -> SrcLoc - fileName :: si -> String - startLine :: si -> Int - startColumn :: si -> Int - - getPointLoc si = SrcLoc (fileName si) (startLine si) (startColumn si) - -instance SrcInfo SrcLoc where - toSrcInfo s _ _ = s - fromSrcInfo si = SrcLoc (fileName si) (startLine si) (startColumn si) - fileName = srcFilename - startLine = srcLine - startColumn = srcColumn - -instance SrcInfo SrcSpan where - toSrcInfo st _ end = mkSrcSpan st end - fromSrcInfo = srcInfoSpan - fileName = srcSpanFilename - startLine = srcSpanStartLine - startColumn = srcSpanStartColumn - -instance SrcInfo SrcSpanInfo where - toSrcInfo st pts end = SrcSpanInfo (mkSrcSpan st end) pts - fromSrcInfo = id - fileName = fileName . srcInfoSpan - startLine = startLine . srcInfoSpan - startColumn = startColumn . srcInfoSpan +{-# LANGUAGE DeriveDataTypeable, DeriveGeneric #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.SrcLoc+-- Copyright : (c) Niklas Broberg 2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- This module defines various data types representing source location+-- information, of varying degree of preciseness.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.SrcLoc where++import Data.Data+import GHC.Generics (Generic)++showInt :: Int -> String+showInt i | i < 0 = "(" ++ show i ++ ")"+showInt i = show i++-- | A single position in the source.+data SrcLoc = SrcLoc+ { srcFilename :: String+ , srcLine :: Int+ , srcColumn :: Int+ }+ deriving (Eq,Ord,Typeable,Data,Generic)++instance Show SrcLoc where+ showsPrec n (SrcLoc fn sl sc) =+ showParen (n >= 11) $+ showString $ "SrcLoc " ++ show fn ++ " " ++ unwords (map showInt [sl,sc])++noLoc :: SrcLoc+noLoc = SrcLoc "" (-1) (-1)++-- | A portion of the source, spanning one or more lines and zero or more columns.+data SrcSpan = SrcSpan+ { srcSpanFilename :: String+ , srcSpanStartLine :: Int+ , srcSpanStartColumn :: Int+ , srcSpanEndLine :: Int+ , srcSpanEndColumn :: Int+ }+ deriving (Eq,Ord,Typeable,Data,Generic)++instance Show SrcSpan where+ showsPrec n (SrcSpan fn sl sc el ec) =+ showParen (n >= 11) $+ showString $ "SrcSpan " ++ show fn ++ " " ++ unwords (map showInt [sl,sc,el,ec])+++-- | Returns 'srcSpanStartLine' and 'srcSpanStartColumn' in a pair.+srcSpanStart :: SrcSpan -> (Int,Int)+srcSpanStart x = (srcSpanStartLine x, srcSpanStartColumn x)++-- | Returns 'srcSpanEndLine' and 'srcSpanEndColumn' in a pair.+srcSpanEnd :: SrcSpan -> (Int,Int)+srcSpanEnd x = (srcSpanEndLine x, srcSpanEndColumn x)+++-- | Combine two locations in the source to denote a span.+mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan+mkSrcSpan (SrcLoc fn sl sc) (SrcLoc _ el ec) = SrcSpan fn sl sc el ec++-- | Merge two source spans into a single span from the start of the first+-- to the end of the second. Assumes that the two spans relate to the+-- same source file.+mergeSrcSpan :: SrcSpan -> SrcSpan -> SrcSpan+mergeSrcSpan (SrcSpan fn sl1 sc1 el1 ec1) (SrcSpan _ sl2 sc2 el2 ec2) =+ let (sl,sc) = min (sl1,sc1) (sl2,sc2)+ (el,ec) = max (el1,ec1) (el2,ec2)+ in SrcSpan fn sl sc el ec++-- | Test if a given span starts and ends at the same location.+isNullSpan :: SrcSpan -> Bool+isNullSpan ss = spanSize ss == (0,0)+{- isNullSpan ss = srcSpanStartLine ss == srcSpanEndLine ss &&+ srcSpanStartColumn ss >= srcSpanEndColumn ss+-}++spanSize :: SrcSpan -> (Int, Int)+spanSize ss = (srcSpanEndLine ss - srcSpanStartLine ss, max 0 (srcSpanEndColumn ss - srcSpanStartColumn ss))++-- | An entity located in the source.+data Loc a = Loc+ { loc :: SrcSpan+ , unLoc :: a+ }+ deriving (Eq,Ord,Show,Generic)+++-- | A portion of the source, extended with information on the position of entities within the span.+data SrcSpanInfo = SrcSpanInfo+ { srcInfoSpan :: SrcSpan+-- , explLayout :: Bool+ , srcInfoPoints :: [SrcSpan] -- Marks the location of specific entities inside the span+ }+ deriving (Eq,Ord,Typeable,Data,Generic)++-- Identical output to the derived show instance for GHC 7.10 and earlier.+instance Show SrcSpanInfo where+ showsPrec n (SrcSpanInfo s pts) = showParen (n >= 11) . showString $+ "SrcSpanInfo {srcInfoSpan = " ++ show s ++ ", srcInfoPoints = " ++ show pts ++ "}"++-- | Generate a 'SrcSpanInfo' with no positional information for entities.+noInfoSpan :: SrcSpan -> SrcSpanInfo+noInfoSpan ss = SrcSpanInfo ss []++-- | A bogus `SrcSpanInfo`, the location is @noLoc@.+-- `noSrcSpan = noInfoSpan (mkSrcSpan noLoc noLoc)`+noSrcSpan :: SrcSpanInfo+noSrcSpan = noInfoSpan (mkSrcSpan noLoc noLoc)++-- | Generate a 'SrcSpanInfo' with the supplied positional information for entities.+infoSpan :: SrcSpan -> [SrcSpan] -> SrcSpanInfo+infoSpan = SrcSpanInfo++-- | Combine two 'SrcSpanInfo's into one that spans the combined source area of+-- the two arguments, leaving positional information blank.+combSpanInfo :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo+combSpanInfo s1 s2 = SrcSpanInfo+ (mergeSrcSpan (srcInfoSpan s1) (srcInfoSpan s2))+ []++-- | Like '(<+?>)', but it also concatenates the 'srcInfoPoints'.+combSpanMaybe :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo+combSpanMaybe s1 Nothing = s1+combSpanMaybe s1 (Just s2) = SrcSpanInfo+ (mergeSrcSpan (srcInfoSpan s1) (srcInfoSpan s2))+ (srcInfoPoints s1 ++ srcInfoPoints s2)++-- | Short name for 'combSpanInfo'+(<++>) :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo+(<++>) = combSpanInfo++-- | Optionally combine the first argument with the second,+-- or return it unchanged if the second argument is 'Nothing'.+(<+?>) :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo+a <+?> b = case b of {Nothing -> a; Just b' -> a <++> b'}++-- | Optionally combine the second argument with the first,+-- or return it unchanged if the first argument is 'Nothing'.+(<?+>) :: Maybe SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo+a <?+> b = case a of {Nothing -> b; Just a' -> a' <++> b}++-- | Add more positional information for entities of a span.+(<**) :: SrcSpanInfo -> [SrcSpan] -> SrcSpanInfo+ss@(SrcSpanInfo {srcInfoPoints = ps}) <** xs = ss {srcInfoPoints = ps ++ xs}++-- | Merge two 'SrcSpan's and lift them to a 'SrcInfoSpan' with+-- no positional information for entities.+(<^^>) :: SrcSpan -> SrcSpan -> SrcSpanInfo+a <^^> b = noInfoSpan (mergeSrcSpan a b)++infixl 6 <^^>+infixl 5 <++>+infixl 4 <**, <+?>, <?+>++-- | A class to work over all kinds of source location information.+class SrcInfo si where+ toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> si+ fromSrcInfo :: SrcSpanInfo -> si+ getPointLoc :: si -> SrcLoc+ fileName :: si -> String+ startLine :: si -> Int+ startColumn :: si -> Int++ getPointLoc si = SrcLoc (fileName si) (startLine si) (startColumn si)++instance SrcInfo SrcLoc where+ toSrcInfo s _ _ = s+ fromSrcInfo si = SrcLoc (fileName si) (startLine si) (startColumn si)+ fileName = srcFilename+ startLine = srcLine+ startColumn = srcColumn++instance SrcInfo SrcSpan where+ toSrcInfo st _ end = mkSrcSpan st end+ fromSrcInfo = srcInfoSpan+ fileName = srcSpanFilename+ startLine = srcSpanStartLine+ startColumn = srcSpanStartColumn++instance SrcInfo SrcSpanInfo where+ toSrcInfo st pts end = SrcSpanInfo (mkSrcSpan st end) pts+ fromSrcInfo = id+ fileName = fileName . srcInfoSpan+ startLine = startLine . srcInfoSpan+ startColumn = startColumn . srcInfoSpan
@@ -1,1020 +1,1952 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-}--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Exts.Syntax--- Copyright : (c) Niklas Broberg 2004-2009,--- (c) The GHC Team, 1997-2000--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@chalmers.se--- Stability : stable--- Portability : portable------ A suite of datatypes describing the abstract syntax of Haskell 98--- <http://www.haskell.org/onlinereport/> plus registered extensions, including:------ * multi-parameter type classes with functional dependencies (MultiParamTypeClasses, FunctionalDependencies)------ * parameters of type class assertions are unrestricted (FlexibleContexts)------ * 'forall' types as universal and existential quantification (RankNTypes, ExistentialQuantification, etc)------ * pattern guards (PatternGuards)------ * implicit parameters (ImplicitParameters)------ * generalised algebraic data types (GADTs)------ * template haskell (TemplateHaskell)------ * empty data type declarations (EmptyDataDecls)------ * unboxed tuples (UnboxedTuples)------ * regular patterns (RegularPatterns)------ * HSP-style XML expressions and patterns (XmlSyntax)-----------------------------------------------------------------------------------module Language.Haskell.Exts.Syntax (- -- * Modules- Module(..), WarningText(..), ExportSpec(..),- ImportDecl(..), ImportSpec(..), Assoc(..),- -- * Declarations- Decl(..), Binds(..), IPBind(..),- -- ** Type classes and instances- ClassDecl(..), InstDecl(..), Deriving,- -- ** Data type declarations- DataOrNew(..), ConDecl(..), QualConDecl(..), GadtDecl(..), BangType(..),- -- ** Function bindings- Match(..), Rhs(..), GuardedRhs(..),- -- * Class Assertions and Contexts- Context, FunDep(..), Asst(..),- -- * Types- Type(..), Boxed(..), Kind(..), TyVarBind(..),- -- * Expressions- Exp(..), Stmt(..), QualStmt(..), FieldUpdate(..),- Alt(..), GuardedAlts(..), GuardedAlt(..), XAttr(..),- -- * Patterns- Pat(..), PatField(..), PXAttr(..), RPat(..), RPatOp(..),- -- * Literals- Literal(..),- -- * Variables, Constructors and Operators- ModuleName(..), QName(..), Name(..), QOp(..), Op(..),- SpecialCon(..), CName(..), IPName(..), XName(..),-- -- * Template Haskell- Bracket(..), Splice(..),-- -- * FFI- Safety(..), CallConv(..),-- -- * Pragmas- OptionPragma(..), Tool(..),- Rule(..), RuleVar(..), Activation(..),-- -- * Builtin names-- -- ** Modules- prelude_mod, main_mod,- -- ** Main function of a program- main_name,- -- ** Constructors- unit_con_name, tuple_con_name, list_cons_name, unboxed_singleton_con_name,- unit_con, tuple_con, unboxed_singleton_con,- -- ** Special identifiers- as_name, qualified_name, hiding_name, minus_name, bang_name, dot_name, star_name,- export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name,- -- ** Type constructors- unit_tycon_name, fun_tycon_name, list_tycon_name, tuple_tycon_name, unboxed_singleton_tycon_name,- unit_tycon, fun_tycon, list_tycon, tuple_tycon, unboxed_singleton_tycon,-- -- * Source coordinates- SrcLoc(..),- ) where---#ifdef __GLASGOW_HASKELL__-#ifdef BASE4-import Data.Data-#else-import Data.Generics (Data(..),Typeable(..))-#endif-#endif--import Language.Haskell.Exts.SrcLoc (SrcLoc(..))--import Language.Haskell.Exts.Annotated.Syntax (Boxed(..), Tool(..))--{-- | A position in the source.-data SrcLoc = SrcLoc {- srcFilename :: String,- srcLine :: Int,- srcColumn :: Int- }-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif--}---- | The name of a Haskell module.-newtype ModuleName = ModuleName String-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Constructors with special syntax.--- These names are never qualified, and always refer to builtin type or--- data constructors.--data SpecialCon- = UnitCon -- ^ unit type and data constructor @()@- | ListCon -- ^ list type constructor @[]@- | FunCon -- ^ function type constructor @->@- | TupleCon Boxed Int -- ^ /n/-ary tuple type and data- -- constructors @(,)@ etc, possibly boxed @(\#,\#)@- | Cons -- ^ list data constructor @(:)@- | UnboxedSingleCon -- ^ unboxed singleton tuple constructor @(\# \#)@-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | This type is used to represent qualified variables, and also--- qualified constructors.-data QName- = Qual ModuleName Name -- ^ name qualified with a module name- | UnQual Name -- ^ unqualified local name- | Special SpecialCon -- ^ built-in constructor with special syntax-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | This type is used to represent variables, and also constructors.-data Name- = Ident String -- ^ /varid/ or /conid/.- | Symbol String -- ^ /varsym/ or /consym/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An implicit parameter name.-data IPName- = IPDup String -- ^ ?/ident/, non-linear implicit parameter- | IPLin String -- ^ %/ident/, linear implicit parameter-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Possibly qualified infix operators (/qop/), appearing in expressions.-data QOp- = QVarOp QName -- ^ variable operator (/qvarop/)- | QConOp QName -- ^ constructor operator (/qconop/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Operators appearing in @infix@ declarations are never qualified.-data Op- = VarOp Name -- ^ variable operator (/varop/)- | ConOp Name -- ^ constructor operator (/conop/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A name (/cname/) of a component of a class or data type in an @import@--- or export specification.-data CName- = VarName Name -- ^ name of a method or field- | ConName Name -- ^ name of a data constructor-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A complete Haskell source module.-data Module = Module SrcLoc ModuleName [OptionPragma] (Maybe WarningText)- (Maybe [ExportSpec]) [ImportDecl] [Decl]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An item in a module's export specification.-data ExportSpec- = EVar QName -- ^ variable- | EAbs QName -- ^ @T@:- -- a class or datatype exported abstractly,- -- or a type synonym.- | EThingAll QName -- ^ @T(..)@:- -- a class exported with all of its methods, or- -- a datatype exported with all of its constructors.- | EThingWith QName [CName] -- ^ @T(C_1,...,C_n)@:- -- a class exported with some of its methods, or- -- a datatype exported with some of its constructors.- | EModuleContents ModuleName -- ^ @module M@:- -- re-export a module.-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An import declaration.-data ImportDecl = ImportDecl- { importLoc :: SrcLoc -- ^ position of the @import@ keyword.- , importModule :: ModuleName -- ^ name of the module imported.- , importQualified :: Bool -- ^ imported @qualified@?- , importSrc :: Bool -- ^ imported with @{-\# SOURCE \#-}@?- , importPkg :: Maybe String -- ^ imported with explicit package name- , importAs :: Maybe ModuleName -- ^ optional alias name in an @as@ clause.- , importSpecs :: Maybe (Bool,[ImportSpec])- -- ^ optional list of import specifications.- -- The 'Bool' is 'True' if the names are excluded- -- by @hiding@.- }-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An import specification, representing a single explicit item imported--- (or hidden) from a module.-data ImportSpec- = IVar Name -- ^ variable- | IAbs Name -- ^ @T@:- -- the name of a class, datatype or type synonym.- | IThingAll Name -- ^ @T(..)@:- -- a class imported with all of its methods, or- -- a datatype imported with all of its constructors.- | IThingWith Name [CName] -- ^ @T(C_1,...,C_n)@:- -- a class imported with some of its methods, or- -- a datatype imported with some of its constructors.-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Associativity of an operator.-data Assoc- = AssocNone -- ^ non-associative operator (declared with @infix@)- | AssocLeft -- ^ left-associative operator (declared with @infixl@).- | AssocRight -- ^ right-associative operator (declared with @infixr@)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A single derived instance, which may have arguments since it may be a MPTC.-type Deriving = (QName, [Type])---- | A top-level declaration.-data Decl- = TypeDecl SrcLoc Name [TyVarBind] Type- -- ^ A type declaration- | TypeFamDecl SrcLoc Name [TyVarBind] (Maybe Kind)- -- ^ A type family declaration- | DataDecl SrcLoc DataOrNew Context Name [TyVarBind] [QualConDecl] [Deriving]- -- ^ A data OR newtype declaration- | GDataDecl SrcLoc DataOrNew Context Name [TyVarBind] (Maybe Kind) [GadtDecl] [Deriving]- -- ^ A data OR newtype declaration, GADT style- | DataFamDecl SrcLoc {-data-} Context Name [TyVarBind] (Maybe Kind)- -- ^ A data family declaration- | TypeInsDecl SrcLoc Type Type- -- ^ A type family instance declaration- | DataInsDecl SrcLoc DataOrNew Type [QualConDecl] [Deriving]- -- ^ A data family instance declaration- | GDataInsDecl SrcLoc DataOrNew Type (Maybe Kind) [GadtDecl] [Deriving]- -- ^ A data family instance declaration, GADT style- | ClassDecl SrcLoc Context Name [TyVarBind] [FunDep] [ClassDecl]- -- ^ A declaration of a type class- | InstDecl SrcLoc Context QName [Type] [InstDecl]- -- ^ An declaration of a type class instance- | DerivDecl SrcLoc Context QName [Type]- -- ^ A standalone deriving declaration- | InfixDecl SrcLoc Assoc Int [Op]- -- ^ A declaration of operator fixity- | DefaultDecl SrcLoc [Type]- -- ^ A declaration of default types- | SpliceDecl SrcLoc Exp- -- ^ A Template Haskell splicing declaration- | TypeSig SrcLoc [Name] Type- -- ^ A type signature declaration- | FunBind [Match]- -- ^ A set of function binding clauses- | PatBind SrcLoc Pat (Maybe Type) Rhs {-where-} Binds- -- ^ A pattern binding- | ForImp SrcLoc CallConv Safety String Name Type- -- ^ A foreign import declaration- | ForExp SrcLoc CallConv String Name Type- -- ^ A foreign export declaration-- | RulePragmaDecl SrcLoc [Rule]- -- ^ A RULES pragma- | DeprPragmaDecl SrcLoc [([Name], String)]- -- ^ A DEPRECATED pragma- | WarnPragmaDecl SrcLoc [([Name], String)]- -- ^ A WARNING pragma- | InlineSig SrcLoc Bool Activation QName- -- ^ An INLINE pragma- | SpecSig SrcLoc QName [Type]- -- ^ A SPECIALISE pragma- | SpecInlineSig SrcLoc Bool Activation QName [Type]- -- ^ A SPECIALISE INLINE pragma- | InstSig SrcLoc Context QName [Type]- -- ^ A SPECIALISE instance pragma-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A flag stating whether a declaration is a data or newtype declaration.-data DataOrNew = DataType | NewType-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A binding group inside a @let@ or @where@ clause.-data Binds- = BDecls [Decl] -- ^ An ordinary binding group- | IPBinds [IPBind] -- ^ A binding group for implicit parameters-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A binding of an implicit parameter.-data IPBind = IPBind SrcLoc IPName Exp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Clauses of a function binding.-data Match- = Match SrcLoc Name [Pat] (Maybe Type) Rhs {-where-} Binds-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A single constructor declaration within a data type declaration,--- which may have an existential quantification binding.-data QualConDecl- = QualConDecl SrcLoc- {-forall-} [TyVarBind] {- . -} Context- {- => -} ConDecl-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Declaration of an ordinary data constructor.-data ConDecl- = ConDecl Name [BangType]- -- ^ ordinary data constructor- | InfixConDecl BangType Name BangType- -- ^ infix data constructor- | RecDecl Name [([Name],BangType)]- -- ^ record constructor-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A single constructor declaration in a GADT data type declaration.-data GadtDecl- = GadtDecl SrcLoc Name Type-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Declarations inside a class declaration.-data ClassDecl- = ClsDecl Decl- -- ^ ordinary declaration- | ClsDataFam SrcLoc Context Name [TyVarBind] (Maybe Kind)- -- ^ declaration of an associated data type- | ClsTyFam SrcLoc Name [TyVarBind] (Maybe Kind)- -- ^ declaration of an associated type synonym- | ClsTyDef SrcLoc Type Type- -- ^ default choice for an associated type synonym-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Declarations inside an instance declaration.-data InstDecl- = InsDecl Decl- -- ^ ordinary declaration- | InsType SrcLoc Type Type- -- ^ an associated type definition- | InsData SrcLoc DataOrNew Type [QualConDecl] [Deriving]- -- ^ an associated data type implementation- | InsGData SrcLoc DataOrNew Type (Maybe Kind) [GadtDecl] [Deriving]- -- ^ an associated data type implemented using GADT style- | InsInline SrcLoc Bool Activation QName- -- ^ an INLINE pragma-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The type of a constructor argument or field, optionally including--- a strictness annotation.-data BangType- = BangedTy Type -- ^ strict component, marked with \"@!@\"- | UnBangedTy Type -- ^ non-strict component- | UnpackedTy Type -- ^ unboxed component, marked with an UNPACK pragma-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The right hand side of a function or pattern binding.-data Rhs- = UnGuardedRhs Exp -- ^ unguarded right hand side (/exp/)- | GuardedRhss [GuardedRhs]- -- ^ guarded right hand side (/gdrhs/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A guarded right hand side @|@ /stmts/ @=@ /exp/.--- The guard is a series of statements when using pattern guards,--- otherwise it will be a single qualifier expression.-data GuardedRhs- = GuardedRhs SrcLoc [Stmt] Exp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A type qualified with a context.--- An unqualified type has an empty context.-data Type- = TyForall- (Maybe [TyVarBind])- Context- Type -- ^ qualified type- | TyFun Type Type -- ^ function type- | TyTuple Boxed [Type] -- ^ tuple type, possibly boxed- | TyList Type -- ^ list syntax, e.g. [a], as opposed to [] a- | TyApp Type Type -- ^ application of a type constructor- | TyVar Name -- ^ type variable- | TyCon QName -- ^ named type or type constructor- | TyParen Type -- ^ type surrounded by parentheses- | TyInfix Type QName Type -- ^ infix type constructor- | TyKind Type Kind -- ^ type with explicit kind signature-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif--{-- | Flag denoting whether a tuple is boxed or unboxed.-data Boxed = Boxed | Unboxed-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---}---- | A type variable declaration, optionally with an explicit kind annotation.-data TyVarBind- = KindedVar Name Kind -- ^ variable binding with kind annotation- | UnkindedVar Name -- ^ ordinary variable binding-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An explicit kind annotation.-data Kind- = KindStar -- ^ @*@, the kind of types- | KindBang -- ^ @!@, the kind of unboxed types- | KindFn Kind Kind -- ^ @->@, the kind of a type constructor- | KindParen Kind -- ^ a kind surrounded by parentheses- | KindVar Name -- ^ a kind variable (as of yet unsupported by compilers)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif----- | A functional dependency, given on the form--- l1 l2 ... ln -> r2 r3 .. rn-data FunDep- = FunDep [Name] [Name]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A context is a set of assertions-type Context = [Asst]---- | Class assertions.--- In Haskell 98, the argument would be a /tyvar/, but this definition--- allows multiple parameters, and allows them to be /type/s.--- Also extended with support for implicit parameters and equality constraints.-data Asst = ClassA QName [Type] -- ^ ordinary class assertion- | InfixA Type QName Type -- ^ class assertion where the class name is given infix- | IParam IPName Type -- ^ implicit parameter assertion- | EqualP Type Type -- ^ type equality constraint-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | /literal/--- Values of this type hold the abstract value of the literal, not the--- precise string representation used. For example, @10@, @0o12@ and @0xa@--- have the same representation.-data Literal- = Char Char -- ^ character literal- | String String -- ^ string literal- | Int Integer -- ^ integer literal- | Frac Rational -- ^ floating point literal- | PrimInt Integer -- ^ unboxed integer literal- | PrimWord Integer -- ^ unboxed word literal- | PrimFloat Rational -- ^ unboxed float literal- | PrimDouble Rational -- ^ unboxed double literal- | PrimChar Char -- ^ unboxed character literal- | PrimString String -- ^ unboxed string literal-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Haskell expressions.-data Exp- = Var QName -- ^ variable- | IPVar IPName -- ^ implicit parameter variable- | Con QName -- ^ data constructor- | Lit Literal -- ^ literal constant- | InfixApp Exp QOp Exp -- ^ infix application- | App Exp Exp -- ^ ordinary application- | NegApp Exp -- ^ negation expression @-/exp/@ (unary minus)- | Lambda SrcLoc [Pat] Exp -- ^ lambda expression- | Let Binds Exp -- ^ local declarations with @let@ ... @in@ ...- | If Exp Exp Exp -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/- | Case Exp [Alt] -- ^ @case@ /exp/ @of@ /alts/- | Do [Stmt] -- ^ @do@-expression:- -- the last statement in the list- -- should be an expression.- | MDo [Stmt] -- ^ @mdo@-expression- | Tuple [Exp] -- ^ tuple expression- | TupleSection [Maybe Exp] -- ^ tuple section expression, e.g. @(,,3)@- | List [Exp] -- ^ list expression- | Paren Exp -- ^ parenthesised expression- | LeftSection Exp QOp -- ^ left section @(@/exp/ /qop/@)@- | RightSection QOp Exp -- ^ right section @(@/qop/ /exp/@)@- | RecConstr QName [FieldUpdate]- -- ^ record construction expression- | RecUpdate Exp [FieldUpdate]- -- ^ record update expression- | EnumFrom Exp -- ^ unbounded arithmetic sequence,- -- incrementing by 1: @[from ..]@- | EnumFromTo Exp Exp -- ^ bounded arithmetic sequence,- -- incrementing by 1 @[from .. to]@- | EnumFromThen Exp Exp -- ^ unbounded arithmetic sequence,- -- with first two elements given @[from, then ..]@- | EnumFromThenTo Exp Exp Exp- -- ^ bounded arithmetic sequence,- -- with first two elements given @[from, then .. to]@- | ListComp Exp [QualStmt] -- ^ ordinary list comprehension- | ParComp Exp [[QualStmt]] -- ^ parallel list comprehension- | ExpTypeSig SrcLoc Exp Type- -- ^ expression with explicit type signature-- | VarQuote QName -- ^ @'x@ for template haskell reifying of expressions- | TypQuote QName -- ^ @''T@ for template haskell reifying of types- | BracketExp Bracket -- ^ template haskell bracket expression- | SpliceExp Splice -- ^ template haskell splice expression- | QuasiQuote String String -- ^ quasi-quotaion: @[$/name/| /string/ |]@---- Hsx- | XTag SrcLoc XName [XAttr] (Maybe Exp) [Exp]- -- ^ xml element, with attributes and children- | XETag SrcLoc XName [XAttr] (Maybe Exp)- -- ^ empty xml element, with attributes- | XPcdata String -- ^ PCDATA child element- | XExpTag Exp -- ^ escaped haskell expression inside xml---- Pragmas- | CorePragma String Exp -- ^ CORE pragma- | SCCPragma String Exp -- ^ SCC pragma- | GenPragma String (Int, Int) (Int, Int) Exp- -- ^ GENERATED pragma---- Arrows- | Proc Pat Exp -- ^ arrows proc: @proc@ /pat/ @->@ /exp/- | LeftArrApp Exp Exp -- ^ arrow application (from left): /exp/ @-<@ /exp/- | RightArrApp Exp Exp -- ^ arrow application (from right): /exp/ @>-@ /exp/- | LeftArrHighApp Exp Exp -- ^ higher-order arrow application (from left): /exp/ @-<<@ /exp/- | RightArrHighApp Exp Exp -- ^ higher-order arrow application (from right): /exp/ @>>-@ /exp/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The name of an xml element or attribute,--- possibly qualified with a namespace.-data XName- = XName String -- <name ...- | XDomName String String -- <dom:name ...-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An xml attribute, which is a name-expression pair.-data XAttr = XAttr XName Exp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A template haskell bracket expression.-data Bracket- = ExpBracket Exp -- ^ expression bracket: @[| ... |]@- | PatBracket Pat -- ^ pattern bracket: @[p| ... |]@- | TypeBracket Type -- ^ type bracket: @[t| ... |]@- | DeclBracket [Decl] -- ^ declaration bracket: @[d| ... |]@-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A template haskell splice expression-data Splice- = IdSplice String -- ^ variable splice: @$var@- | ParenSplice Exp -- ^ parenthesised expression splice: @$(/exp/)@-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The safety of a foreign function call.-data Safety- = PlayRisky -- ^ unsafe- | PlaySafe Bool -- ^ safe ('False') or threadsafe ('True')-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The calling convention of a foreign function call.-data CallConv- = StdCall- | CCall-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A top level options pragma, preceding the module header.-data OptionPragma- = LanguagePragma SrcLoc [Name] -- ^ LANGUAGE pragma- | IncludePragma SrcLoc String -- ^ INCLUDE pragma- | CFilesPragma SrcLoc String -- ^ CFILES pragma- | OptionsPragma SrcLoc (Maybe Tool) String- -- ^ OPTIONS pragma, possibly qualified with a tool, e.g. OPTIONS_GHC-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif--{-- | Recognised tools for OPTIONS pragmas.-data Tool = GHC | HUGS | NHC98 | YHC | HADDOCK | UnknownTool String-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif--}---- | Activation clause of a RULES pragma.-data Activation- = AlwaysActive- | ActiveFrom Int- | ActiveUntil Int-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The body of a RULES pragma.-data Rule- = Rule String Activation (Maybe [RuleVar]) Exp Exp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Variables used in a RULES pragma, optionally annotated with types-data RuleVar- = RuleVar Name- | TypedRuleVar Name Type-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Warning text to optionally use in the module header of e.g.--- a deprecated module.-data WarningText- = DeprText String- | WarnText String-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif----- | A pattern, to be matched against a value.-data Pat- = PVar Name -- ^ variable- | PLit Literal -- ^ literal constant- | PNeg Pat -- ^ negated pattern- | PNPlusK Name Integer -- ^ n+k pattern- | PInfixApp Pat QName Pat- -- ^ pattern with an infix data constructor- | PApp QName [Pat] -- ^ data constructor and argument patterns- | PTuple [Pat] -- ^ tuple pattern- | PList [Pat] -- ^ list pattern- | PParen Pat -- ^ parenthesized pattern- | PRec QName [PatField] -- ^ labelled pattern, record style- | PAsPat Name Pat -- ^ @\@@-pattern- | PWildCard -- ^ wildcard pattern: @_@- | PIrrPat Pat -- ^ irrefutable pattern: @~/pat/@- | PatTypeSig SrcLoc Pat Type -- ^ pattern with type signature- | PViewPat Exp Pat -- ^ view patterns of the form @(/exp/ -> /pat/)@-- | PRPat [RPat] -- ^ regular list pattern-- | PXTag SrcLoc XName [PXAttr] (Maybe Pat) [Pat]- -- ^ XML element pattern- | PXETag SrcLoc XName [PXAttr] (Maybe Pat)- -- ^ XML singleton element pattern- | PXPcdata String -- ^ XML PCDATA pattern- | PXPatTag Pat -- ^ XML embedded pattern- | PXRPats [RPat] -- ^ XML regular list pattern- | PExplTypeArg QName Type -- ^ Explicit generics style type argument e.g. @f {| Int |} x = ...@-- | PQuasiQuote String String -- ^ quasi quote patter: @[$/name/| /string/ |]@-- | PBangPat Pat -- ^ strict (bang) pattern: @f !x = ...@--#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An XML attribute in a pattern.-data PXAttr = PXAttr XName Pat-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A regular pattern operator.-data RPatOp- = RPStar -- ^ @*@ = 0 or more- | RPStarG -- ^ @*!@ = 0 or more, greedy- | RPPlus -- ^ @+@ = 1 or more- | RPPlusG -- ^ @+!@ = 1 or more, greedy- | RPOpt -- ^ @?@ = 0 or 1- | RPOptG -- ^ @?!@ = 0 or 1, greedy-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An entity in a regular pattern.-data RPat- = RPOp RPat RPatOp- | RPEither RPat RPat- | RPSeq [RPat]- | RPGuard Pat [Stmt]- | RPCAs Name RPat- | RPAs Name RPat- | RPParen RPat- | RPPat Pat-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An /fpat/ in a labeled record pattern.-data PatField- = PFieldPat QName Pat -- ^ ordinary label-pattern pair- | PFieldPun Name -- ^ record field pun- | PFieldWildcard -- ^ record field wildcard-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A statement, representing both a /stmt/ in a @do@-expression,--- an ordinary /qual/ in a list comprehension, as well as a /stmt/--- in a pattern guard.-data Stmt- = Generator SrcLoc Pat Exp- -- ^ a generator: /pat/ @<-@ /exp/- | Qualifier Exp -- ^ an /exp/ by itself: in a @do@-expression,- -- an action whose result is discarded;- -- in a list comprehension and pattern guard,- -- a guard expression- | LetStmt Binds -- ^ local bindings- | RecStmt [Stmt] -- ^ a recursive binding group for arrows-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A general /transqual/ in a list comprehension,--- which could potentially be a transform of the kind--- enabled by TransformListComp.-data QualStmt- = QualStmt Stmt -- ^ an ordinary statement- | ThenTrans Exp -- ^ @then@ /exp/- | ThenBy Exp Exp -- ^ @then@ /exp/ @by@ /exp/- | GroupBy Exp -- ^ @then@ @group@ @by@ /exp/- | GroupUsing Exp -- ^ @then@ @group@ @using@ /exp/- | GroupByUsing Exp Exp -- ^ @then@ @group@ @by@ /exp/ @using@ /exp/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An /fbind/ in a labeled construction or update expression.-data FieldUpdate- = FieldUpdate QName Exp -- ^ ordinary label-expresion pair- | FieldPun Name -- ^ record field pun- | FieldWildcard -- ^ record field wildcard-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | An /alt/ alternative in a @case@ expression.-data Alt- = Alt SrcLoc Pat GuardedAlts Binds-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | The right-hand sides of a @case@ alternative,--- which may be a single right-hand side or a--- set of guarded ones.-data GuardedAlts- = UnGuardedAlt Exp -- ^ @->@ /exp/- | GuardedAlts [GuardedAlt] -- ^ /gdpat/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A guarded case alternative @|@ /stmts/ @->@ /exp/.-data GuardedAlt- = GuardedAlt SrcLoc [Stmt] Exp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---------------------------------------------------------------------------------- Builtin names.--prelude_mod, main_mod :: ModuleName-prelude_mod = ModuleName "Prelude"-main_mod = ModuleName "Main"--main_name :: Name-main_name = Ident "main"--unit_con_name :: QName-unit_con_name = Special UnitCon--tuple_con_name :: Boxed -> Int -> QName-tuple_con_name b i = Special (TupleCon b (i+1))--list_cons_name :: QName-list_cons_name = Special Cons--unboxed_singleton_con_name :: QName-unboxed_singleton_con_name = Special UnboxedSingleCon--unit_con :: Exp-unit_con = Con unit_con_name--tuple_con :: Boxed -> Int -> Exp-tuple_con b i = Con (tuple_con_name b i)--unboxed_singleton_con :: Exp-unboxed_singleton_con = Con (unboxed_singleton_con_name)--as_name, qualified_name, hiding_name, minus_name, bang_name, dot_name, star_name :: Name-as_name = Ident "as"-qualified_name = Ident "qualified"-hiding_name = Ident "hiding"-minus_name = Symbol "-"-bang_name = Symbol "!"-dot_name = Symbol "."-star_name = Symbol "*"--export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name :: Name-export_name = Ident "export"-safe_name = Ident "safe"-unsafe_name = Ident "unsafe"-threadsafe_name = Ident "threadsafe"-stdcall_name = Ident "stdcall"-ccall_name = Ident "ccall"--unit_tycon_name, fun_tycon_name, list_tycon_name, unboxed_singleton_tycon_name :: QName-unit_tycon_name = unit_con_name-fun_tycon_name = Special FunCon-list_tycon_name = Special ListCon-unboxed_singleton_tycon_name = Special UnboxedSingleCon--tuple_tycon_name :: Boxed -> Int -> QName-tuple_tycon_name b i = tuple_con_name b i--unit_tycon, fun_tycon, list_tycon, unboxed_singleton_tycon :: Type-unit_tycon = TyCon unit_tycon_name-fun_tycon = TyCon fun_tycon_name-list_tycon = TyCon list_tycon_name-unboxed_singleton_tycon = TyCon unboxed_singleton_tycon_name--tuple_tycon :: Boxed -> Int -> Type-tuple_tycon b i = TyCon (tuple_tycon_name b i)+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE CPP #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Syntax+-- Copyright : (c) Niklas Broberg 2004-2009,+-- (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- A suite of datatypes describing the (semi-concrete) abstract syntax of Haskell 98+-- <http://www.haskell.org/onlinereport/> plus registered extensions, including:+--+-- * multi-parameter type classes with functional dependencies (MultiParamTypeClasses, FunctionalDependencies)+--+-- * parameters of type class assertions are unrestricted (FlexibleContexts)+--+-- * 'forall' types as universal and existential quantification (RankNTypes, ExistentialQuantification, etc)+--+-- * pattern guards (PatternGuards)+--+-- * implicit parameters (ImplicitParameters)+--+-- * generalised algebraic data types (GADTs)+--+-- * template haskell (TemplateHaskell)+--+-- * empty data type declarations (EmptyDataDecls)+--+-- * unboxed tuples (UnboxedTuples)+--+-- * regular patterns (RegularPatterns)+--+-- * HSP-style XML expressions and patterns (XmlSyntax)+--+-- All nodes in the syntax tree are annotated with something of a user-definable data type.+-- When parsing, this annotation will contain information about the source location that the+-- particular node comes from.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Syntax (+ -- * Modules+ Module(..), ModuleHead(..), WarningText(..), ExportSpecList(..), ExportSpec(..),+ EWildcard(..),+ ImportDecl(..), ImportSpecList(..), ImportSpec(..), Assoc(..), Namespace(..),+ -- * Declarations+ Decl(..), DeclHead(..), InstRule(..), InstHead(..), Binds(..), IPBind(..), PatternSynDirection(..),+ InjectivityInfo(..), ResultSig(..),+ -- ** Type classes and instances+ ClassDecl(..), InstDecl(..), Deriving(..), DerivStrategy(..),+ -- ** Data type declarations+ DataOrNew(..), ConDecl(..), FieldDecl(..), QualConDecl(..), GadtDecl(..), BangType(..),+ Unpackedness(..),+ -- ** Function bindings+ Match(..), Rhs(..), GuardedRhs(..),+ -- * Class Assertions and Contexts+ Context(..), FunDep(..), Asst(..),+ -- * Types+ Type(..), Boxed(..), Kind, TyVarBind(..), Promoted(..),+ TypeEqn (..),+ -- * Expressions+ Exp(..), Stmt(..), QualStmt(..), FieldUpdate(..),+ Alt(..), XAttr(..),+ -- * Patterns+ Pat(..), PatField(..), PXAttr(..), RPat(..), RPatOp(..),+ -- * Literals+ Literal(..), Sign(..),+ -- * Variables, Constructors and Operators+ ModuleName(..), QName(..), Name(..), QOp(..), Op(..),+ SpecialCon(..), CName(..), IPName(..), XName(..), Role(..),+ MaybePromotedName(..),++ -- * Template Haskell+ Bracket(..), Splice(..),++ -- * FFI+ Safety(..), CallConv(..),++ -- * Pragmas+ ModulePragma(..), Tool(..), Overlap(..),+ Rule(..), RuleVar(..), Activation(..),+ Annotation(..), BooleanFormula(..),++ -- * Builtin names++ -- ** Modules+ prelude_mod, main_mod,+ -- ** Main function of a program+ main_name,+ -- ** Constructors+ unit_con_name, tuple_con_name, list_con_name, list_cons_name, unboxed_singleton_con_name,+ unit_con, tuple_con, unboxed_singleton_con,+ -- ** Special identifiers+ as_name, qualified_name, hiding_name, minus_name, bang_name, dot_name, star_name,+ export_name, safe_name, unsafe_name, interruptible_name, threadsafe_name,+ stdcall_name, ccall_name, cplusplus_name, dotnet_name, jvm_name, js_name,+ javascript_name, capi_name, forall_name, family_name, role_name, hole_name,+ stock_name, anyclass_name, via_name,+ -- ** Type constructors+ unit_tycon_name, fun_tycon_name, list_tycon_name, tuple_tycon_name, unboxed_singleton_tycon_name,+ unit_tycon, fun_tycon, list_tycon, tuple_tycon, unboxed_singleton_tycon,++ -- * Source coordinates+ -- SrcLoc(..),++ -- * Annotated trees+ Annotated(..), (=~=),+ ) where++import Prelude hiding (id)++import Data.Data+import GHC.Generics (Generic)+#if __GLASGOW_HASKELL__ < 710+import Data.Foldable (Foldable)+import Data.Traversable (Traversable)+#endif++-- | The name of a Haskell module.+data ModuleName l = ModuleName l String+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Constructors with special syntax.+-- These names are never qualified, and always refer to builtin type or+-- data constructors.+data SpecialCon l+ = UnitCon l -- ^ unit type and data constructor @()@+ | ListCon l -- ^ list type and data constructor @[]@+ | FunCon l -- ^ function type constructor @->@+ | TupleCon l Boxed Int -- ^ /n/-ary tuple type and data+ -- constructors @(,)@ etc, possibly boxed @(\#,\#)@+ | Cons l -- ^ list data constructor @(:)@+ | UnboxedSingleCon l -- ^ unboxed singleton tuple constructor @(\# \#)@+ | ExprHole l -- ^ An expression hole _+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | This type is used to represent qualified variables, and also+-- qualified constructors.+data QName l+ = Qual l (ModuleName l) (Name l) -- ^ name qualified with a module name+ | UnQual l (Name l) -- ^ unqualified local name+ | Special l (SpecialCon l) -- ^ built-in constructor with special syntax+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | This type is used to represent variables, and also constructors.+data Name l+ = Ident l String -- ^ /varid/ or /conid/.+ | Symbol l String -- ^ /varsym/ or /consym/+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An implicit parameter name.+data IPName l+ = IPDup l String -- ^ ?/ident/, non-linear implicit parameter+ | IPLin l String -- ^ %/ident/, linear implicit parameter+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Possibly qualified infix operators (/qop/), appearing in expressions.+data QOp l+ = QVarOp l (QName l) -- ^ variable operator (/qvarop/)+ | QConOp l (QName l) -- ^ constructor operator (/qconop/)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Operators appearing in @infix@ declarations are never qualified.+data Op l+ = VarOp l (Name l) -- ^ variable operator (/varop/)+ | ConOp l (Name l) -- ^ constructor operator (/conop/)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A name (/cname/) of a component of a class or data type in an @import@+-- or export specification.+data CName l+ = VarName l (Name l) -- ^ name of a method or field+ | ConName l (Name l) -- ^ name of a data constructor+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A complete Haskell source module.+data Module l+ = Module l (Maybe (ModuleHead l)) [ModulePragma l] [ImportDecl l] [Decl l]+ -- ^ an ordinary Haskell module+ | XmlPage l (ModuleName l) [ModulePragma l] (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]+ -- ^ a module consisting of a single XML document. The ModuleName never appears in the source+ -- but is needed for semantic purposes, it will be the same as the file name.+ | XmlHybrid l (Maybe (ModuleHead l)) [ModulePragma l] [ImportDecl l] [Decl l]+ (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]+ -- ^ a hybrid module combining an XML document with an ordinary module+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The head of a module, including the name and export specification.+data ModuleHead l = ModuleHead l (ModuleName l) (Maybe (WarningText l)) (Maybe (ExportSpecList l))+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An explicit export specification.+data ExportSpecList l+ = ExportSpecList l [ExportSpec l]+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An item in a module's export specification.+data ExportSpec l+ = EVar l (QName l) -- ^ variable.+ | EAbs l (Namespace l) (QName l) -- ^ @T@:+ -- a class or datatype exported abstractly,+ -- or a type synonym.+ | EThingWith l (EWildcard l) (QName l) [CName l] -- ^ @T(C_1,...,C_n)@:+ -- a class exported with some of its methods, or+ -- a datatype exported with some of its constructors.+ | EModuleContents l (ModuleName l) -- ^ @module M@:+ -- re-export a module.+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Indicates the position of the wildcard in an export list+data EWildcard l = NoWildcard l | EWildcard l Int+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Namespaces for imports/exports.+data Namespace l = NoNamespace l | TypeNamespace l | PatternNamespace l+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An import declaration.+data ImportDecl l = ImportDecl+ { importAnn :: l -- ^ annotation, used by parser for position of the @import@ keyword.+ , importModule :: ModuleName l -- ^ name of the module imported.+ , importQualified :: Bool -- ^ imported @qualified@?+ , importSrc :: Bool -- ^ imported with @{-\# SOURCE \#-}@?+ , importSafe :: Bool -- ^ Import @safe@?+ , importPkg :: Maybe String -- ^ imported with explicit package name+ , importAs :: Maybe (ModuleName l) -- ^ optional alias name in an @as@ clause.+ , importSpecs :: Maybe (ImportSpecList l)+ -- ^ optional list of import specifications.+ }+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An explicit import specification list.+data ImportSpecList l+ = ImportSpecList l Bool [ImportSpec l]+ -- ^ A list of import specifications.+ -- The 'Bool' is 'True' if the names are excluded+ -- by @hiding@.+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An import specification, representing a single explicit item imported+-- (or hidden) from a module.+data ImportSpec l+ = IVar l (Name l) -- ^ variable+ | IAbs l (Namespace l) (Name l) -- ^ @T@:+ -- the name of a class, datatype or type synonym.+ | IThingAll l (Name l) -- ^ @T(..)@:+ -- a class imported with all of its methods, or+ -- a datatype imported with all of its constructors.+ | IThingWith l (Name l) [CName l] -- ^ @T(C_1,...,C_n)@:+ -- a class imported with some of its methods, or+ -- a datatype imported with some of its constructors.+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Associativity of an operator.+data Assoc l+ = AssocNone l -- ^ non-associative operator (declared with @infix@)+ | AssocLeft l -- ^ left-associative operator (declared with @infixl@).+ | AssocRight l -- ^ right-associative operator (declared with @infixr@)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A top-level declaration.+data Decl l+ = TypeDecl l (DeclHead l) (Type l)+ -- ^ A type declaration+ | TypeFamDecl l (DeclHead l) (Maybe (ResultSig l)) (Maybe (InjectivityInfo l))+ -- ^ A type family declaration+ | ClosedTypeFamDecl l (DeclHead l) (Maybe (ResultSig l)) (Maybe (InjectivityInfo l)) [TypeEqn l]+ -- ^ A closed type family declaration+ | DataDecl l (DataOrNew l) (Maybe (Context l)) (DeclHead l) [QualConDecl l] [Deriving l]+ -- ^ A data OR newtype declaration+ | GDataDecl l (DataOrNew l) (Maybe (Context l)) (DeclHead l) (Maybe (Kind l)) [GadtDecl l] [Deriving l]+ -- ^ A data OR newtype declaration, GADT style+ | DataFamDecl l {-data-} (Maybe (Context l)) (DeclHead l) (Maybe (ResultSig l))+ -- ^ A data family declaration+ | TypeInsDecl l (Type l) (Type l)+ -- ^ A type family instance declaration+ | DataInsDecl l (DataOrNew l) (Type l) [QualConDecl l] [Deriving l]+ -- ^ A data family instance declaration+ | GDataInsDecl l (DataOrNew l) (Type l) (Maybe (Kind l)) [GadtDecl l] [Deriving l]+ -- ^ A data family instance declaration, GADT style+ | ClassDecl l (Maybe (Context l)) (DeclHead l) [FunDep l] (Maybe [ClassDecl l])+ -- ^ A declaration of a type class+ | InstDecl l (Maybe (Overlap l)) (InstRule l) (Maybe [InstDecl l])+ -- ^ An declaration of a type class instance+ | DerivDecl l (Maybe (DerivStrategy l)) (Maybe (Overlap l)) (InstRule l)+ -- ^ A standalone deriving declaration+ | InfixDecl l (Assoc l) (Maybe Int) [Op l]+ -- ^ A declaration of operator fixity+ | DefaultDecl l [Type l]+ -- ^ A declaration of default types+ | SpliceDecl l (Exp l)+ -- ^ A Template Haskell splicing declaration+ | TSpliceDecl l (Exp l)+ -- ^ A typed Template Haskell splicing declaration+ | TypeSig l [Name l] (Type l)+ -- ^ A type signature declaration+ | PatSynSig l [Name l] (Maybe [TyVarBind l]) (Maybe (Context l))+ (Maybe [TyVarBind l]) (Maybe (Context l))+ (Type l)+ -- ^ A pattern synonym signature declation+ | FunBind l [Match l]+ -- ^ A set of function binding clauses+ | PatBind l (Pat l) (Rhs l) {-where-} (Maybe (Binds l))+ -- ^ A pattern binding+ | PatSyn l (Pat l) (Pat l) (PatternSynDirection l)+ -- ^ A pattern synonym binding+ | ForImp l (CallConv l) (Maybe (Safety l)) (Maybe String) (Name l) (Type l)+ -- ^ A foreign import declaration+ | ForExp l (CallConv l) (Maybe String) (Name l) (Type l)+ -- ^ A foreign export declaration+ | RulePragmaDecl l [Rule l]+ -- ^ A RULES pragma+ | DeprPragmaDecl l [([Name l], String)]+ -- ^ A DEPRECATED pragma+ | WarnPragmaDecl l [([Name l], String)]+ -- ^ A WARNING pragma+ | InlineSig l Bool (Maybe (Activation l)) (QName l)+ -- ^ An INLINE pragma+ | InlineConlikeSig l (Maybe (Activation l)) (QName l)+ -- ^ An INLINE CONLIKE pragma+ | SpecSig l (Maybe (Activation l)) (QName l) [Type l]+ -- ^ A SPECIALISE pragma+ | SpecInlineSig l Bool (Maybe (Activation l)) (QName l) [Type l]+ -- ^ A SPECIALISE INLINE pragma+ | InstSig l (InstRule l)+ -- ^ A SPECIALISE instance pragma+ | AnnPragma l (Annotation l)+ -- ^ An ANN pragma+ | MinimalPragma l (Maybe (BooleanFormula l))+ -- ^ A MINIMAL pragma+ | RoleAnnotDecl l (QName l) [Role l]+ -- ^ A role annotation+ | CompletePragma l [Name l] (Maybe (QName l))+ -- ^ A COMPLETE pragma+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++data PatternSynDirection l =+ Unidirectional -- ^ A unidirectional pattern synonym with "<-"+ | ImplicitBidirectional -- ^ A bidirectional pattern synonym with "="+ | ExplicitBidirectional l [Decl l] -- ^ A birectional pattern synonym with the construction specified.+ deriving (Eq, Ord, Show, Data, Typeable, Foldable, Traversable, Functor, Generic)++-- | A type equation as found in closed type families.+data TypeEqn l = TypeEqn l (Type l) (Type l) deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An annotation through an ANN pragma.+data Annotation l+ = Ann l (Name l) (Exp l)+ -- ^ An annotation for a declared name.+ | TypeAnn l (Name l) (Exp l)+ -- ^ An annotation for a declared type.+ | ModuleAnn l (Exp l)+ -- ^ An annotation for the defining module.+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A boolean formula for MINIMAL pragmas.+data BooleanFormula l+ = VarFormula l (Name l) -- ^ A variable.+ | AndFormula l [BooleanFormula l] -- ^ And boolean formulas.+ | OrFormula l [BooleanFormula l] -- ^ Or boolean formulas.+ | ParenFormula l (BooleanFormula l) -- ^ Parenthesized boolean formulas.+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++data Role l+ = Nominal l+ | Representational l+ | Phantom l+ | RoleWildcard l+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A flag stating whether a declaration is a data or newtype declaration.+data DataOrNew l = DataType l | NewType l+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)+++-- | Injectivity info for injective type families+data InjectivityInfo l = InjectivityInfo l (Name l) [Name l]+ deriving (Eq, Ord, Show, Typeable, Data, Foldable, Traversable, Functor, Generic)++data ResultSig l = KindSig l (Kind l) | TyVarSig l (TyVarBind l)+ deriving (Eq, Ord, Show, Typeable, Data, Foldable, Traversable, Functor, Generic)++-- | The head of a type or class declaration, which consists of the type+-- or class name applied to some type variables+--+-- @class C a b@ is represented as+--+-- >DHApp+-- > ()+-- > (DHApp+-- > () (DHead () (Ident () "C")) (UnkindedVar () (Ident () "a")))+-- > (UnkindedVar () (Ident () "b"))+--+-- (where the annotation type @l@ is instantiated with @()@)+--+-- @class (a :< b) c@ is represented as+--+-- >DHApp+-- > ()+-- > (DHParen+-- > ()+-- > (DHApp+-- > ()+-- > (DHInfix () (UnkindedVar () (Ident () "a")) (Symbol () ":<"))+-- > (UnkindedVar () (Ident () "b"))))+-- > (UnkindedVar () (Ident () "c"))+data DeclHead l+ = DHead l (Name l) -- ^ type or class name+ | DHInfix l (TyVarBind l) (Name l) -- ^ infix application of the type/class name to the left operand+ | DHParen l (DeclHead l) -- ^ parenthesized declaration head+ | DHApp l (DeclHead l) (TyVarBind l) -- ^ application to one more type variable+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The instance declaration rule, which is, roughly, the part of the instance declaration before the @where@ keyword.+--+-- Example: @instance Ord a => Ord (Maybe a)@ is represented as+--+-- >IRule+-- > ()+-- > Nothing+-- > (Just+-- > (CxSingle+-- > ()+-- > (ClassA+-- > () (UnQual () (Ident () "Ord")) [ TyVar () (Ident () "a") ])))+-- > (IHApp+-- > ()+-- > (IHCon () (UnQual () (Ident () "Ord")))+-- > (TyParen+-- > ()+-- > (TyApp+-- > ()+-- > (TyCon () (UnQual () (Ident () "Maybe")))+-- > (TyVar () (Ident () "a")))))+--+-- An optional explicit forall after @instance@ is supported:+-- @instance forall a . Ord a => Ord (Maybe a) where@ becomes+--+-- >IRule+-- > ()+-- > (Just [ UnkindedVar () (Ident () "a") ])+-- > ...+data InstRule l+ = IRule l (Maybe [TyVarBind l]) (Maybe (Context l)) (InstHead l)+ | IParen l (InstRule l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- See bugs #7 and #31 for more details and use cases for the rationale+-- of the split. DeclOrInstHead should be used by DeclHead as the name implies.++-- | The instance head. The split between rule/head allow us to represent+-- @instance (Bounded a => Bounded [a]) where@ faithfully.+--+-- The structure of 'InstHead' follows one of 'DeclHead'.+--+-- For example, @instance C (Maybe a) Int where@ is represented as+--+-- >IHApp+-- > ()+-- > (IHApp+-- > ()+-- > (IHCon () (UnQual () (Ident () "C")))+-- > (TyParen+-- > ()+-- > (TyApp+-- > ()+-- > (TyCon () (UnQual () (Ident () "Maybe")))+-- > (TyVar () (Ident () "a")))))+-- > (TyCon () (UnQual () (Ident () "Int")))))+data InstHead l+ = IHCon l (QName l) -- ^ type or class name+ | IHInfix l (Type l) (QName l) -- ^ infix application of the type/class name to the left operand+ | IHParen l (InstHead l) -- ^ parenthesized instance head+ | IHApp l (InstHead l) (Type l) -- ^ application to one more type+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A deriving clause following a data type declaration.+data Deriving l = Deriving l (Maybe (DerivStrategy l)) [InstRule l]+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Which technique the user explicitly requested when deriving an instance.+data DerivStrategy l+ = DerivStock l -- ^ GHC's \"standard\" strategy, which is to implement a+ -- custom instance for the data type. This only works for+ -- certain types that GHC knows about (e.g., 'Eq', 'Show',+ -- 'Functor' when @-XDeriveFunctor@ is enabled, etc.)+ | DerivAnyclass l -- ^ @-XDeriveAnyClass@+ | DerivNewtype l -- ^ @-XGeneralizedNewtypeDeriving@+ | DerivVia l (Type l) -- ^ @-XDerivingVia@+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A binding group inside a @let@ or @where@ clause.+data Binds l+ = BDecls l [Decl l] -- ^ An ordinary binding group+ | IPBinds l [IPBind l] -- ^ A binding group for implicit parameters+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A binding of an implicit parameter.+data IPBind l = IPBind l (IPName l) (Exp l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Clauses of a function binding.+data Match l+ = Match l (Name l) [Pat l] (Rhs l) {-where-} (Maybe (Binds l))+ -- ^ A clause defined with prefix notation, i.e. the function name+ -- followed by its argument patterns, the right-hand side and an+ -- optional where clause.+ | InfixMatch l (Pat l) (Name l) [Pat l] (Rhs l) {-where-} (Maybe (Binds l))+ -- ^ A clause defined with infix notation, i.e. first its first argument+ -- pattern, then the function name, then its following argument(s),+ -- the right-hand side and an optional where clause.+ -- Note that there can be more than two arguments to a function declared+ -- infix, hence the list of pattern arguments.+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A single constructor declaration within a data type declaration,+-- which may have an existential quantification binding.+data QualConDecl l+ = QualConDecl l+ {-forall-} (Maybe [TyVarBind l]) {- . -} (Maybe (Context l))+ {- => -} (ConDecl l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Declaration of an ordinary data constructor.+data ConDecl l+ = ConDecl l (Name l) [Type l]+ -- ^ ordinary data constructor+ | InfixConDecl l (Type l) (Name l) (Type l)+ -- ^ infix data constructor+ | RecDecl l (Name l) [FieldDecl l]+ -- ^ record constructor+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Declaration of a (list of) named field(s).+data FieldDecl l = FieldDecl l [Name l] (Type l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)+++-- | A single constructor declaration in a GADT data type declaration.+--+-- If the GADT is declared using the record syntax, e.g.+--+-- >data Ty where+-- > TCon :: { field1 :: Int, field2 :: Bool } -> Ty+--+-- then the fields are stored as a list of 'FieldDecl's, and the final type+-- (@Ty@ in the above example) is stored in the last 'Type' field.+--+-- If the GADT is declared using the ordinary syntax, e.g.+--+-- >data Ty where+-- > TCon :: Int -> Bool -> Ty+--+-- then @'Maybe' ['FieldDecl' l]@ is 'Nothing', and the whole constructor's+-- type (such as @Int -> Bool -> Ty@) is stored in the last 'Type' field.+data GadtDecl l+ = GadtDecl l (Name l)+ {-forall-} (Maybe [TyVarBind l]) {- . -} (Maybe (Context l))+ {- => -} (Maybe [FieldDecl l]) (Type l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Declarations inside a class declaration.+data ClassDecl l+ = ClsDecl l (Decl l)+ -- ^ ordinary declaration+ | ClsDataFam l (Maybe (Context l)) (DeclHead l) (Maybe (ResultSig l))+ -- ^ declaration of an associated data type+ | ClsTyFam l (DeclHead l) (Maybe (ResultSig l)) (Maybe (InjectivityInfo l))+ -- ^ declaration of an associated type synonym+ | ClsTyDef l (TypeEqn l)+ -- ^ default choice for an associated type synonym+ | ClsDefSig l (Name l) (Type l)+ -- ^ default signature+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Declarations inside an instance declaration.+data InstDecl l+ = InsDecl l (Decl l)+ -- ^ ordinary declaration+ | InsType l (Type l) (Type l)+ -- ^ an associated type definition+ | InsData l (DataOrNew l) (Type l) [QualConDecl l] [Deriving l]+ -- ^ an associated data type implementation+ | InsGData l (DataOrNew l) (Type l) (Maybe (Kind l)) [GadtDecl l] [Deriving l]+ -- ^ an associated data type implemented using GADT style+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The type of a constructor argument or field, optionally including+-- a strictness annotation.+data BangType l+ = BangedTy l -- ^ strict component, marked with \"@!@\"+ | LazyTy l -- ^ lazy component, marked with \"@~@\"+ | NoStrictAnnot l -- ^ No strictness information+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++data Unpackedness l+ = Unpack l -- ^ \"@{-\# UNPACK \#-}@\"+ | NoUnpack l -- ^ \"@{-\# NOUNPACK \#-}@\"+ | NoUnpackPragma l -- ^ No unpack pragma+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The right hand side of a function binding, pattern binding, or a case+-- alternative.+data Rhs l+ = UnGuardedRhs l (Exp l) -- ^ unguarded right hand side (/exp/)+ | GuardedRhss l [GuardedRhs l]+ -- ^ guarded right hand side (/gdrhs/)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A guarded right hand side @|@ /stmts/ @=@ /exp/, or @|@ /stmts/ @->@ /exp/+-- for case alternatives.+-- The guard is a series of statements when using pattern guards,+-- otherwise it will be a single qualifier expression.+data GuardedRhs l+ = GuardedRhs l [Stmt l] (Exp l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A type qualified with a context.+-- An unqualified type has an empty context.+data Type l+ = TyForall l+ (Maybe [TyVarBind l])+ (Maybe (Context l))+ (Type l) -- ^ qualified type+ | TyStar l -- ^ @*@, the type of types+ | TyFun l (Type l) (Type l) -- ^ function type+ | TyTuple l Boxed [Type l] -- ^ tuple type, possibly boxed+ | TyUnboxedSum l [Type l] -- ^ unboxed tuple type+ | TyList l (Type l) -- ^ list syntax, e.g. [a], as opposed to [] a+ | TyParArray l (Type l) -- ^ parallel array syntax, e.g. [:a:]+ | TyApp l (Type l) (Type l) -- ^ application of a type constructor+ | TyVar l (Name l) -- ^ type variable+ | TyCon l (QName l) -- ^ named type or type constructor+ | TyParen l (Type l) -- ^ type surrounded by parentheses+ | TyInfix l (Type l) (MaybePromotedName l)+ (Type l) -- ^ infix type constructor+ | TyKind l (Type l) (Kind l) -- ^ type with explicit kind signature+ | TyPromoted l (Promoted l) -- ^ @'K@, a promoted data type (-XDataKinds).+ | TyEquals l (Type l) (Type l) -- ^ type equality predicate enabled by ConstraintKinds+ | TySplice l (Splice l) -- ^ template haskell splice type+ | TyBang l (BangType l) (Unpackedness l) (Type l) -- ^ Strict type marked with \"@!@\" or type marked with UNPACK pragma.+ | TyWildCard l (Maybe (Name l)) -- ^ Either an anonymous of named type wildcard+ | TyQuasiQuote l String String -- ^ @[$/name/| /string/ |]@+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++data MaybePromotedName l = PromotedName l (QName l) | UnpromotedName l (QName l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Bools here are True if there was a leading quote which may be+-- left out. For example @'[k1,k2]@ means the same thing as @[k1,k2]@.+data Promoted l+ = PromotedInteger l Integer String -- ^ parsed value and raw string+ | PromotedString l String String -- ^ parsed value and raw string+ | PromotedCon l Bool (QName l)+ | PromotedList l Bool [Type l]+ | PromotedTuple l [Type l]+ | PromotedUnit l+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Flag denoting whether a tuple is boxed or unboxed.+data Boxed = Boxed | Unboxed+ deriving (Eq,Ord,Show,Typeable,Data,Generic)++-- | A type variable declaration, optionally with an explicit kind annotation.+data TyVarBind l+ = KindedVar l (Name l) (Kind l) -- ^ variable binding with kind annotation+ | UnkindedVar l (Name l) -- ^ ordinary variable binding+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An explicit kind annotation.+type Kind = Type+++-- | A functional dependency, given on the form+-- l1 l2 ... ln -> r2 r3 .. rn+data FunDep l+ = FunDep l [Name l] [Name l]+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A context is a set of assertions+data Context l+ = CxSingle l (Asst l)+ | CxTuple l [Asst l]+ | CxEmpty l+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Class assertions.+data Asst l+ = TypeA l (Type l) -- ^ type assertion+ | IParam l (IPName l) (Type l) -- ^ implicit parameter assertion+ | ParenA l (Asst l) -- ^ parenthesised class assertion+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | /literal/+-- Values of this type hold the abstract value of the literal, along with the+-- precise string representation used. For example, @10@, @0o12@ and @0xa@+-- have the same value representation, but each carry a different string representation.+data Literal l+ = Char l Char String -- ^ character literal+ | String l String String -- ^ string literal+ | Int l Integer String -- ^ integer literal+ | Frac l Rational String -- ^ floating point literal+ | PrimInt l Integer String -- ^ unboxed integer literal+ | PrimWord l Integer String -- ^ unboxed word literal+ | PrimFloat l Rational String -- ^ unboxed float literal+ | PrimDouble l Rational String -- ^ unboxed double literal+ | PrimChar l Char String -- ^ unboxed character literal+ | PrimString l String String -- ^ unboxed string literal+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An indication whether a literal pattern has been negated or not.+data Sign l+ = Signless l+ | Negative l+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Haskell expressions.+data Exp l+ = Var l (QName l) -- ^ variable+ | OverloadedLabel l String -- ^ Overloaded label #foo+ | IPVar l (IPName l) -- ^ implicit parameter variable+ | Con l (QName l) -- ^ data constructor+ | Lit l (Literal l) -- ^ literal constant+ | InfixApp l (Exp l) (QOp l) (Exp l) -- ^ infix application+ | App l (Exp l) (Exp l) -- ^ ordinary application+ | NegApp l (Exp l) -- ^ negation expression @-/exp/@ (unary minus)+ | Lambda l [Pat l] (Exp l) -- ^ lambda expression+ | Let l (Binds l) (Exp l) -- ^ local declarations with @let@ ... @in@ ...+ | If l (Exp l) (Exp l) (Exp l) -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/+ | MultiIf l [GuardedRhs l] -- ^ @if@ @|@ /stmts/ @->@ /exp/ ...+ | Case l (Exp l) [Alt l] -- ^ @case@ /exp/ @of@ /alts/+ | Do l [Stmt l] -- ^ @do@-expression:+ -- the last statement in the list+ -- should be an expression.+ | MDo l [Stmt l] -- ^ @mdo@-expression+ | Tuple l Boxed [Exp l] -- ^ tuple expression+ | UnboxedSum l Int Int (Exp l) -- ^ unboxed sum+ | TupleSection l Boxed [Maybe (Exp l)] -- ^ tuple section expression, e.g. @(,,3)@+ | List l [Exp l] -- ^ list expression+ | ParArray l [Exp l] -- ^ parallel array expression+ | Paren l (Exp l) -- ^ parenthesised expression+ | LeftSection l (Exp l) (QOp l) -- ^ left section @(@/exp/ /qop/@)@+ | RightSection l (QOp l) (Exp l) -- ^ right section @(@/qop/ /exp/@)@+ | RecConstr l (QName l) [FieldUpdate l] -- ^ record construction expression+ | RecUpdate l (Exp l) [FieldUpdate l] -- ^ record update expression+ | EnumFrom l (Exp l) -- ^ unbounded arithmetic sequence,+ -- incrementing by 1: @[from ..]@+ | EnumFromTo l (Exp l) (Exp l) -- ^ bounded arithmetic sequence,+ -- incrementing by 1 @[from .. to]@+ | EnumFromThen l (Exp l) (Exp l) -- ^ unbounded arithmetic sequence,+ -- with first two elements given @[from, then ..]@+ | EnumFromThenTo l (Exp l) (Exp l) (Exp l)+ -- ^ bounded arithmetic sequence,+ -- with first two elements given @[from, then .. to]@+ | ParArrayFromTo l (Exp l) (Exp l) -- ^ Parallel array bounded arithmetic sequence,+ -- incrementing by 1 @[:from .. to:]@+ | ParArrayFromThenTo l (Exp l) (Exp l) (Exp l)+ -- ^ bounded arithmetic sequence,+ -- with first two elements given @[:from, then .. to:]@+ | ListComp l (Exp l) [QualStmt l] -- ^ ordinary list comprehension+ | ParComp l (Exp l) [[QualStmt l]] -- ^ parallel list comprehension+ | ParArrayComp l (Exp l) [[QualStmt l]] -- ^ parallel array comprehension+ | ExpTypeSig l (Exp l) (Type l) -- ^ expression with explicit type signature++ | VarQuote l (QName l) -- ^ @'x@ for template haskell reifying of expressions+ | TypQuote l (QName l) -- ^ @''T@ for template haskell reifying of types+ | BracketExp l (Bracket l) -- ^ template haskell bracket expression+ | SpliceExp l (Splice l) -- ^ template haskell splice expression+ | QuasiQuote l String String -- ^ quasi-quotaion: @[$/name/| /string/ |]@+ | TypeApp l (Type l) -- ^ Visible type application++-- Hsx+ | XTag l (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]+ -- ^ xml element, with attributes and children+ | XETag l (XName l) [XAttr l] (Maybe (Exp l))+ -- ^ empty xml element, with attributes+ | XPcdata l String -- ^ PCDATA child element+ | XExpTag l (Exp l) -- ^ escaped haskell expression inside xml+ | XChildTag l [Exp l] -- ^ children of an xml element+++-- Pragmas+ | CorePragma l String (Exp l) -- ^ CORE pragma+ | SCCPragma l String (Exp l) -- ^ SCC pragma+ | GenPragma l String (Int, Int) (Int, Int) (Exp l)+ -- ^ GENERATED pragma++-- Arrows+ | Proc l (Pat l) (Exp l) -- ^ arrows proc: @proc@ /pat/ @->@ /exp/+ | LeftArrApp l (Exp l) (Exp l) -- ^ arrow application (from left): /exp/ @-<@ /exp/+ | RightArrApp l (Exp l) (Exp l) -- ^ arrow application (from right): /exp/ @>-@ /exp/+ | LeftArrHighApp l (Exp l) (Exp l) -- ^ higher-order arrow application (from left): /exp/ @-<<@ /exp/+ | RightArrHighApp l (Exp l) (Exp l) -- ^ higher-order arrow application (from right): /exp/ @>>-@ /exp/+ | ArrOp l (Exp l) -- ^ arrow control operators: @(| /exp/ |)@++-- LambdaCase+ | LCase l [Alt l] -- ^ @\case@ /alts/++ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The name of an xml element or attribute,+-- possibly qualified with a namespace.+data XName l+ = XName l String -- <name ...+ | XDomName l String String -- <dom:name ...+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An xml attribute, which is a name-expression pair.+data XAttr l = XAttr l (XName l) (Exp l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A template haskell bracket expression.+data Bracket l+ = ExpBracket l (Exp l) -- ^ expression bracket: @[| ... |]@+ | TExpBracket l (Exp l) -- ^ typed expression bracket: @[|| ... ||]@+ | PatBracket l (Pat l) -- ^ pattern bracket: @[p| ... |]@+ | TypeBracket l (Type l) -- ^ type bracket: @[t| ... |]@+ | DeclBracket l [Decl l] -- ^ declaration bracket: @[d| ... |]@+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A template haskell splice expression+data Splice l+ = IdSplice l String -- ^ variable splice: @$var@+ | TIdSplice l String -- ^ typed variable splice: @$$var@+ | ParenSplice l (Exp l) -- ^ parenthesised expression splice: @$(/exp/)@+ | TParenSplice l (Exp l) -- ^ parenthesised typed expression splice: @$$(/exp/)@+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The safety of a foreign function call.+data Safety l+ = PlayRisky l -- ^ unsafe+ | PlaySafe l Bool -- ^ safe ('False') or threadsafe ('True')+ | PlayInterruptible l -- ^ interruptible+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The calling convention of a foreign function call.+data CallConv l+ = StdCall l+ | CCall l+ | CPlusPlus l+ | DotNet l+ | Jvm l+ | Js l+ | JavaScript l+ | CApi l+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A top level options pragma, preceding the module header.+data ModulePragma l+ = LanguagePragma l [Name l] -- ^ LANGUAGE pragma+ | OptionsPragma l (Maybe Tool) String+ -- ^ OPTIONS pragma, possibly qualified with a tool, e.g. OPTIONS_GHC+ | AnnModulePragma l (Annotation l)+ -- ^ ANN pragma with module scope+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Recognised tools for OPTIONS pragmas.+data Tool = GHC | HUGS | NHC98 | YHC | HADDOCK | UnknownTool String+ deriving (Eq,Ord,Show,Typeable,Data,Generic)++-- | Recognised overlaps for overlap pragmas.+data Overlap l+ = NoOverlap l -- ^ NO_OVERLAP pragma+ | Overlap l -- ^ OVERLAP pragma+ | Overlapping l+ | Overlaps l+ | Overlappable l+ | Incoherent l -- ^ INCOHERENT pragma+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Activation clause of a RULES pragma.+data Activation l+ = ActiveFrom l Int+ | ActiveUntil l Int+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | The body of a RULES pragma.+data Rule l+ = Rule l String (Maybe (Activation l)) (Maybe [RuleVar l]) (Exp l) (Exp l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Variables used in a RULES pragma, optionally annotated with types+data RuleVar l+ = RuleVar l (Name l)+ | TypedRuleVar l (Name l) (Type l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | Warning text to optionally use in the module header of e.g.+-- a deprecated module.+data WarningText l+ = DeprText l String+ | WarnText l String+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)+++-- | A pattern, to be matched against a value.+data Pat l+ = PVar l (Name l) -- ^ variable+ | PLit l (Sign l) (Literal l) -- ^ literal constant+ | PNPlusK l (Name l) Integer -- ^ n+k pattern+ | PInfixApp l (Pat l) (QName l) (Pat l) -- ^ pattern with an infix data constructor+ | PApp l (QName l) [Pat l] -- ^ data constructor and argument patterns+ | PTuple l Boxed [Pat l] -- ^ tuple pattern+ | PUnboxedSum l Int Int (Pat l) -- ^ unboxed sum+ | PList l [Pat l] -- ^ list pattern+ | PParen l (Pat l) -- ^ parenthesized pattern+ | PRec l (QName l) [PatField l] -- ^ labelled pattern, record style+ | PAsPat l (Name l) (Pat l) -- ^ @\@@-pattern+ | PWildCard l -- ^ wildcard pattern: @_@+ | PIrrPat l (Pat l) -- ^ irrefutable pattern: @~/pat/@+ | PatTypeSig l (Pat l) (Type l) -- ^ pattern with type signature+ | PViewPat l (Exp l) (Pat l) -- ^ view patterns of the form @(/exp/ -> /pat/)@+ | PRPat l [RPat l] -- ^ regular list pattern+ | PXTag l (XName l) [PXAttr l] (Maybe (Pat l)) [Pat l]+ -- ^ XML element pattern+ | PXETag l (XName l) [PXAttr l] (Maybe (Pat l))+ -- ^ XML singleton element pattern+ | PXPcdata l String -- ^ XML PCDATA pattern+ | PXPatTag l (Pat l) -- ^ XML embedded pattern+ | PXRPats l [RPat l] -- ^ XML regular list pattern+ | PSplice l (Splice l) -- ^ template haskell splice pattern+ | PQuasiQuote l String String -- ^ quasi quote pattern: @[$/name/| /string/ |]@+ | PBangPat l (Pat l) -- ^ strict (bang) pattern: @f !x = ...@+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An XML attribute in a pattern.+data PXAttr l = PXAttr l (XName l) (Pat l)+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A regular pattern operator.+data RPatOp l+ = RPStar l -- ^ @*@ = 0 or more+ | RPStarG l -- ^ @*!@ = 0 or more, greedy+ | RPPlus l -- ^ @+@ = 1 or more+ | RPPlusG l -- ^ @+!@ = 1 or more, greedy+ | RPOpt l -- ^ @?@ = 0 or 1+ | RPOptG l -- ^ @?!@ = 0 or 1, greedy+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An entity in a regular pattern.+data RPat l+ = RPOp l (RPat l) (RPatOp l) -- ^ operator pattern, e.g. pat*+ | RPEither l (RPat l) (RPat l) -- ^ choice pattern, e.g. (1 | 2)+ | RPSeq l [RPat l] -- ^ sequence pattern, e.g. (| 1, 2, 3 |)+ | RPGuard l (Pat l) [Stmt l] -- ^ guarded pattern, e.g. (| p | p < 3 |)+ | RPCAs l (Name l) (RPat l) -- ^ non-linear variable binding, e.g. (foo\@:(1 | 2))*+ | RPAs l (Name l) (RPat l) -- ^ linear variable binding, e.g. foo\@(1 | 2)+ | RPParen l (RPat l) -- ^ parenthesised pattern, e.g. (2*)+ | RPPat l (Pat l) -- ^ an ordinary pattern+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An /fpat/ in a labeled record pattern.+data PatField l+ = PFieldPat l (QName l) (Pat l) -- ^ ordinary label-pattern pair+ | PFieldPun l (QName l) -- ^ record field pun+ | PFieldWildcard l -- ^ record field wildcard+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A statement, representing both a /stmt/ in a @do@-expression,+-- an ordinary /qual/ in a list comprehension, as well as a /stmt/+-- in a pattern guard.+data Stmt l+ = Generator l (Pat l) (Exp l)+ -- ^ a generator: /pat/ @<-@ /exp/+ | Qualifier l (Exp l) -- ^ an /exp/ by itself: in a @do@-expression,+ -- an action whose result is discarded;+ -- in a list comprehension and pattern guard,+ -- a guard expression+ | LetStmt l (Binds l) -- ^ local bindings+ | RecStmt l [Stmt l] -- ^ a recursive binding group for arrows+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | A general /transqual/ in a list comprehension,+-- which could potentially be a transform of the kind+-- enabled by TransformListComp.+data QualStmt l+ = QualStmt l (Stmt l) -- ^ an ordinary statement+ | ThenTrans l (Exp l) -- ^ @then@ /exp/+ | ThenBy l (Exp l) (Exp l) -- ^ @then@ /exp/ @by@ /exp/+ | GroupBy l (Exp l) -- ^ @then@ @group@ @by@ /exp/+ | GroupUsing l (Exp l) -- ^ @then@ @group@ @using@ /exp/+ | GroupByUsing l (Exp l) (Exp l) -- ^ @then@ @group@ @by@ /exp/ @using@ /exp/+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An /fbind/ in a labeled construction or update expression.+data FieldUpdate l+ = FieldUpdate l (QName l) (Exp l) -- ^ ordinary label-expresion pair+ | FieldPun l (QName l) -- ^ record field pun+ | FieldWildcard l -- ^ record field wildcard+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-- | An /alt/ alternative in a @case@ expression.+data Alt l+ = Alt l (Pat l) (Rhs l) (Maybe (Binds l))+ deriving (Eq,Ord,Show,Typeable,Data,Foldable,Traversable,Functor,Generic)++-----------------------------------------------------------------------------+-- Builtin names.++prelude_mod, main_mod :: l -> ModuleName l+prelude_mod l = ModuleName l "Prelude"+main_mod l = ModuleName l "Main"++main_name :: l -> Name l+main_name l = Ident l "main"++unit_con_name :: l -> QName l+unit_con_name l = Special l (UnitCon l)++tuple_con_name :: l -> Boxed -> Int -> QName l+tuple_con_name l b i = Special l (TupleCon l b (i+1))++list_con_name :: l -> QName l+list_con_name l = Special l (ListCon l)++list_cons_name :: l -> QName l+list_cons_name l = Special l (Cons l)++unboxed_singleton_con_name :: l -> QName l+unboxed_singleton_con_name l = Special l (UnboxedSingleCon l)++unit_con :: l -> Exp l+unit_con l = Con l $ unit_con_name l++tuple_con :: l -> Boxed -> Int -> Exp l+tuple_con l b i = Con l (tuple_con_name l b i)++unboxed_singleton_con :: l -> Exp l+unboxed_singleton_con l = Con l (unboxed_singleton_con_name l)++as_name, qualified_name, hiding_name, minus_name, bang_name, dot_name, star_name :: l -> Name l+as_name l = Ident l "as"+qualified_name l = Ident l "qualified"+hiding_name l = Ident l "hiding"+minus_name l = Symbol l "-"+bang_name l = Symbol l "!"+dot_name l = Symbol l "."+star_name l = Symbol l "*"++hole_name :: l -> QName l+hole_name l = Special l (ExprHole l)++export_name, safe_name, unsafe_name, interruptible_name, threadsafe_name,+ stdcall_name, ccall_name, cplusplus_name, dotnet_name,+ jvm_name, js_name, javascript_name, capi_name, forall_name,+ family_name, role_name, stock_name, anyclass_name, via_name :: l -> Name l+export_name l = Ident l "export"+safe_name l = Ident l "safe"+unsafe_name l = Ident l "unsafe"+interruptible_name l = Ident l "interruptible"+threadsafe_name l = Ident l "threadsafe"+stdcall_name l = Ident l "stdcall"+ccall_name l = Ident l "ccall"+cplusplus_name l = Ident l "cplusplus"+dotnet_name l = Ident l "dotnet"+jvm_name l = Ident l "jvm"+js_name l = Ident l "js"+javascript_name l = Ident l "javascript"+capi_name l = Ident l "capi"+forall_name l = Ident l "forall"+family_name l = Ident l "family"+role_name l = Ident l "role"+stock_name l = Ident l "stock"+anyclass_name l = Ident l "anyclass"+via_name l = Ident l "via"++unit_tycon_name, fun_tycon_name, list_tycon_name, unboxed_singleton_tycon_name :: l -> QName l+unit_tycon_name l = unit_con_name l+fun_tycon_name l = Special l (FunCon l)+list_tycon_name l = Special l (ListCon l)+unboxed_singleton_tycon_name l = Special l (UnboxedSingleCon l)++tuple_tycon_name :: l -> Boxed -> Int -> QName l+tuple_tycon_name l b i = tuple_con_name l b i++unit_tycon, fun_tycon, list_tycon, unboxed_singleton_tycon :: l -> Type l+unit_tycon l = TyCon l $ unit_tycon_name l+fun_tycon l = TyCon l $ fun_tycon_name l+list_tycon l = TyCon l $ list_tycon_name l+unboxed_singleton_tycon l = TyCon l $ unboxed_singleton_tycon_name l++tuple_tycon :: l -> Boxed -> Int -> Type l+tuple_tycon l b i = TyCon l (tuple_tycon_name l b i)++-----------------------------------------------------------------------------+-- AST traversal, boiler-plate style++-- | Test if two AST elements are equal modulo annotations.+(=~=) :: (Annotated a, Eq (a ())) => a l1 -> a l2 -> Bool+a =~= b = fmap (const ()) a == fmap (const ()) b++-----------------------------------------------------------------------------+-- Reading annotations++-- | AST nodes are annotated, and this class allows manipulation of the annotations.+class Functor ast => Annotated ast where+ -- | Retrieve the annotation of an AST node.+ ann :: ast l -> l+ -- | Change the annotation of an AST node. Note that only the annotation of+ -- the node itself is affected, and not the annotations of any child nodes.+ -- if all nodes in the AST tree are to be affected, use 'fmap'.+ amap :: (l -> l) -> ast l -> ast l++instance Annotated ModuleName where+ ann (ModuleName l _) = l+ amap f (ModuleName l n) = ModuleName (f l) n++instance Annotated SpecialCon where+ ann sc = case sc of+ UnitCon l -> l+ ListCon l -> l+ FunCon l -> l+ TupleCon l _ _ -> l+ Cons l -> l+ UnboxedSingleCon l -> l+ ExprHole l -> l+ amap = fmap++instance Annotated QName where+ ann qn = case qn of+ Qual l _ _ -> l+ UnQual l _ -> l+ Special l _ -> l+ amap f qn = case qn of+ Qual l mn n -> Qual (f l) mn n+ UnQual l n -> UnQual (f l) n+ Special l sc -> Special (f l) sc++instance Annotated Name where+ ann (Ident l _) = l+ ann (Symbol l _) = l+ amap = fmap++instance Annotated IPName where+ ann (IPDup l _) = l+ ann (IPLin l _) = l+ amap = fmap++instance Annotated QOp where+ ann (QVarOp l _) = l+ ann (QConOp l _) = l+ amap f (QVarOp l qn) = QVarOp (f l) qn+ amap f (QConOp l qn) = QConOp (f l) qn++instance Annotated Op where+ ann (VarOp l _) = l+ ann (ConOp l _) = l+ amap f (VarOp l n) = VarOp (f l) n+ amap f (ConOp l n) = ConOp (f l) n++instance Annotated CName where+ ann (VarName l _) = l+ ann (ConName l _) = l+ amap f (VarName l n) = VarName (f l) n+ amap f (ConName l n) = ConName (f l) n++instance Annotated Module where+ ann (Module l _ _ _ _) = l+ ann (XmlPage l _ _ _ _ _ _) = l+ ann (XmlHybrid l _ _ _ _ _ _ _ _) = l++ amap f (Module l mmh ops iss dcls) =+ Module (f l) mmh ops iss dcls+ amap f (XmlPage l mn os xn xas me es) =+ XmlPage (f l) mn os xn xas me es+ amap f (XmlHybrid l mmh ops iss dcls xn xas me es) =+ XmlHybrid (f l) mmh ops iss dcls xn xas me es++instance Annotated ModuleHead where+ ann (ModuleHead l _ _ _) = l+ amap f (ModuleHead l n mwt mesl) = ModuleHead (f l) n mwt mesl++instance Annotated ExportSpecList where+ ann (ExportSpecList l _) = l+ amap f (ExportSpecList l ess) = ExportSpecList (f l) ess++instance Annotated ExportSpec where+ ann es = case es of+ EVar l _ -> l+ EAbs l _ _ -> l+ EThingWith l _ _ _ -> l+ EModuleContents l _ -> l+ amap f es = case es of+ EVar l qn -> EVar (f l) qn+ EAbs l n qn -> EAbs (f l) n qn+ EThingWith l wc qn cns -> EThingWith (f l) wc qn cns+ EModuleContents l mn -> EModuleContents (f l) mn++instance Annotated EWildcard where+ ann ewc = case ewc of+ NoWildcard l -> l+ EWildcard l _ -> l+ amap f ewc = case ewc of+ NoWildcard l -> NoWildcard (f l)+ EWildcard l n -> EWildcard (f l) n++++instance Annotated Namespace where+ ann es = case es of+ NoNamespace l -> l+ TypeNamespace l -> l+ PatternNamespace l -> l+ amap f es = case es of+ NoNamespace l -> NoNamespace (f l)+ TypeNamespace l -> TypeNamespace (f l)+ PatternNamespace l -> PatternNamespace (f l)++instance Annotated ImportDecl where+ ann (ImportDecl l _ _ _ _ _ _ _) = l+ amap f (ImportDecl l mn qual src safe pkg mmn mis) =+ ImportDecl (f l) mn qual src safe pkg mmn mis++instance Annotated ImportSpecList where+ ann (ImportSpecList l _ _) = l+ amap f (ImportSpecList l b iss) = ImportSpecList (f l) b iss++instance Annotated ImportSpec where+ ann is = case is of+ IVar l _ -> l+ IAbs l _ _ -> l+ IThingAll l _ -> l+ IThingWith l _ _ -> l+ amap f is = case is of+ IVar l n -> IVar (f l) n+ IAbs l ns n -> IAbs (f l) ns n+ IThingAll l n -> IThingAll (f l) n+ IThingWith l n cns -> IThingWith (f l) n cns++instance Annotated Assoc where+ ann (AssocNone l) = l+ ann (AssocLeft l) = l+ ann (AssocRight l) = l+ amap = fmap++instance Annotated Deriving where+ ann (Deriving l _ _) = l+ amap f (Deriving l mds ihs) = Deriving (f l) mds ihs++instance Annotated DerivStrategy where+ ann (DerivStock l) = l+ ann (DerivAnyclass l) = l+ ann (DerivNewtype l) = l+ ann (DerivVia l _) = l++ amap f (DerivStock l) = DerivStock (f l)+ amap f (DerivAnyclass l) = DerivAnyclass (f l)+ amap f (DerivNewtype l) = DerivNewtype (f l)+ amap f (DerivVia l t) = DerivVia (f l) t++instance Annotated TypeEqn where+ ann (TypeEqn l _ _) = l+ amap f (TypeEqn l a b) = TypeEqn (f l) a b++instance Annotated InjectivityInfo where+ ann (InjectivityInfo l _ _) = l+ amap f (InjectivityInfo l to from) = InjectivityInfo (f l) to from++instance Annotated ResultSig where+ ann (KindSig l _) = l+ ann (TyVarSig l _) = l++ amap f (KindSig l k) = KindSig (f l) k+ amap f (TyVarSig l tv) = TyVarSig (f l) tv++instance Annotated Decl where+ ann decl = case decl of+ TypeDecl l _ _ -> l+ TypeFamDecl l _ _ _ -> l+ ClosedTypeFamDecl l _ _ _ _ -> l+ DataDecl l _ _ _ _ _ -> l+ GDataDecl l _ _ _ _ _ _ -> l+ DataFamDecl l _ _ _ -> l+ TypeInsDecl l _ _ -> l+ DataInsDecl l _ _ _ _ -> l+ GDataInsDecl l _ _ _ _ _ -> l+ ClassDecl l _ _ _ _ -> l+ InstDecl l _ _ _ -> l+ DerivDecl l _ _ _ -> l+ InfixDecl l _ _ _ -> l+ DefaultDecl l _ -> l+ SpliceDecl l _ -> l+ TSpliceDecl l _ -> l+ TypeSig l _ _ -> l+ PatSynSig l _ _ _ _ _ _ -> l+ FunBind l _ -> l+ PatBind l _ _ _ -> l+ ForImp l _ _ _ _ _ -> l+ ForExp l _ _ _ _ -> l+ RulePragmaDecl l _ -> l+ DeprPragmaDecl l _ -> l+ WarnPragmaDecl l _ -> l+ InlineSig l _ _ _ -> l+ InlineConlikeSig l _ _ -> l+ SpecSig l _ _ _ -> l+ SpecInlineSig l _ _ _ _ -> l+ InstSig l _ -> l+ AnnPragma l _ -> l+ MinimalPragma l _ -> l+ RoleAnnotDecl l _ _ -> l+ PatSyn l _ _ _ -> l+ CompletePragma l _ _ -> l+ amap f decl = case decl of+ TypeDecl l dh t -> TypeDecl (f l) dh t+ TypeFamDecl l dh mk mi -> TypeFamDecl (f l) dh mk mi+ ClosedTypeFamDecl l dh mk mi eqns -> ClosedTypeFamDecl (f l) dh mk mi eqns+ DataDecl l dn mcx dh cds ders ->+ DataDecl (f l) dn mcx dh cds ders+ GDataDecl l dn mcx dh mk gds ders ->+ GDataDecl (f l) dn mcx dh mk gds ders+ DataFamDecl l mcx dh mk -> DataFamDecl (f l) mcx dh mk+ TypeInsDecl l t1 t2 -> TypeInsDecl (f l) t1 t2+ DataInsDecl l dn t cds ders -> DataInsDecl (f l) dn t cds ders+ GDataInsDecl l dn t mk gds ders -> GDataInsDecl (f l) dn t mk gds ders+ ClassDecl l mcx dh fds cds -> ClassDecl (f l) mcx dh fds cds+ InstDecl l mo ih ids -> InstDecl (f l) mo ih ids+ DerivDecl l mds mo ih -> DerivDecl (f l) mds mo ih+ InfixDecl l a k ops -> InfixDecl (f l) a k ops+ DefaultDecl l ts -> DefaultDecl (f l) ts+ SpliceDecl l sp -> SpliceDecl (f l) sp+ TSpliceDecl l sp -> TSpliceDecl (f l) sp+ TypeSig l ns t -> TypeSig (f l) ns t+ PatSynSig l n dh c1 dh2 c2 t -> PatSynSig (f l) n dh c1 dh2 c2 t+ FunBind l ms -> FunBind (f l) ms+ PatBind l p rhs bs -> PatBind (f l) p rhs bs+ ForImp l cc msf s n t -> ForImp (f l) cc msf s n t+ ForExp l cc s n t -> ForExp (f l) cc s n t+ RulePragmaDecl l rs -> RulePragmaDecl (f l) rs+ DeprPragmaDecl l nss -> DeprPragmaDecl (f l) nss+ WarnPragmaDecl l nss -> WarnPragmaDecl (f l) nss+ InlineSig l b act qn -> InlineSig (f l) b act qn+ InlineConlikeSig l act qn -> InlineConlikeSig (f l) act qn+ SpecSig l act qn ts -> SpecSig (f l) act qn ts+ SpecInlineSig l b act qn ts -> SpecInlineSig (f l) b act qn ts+ InstSig l ih -> InstSig (f l) ih+ AnnPragma l ann' -> AnnPragma (f l) ann'+ MinimalPragma l b -> MinimalPragma (f l) b+ RoleAnnotDecl l t rs -> RoleAnnotDecl (f l) t rs+ PatSyn l p r d -> PatSyn (f l) p r d+ CompletePragma l cs ty -> CompletePragma (f l) cs ty++instance Annotated Role where+ ann r = case r of+ RoleWildcard l -> l+ Representational l -> l+ Phantom l -> l+ Nominal l -> l+ amap f r = case r of+ RoleWildcard l -> RoleWildcard (f l)+ Representational l -> Representational (f l)+ Phantom l -> Phantom (f l)+ Nominal l -> Nominal (f l)++instance Annotated Annotation where+ ann (Ann l _ _) = l+ ann (TypeAnn l _ _) = l+ ann (ModuleAnn l _) = l+ amap f (Ann l n e) = Ann (f l) n e+ amap f (TypeAnn l n e) = TypeAnn (f l) n e+ amap f (ModuleAnn l e) = ModuleAnn (f l) e++instance Annotated BooleanFormula where+ ann (VarFormula l _) = l+ ann (AndFormula l _) = l+ ann (OrFormula l _) = l+ ann (ParenFormula l _) = l+ amap f (VarFormula l n) = VarFormula (f l) n+ amap f (AndFormula l bs) = AndFormula (f l) bs+ amap f (OrFormula l bs) = OrFormula (f l) bs+ amap f (ParenFormula l b) = ParenFormula (f l) b++instance Annotated DataOrNew where+ ann (DataType l) = l+ ann (NewType l) = l+ amap = fmap++instance Annotated DeclHead where+ ann (DHead l _) = l+ ann (DHInfix l _ _) = l+ ann (DHParen l _) = l+ ann (DHApp l _ _) = l+ amap f (DHead l n) = DHead (f l) n+ amap f (DHInfix l tva n) = DHInfix (f l) tva n+ amap f (DHParen l dh) = DHParen (f l) dh+ amap f (DHApp l dh t) = DHApp (f l) dh t++instance Annotated InstRule where+ ann (IRule l _ _ _) = l+ ann (IParen l _) = l+ amap f (IRule l mtv cxt qn) = IRule (f l) mtv cxt qn+ amap f (IParen l ih) = IParen (f l) ih++instance Annotated InstHead where+ ann (IHCon l _) = l+ ann (IHInfix l _ _) = l+ ann (IHParen l _) = l+ ann (IHApp l _ _) = l+ amap f (IHCon l n) = IHCon (f l) n+ amap f (IHInfix l tva n) = IHInfix (f l) tva n+ amap f (IHParen l dh) = IHParen (f l) dh+ amap f (IHApp l dh t) = IHApp (f l) dh t++instance Annotated Binds where+ ann (BDecls l _) = l+ ann (IPBinds l _) = l+ amap f (BDecls l decls) = BDecls (f l) decls+ amap f (IPBinds l ibs) = IPBinds (f l) ibs++instance Annotated IPBind where+ ann (IPBind l _ _) = l+ amap f (IPBind l ipn e) = IPBind (f l) ipn e++instance Annotated Match where+ ann (Match l _ _ _ _) = l+ ann (InfixMatch l _ _ _ _ _) = l+ amap f (Match l n ps rhs bs) = Match (f l) n ps rhs bs+ amap f (InfixMatch l a n b rhs bs) = InfixMatch (f l) a n b rhs bs++instance Annotated QualConDecl where+ ann (QualConDecl l _ _ _) = l+ amap f (QualConDecl l tvs cx cd) = QualConDecl (f l) tvs cx cd++instance Annotated ConDecl where+ ann (ConDecl l _ _) = l+ ann (InfixConDecl l _ _ _) = l+ ann (RecDecl l _ _) = l+ amap f (ConDecl l n bts) = ConDecl (f l) n bts+ amap f (InfixConDecl l ta n tb) = InfixConDecl (f l) ta n tb+ amap f (RecDecl l n fds) = RecDecl (f l) n fds++instance Annotated FieldDecl where+ ann (FieldDecl l _ _) = l+ amap f (FieldDecl l ns t) = FieldDecl (f l) ns t++instance Annotated GadtDecl where+ ann (GadtDecl l _ _ _ _ _) = l+ amap f (GadtDecl l n t1 t2 t3 t4) = GadtDecl (f l) n t1 t2 t3 t4++instance Annotated ClassDecl where+ ann (ClsDecl l _) = l+ ann (ClsDataFam l _ _ _) = l+ ann (ClsTyFam l _ _ _) = l+ ann (ClsTyDef l _) = l+ ann (ClsDefSig l _ _) = l+ amap f (ClsDecl l d) = ClsDecl (f l) d+ amap f (ClsDataFam l mcx dh mk) = ClsDataFam (f l) mcx dh mk+ amap f (ClsTyFam l dh mk mi) = ClsTyFam (f l) dh mk mi+ amap f (ClsTyDef l t ) = ClsTyDef (f l) t+ amap f (ClsDefSig l n t) = ClsDefSig (f l) n t++instance Annotated InstDecl where+ ann id = case id of+ InsDecl l _ -> l+ InsType l _ _ -> l+ InsData l _ _ _ _ -> l+ InsGData l _ _ _ _ _ -> l+-- InsInline l _ _ _ -> l+ amap f id = case id of+ InsDecl l d -> InsDecl (f l) d+ InsType l t1 t2 -> InsType (f l) t1 t2+ InsData l dn t cds ders -> InsData (f l) dn t cds ders+ InsGData l dn t mk gds ders -> InsGData (f l) dn t mk gds ders+-- InsInline l b act qn -> InsInline (f l) b act qn++instance Annotated BangType where+ ann (BangedTy l) = l+ ann (LazyTy l) = l+ ann (NoStrictAnnot l) = l++ amap f (BangedTy l) = BangedTy (f l)+ amap f (LazyTy l) = LazyTy (f l)+ amap f (NoStrictAnnot l) = NoStrictAnnot (f l)++instance Annotated Unpackedness where+ ann (Unpack l) = l+ ann (NoUnpack l) = l+ ann (NoUnpackPragma l) = l++ amap f (Unpack l) = Unpack (f l)+ amap f (NoUnpack l) = Unpack (f l)+ amap f (NoUnpackPragma l) = Unpack (f l)++instance Annotated Rhs where+ ann (UnGuardedRhs l _) = l+ ann (GuardedRhss l _) = l+ amap f (UnGuardedRhs l e) = UnGuardedRhs (f l) e+ amap f (GuardedRhss l grhss) = GuardedRhss (f l) grhss++instance Annotated GuardedRhs where+ ann (GuardedRhs l _ _) = l+ amap f (GuardedRhs l ss e) = GuardedRhs (f l) ss e++instance Annotated Type where+ ann t = case t of+ TyForall l _ _ _ -> l+ TyStar l -> l+ TyFun l _ _ -> l+ TyTuple l _ _ -> l+ TyUnboxedSum l _ -> l+ TyList l _ -> l+ TyParArray l _ -> l+ TyApp l _ _ -> l+ TyVar l _ -> l+ TyCon l _ -> l+ TyParen l _ -> l+ TyInfix l _ _ _ -> l+ TyKind l _ _ -> l+ TyPromoted l _ -> l+ TyEquals l _ _ -> l+ TySplice l _ -> l+ TyBang l _ _ _ -> l+ TyWildCard l _ -> l+ TyQuasiQuote l _ _ -> l+ amap f t1 = case t1 of+ TyForall l mtvs mcx t -> TyForall (f l) mtvs mcx t+ TyStar l -> TyStar (f l)+ TyFun l t1' t2 -> TyFun (f l) t1' t2+ TyTuple l b ts -> TyTuple (f l) b ts+ TyUnboxedSum l s -> TyUnboxedSum (f l) s+ TyList l t -> TyList (f l) t+ TyParArray l t -> TyParArray (f l) t+ TyApp l t1' t2 -> TyApp (f l) t1' t2+ TyVar l n -> TyVar (f l) n+ TyCon l qn -> TyCon (f l) qn+ TyParen l t -> TyParen (f l) t+ TyInfix l ta qn tb -> TyInfix (f l) ta qn tb+ TyKind l t k -> TyKind (f l) t k+ TyPromoted l p -> TyPromoted (f l) p+ TyEquals l a b -> TyEquals (f l) a b+ TySplice l s -> TySplice (f l) s+ TyBang l b u t -> TyBang (f l) b u t+ TyWildCard l n -> TyWildCard (f l) n+ TyQuasiQuote l n s -> TyQuasiQuote (f l) n s++instance Annotated MaybePromotedName where+ ann t = case t of+ PromotedName l _ -> l+ UnpromotedName l _ -> l+ amap f tl = case tl of+ PromotedName l q -> PromotedName (f l) q+ UnpromotedName l q -> UnpromotedName (f l) q++instance Annotated TyVarBind where+ ann (KindedVar l _ _) = l+ ann (UnkindedVar l _) = l+ amap f (KindedVar l n k) = KindedVar (f l) n k+ amap f (UnkindedVar l n) = UnkindedVar (f l) n++instance Annotated FunDep where+ ann (FunDep l _ _) = l+ amap f (FunDep l ns1 ns2) = FunDep (f l) ns1 ns2++instance Annotated Context where+ ann (CxSingle l _) = l+ ann (CxTuple l _) = l+ ann (CxEmpty l) = l+ amap f (CxSingle l asst ) = CxSingle (f l) asst+ amap f (CxTuple l assts) = CxTuple (f l) assts+ amap f (CxEmpty l) = CxEmpty (f l)++instance Annotated Asst where+ ann asst = case asst of+ TypeA l _ -> l+ IParam l _ _ -> l+ ParenA l _ -> l+ amap f asst = case asst of+ TypeA l t -> TypeA (f l) t+ IParam l ipn t -> IParam (f l) ipn t+ ParenA l a -> ParenA (f l) a++instance Annotated Literal where+ ann lit = case lit of+ Char l _ _ -> l+ String l _ _ -> l+ Int l _ _ -> l+ Frac l _ _ -> l+ PrimInt l _ _ -> l+ PrimWord l _ _ -> l+ PrimFloat l _ _ -> l+ PrimDouble l _ _ -> l+ PrimChar l _ _ -> l+ PrimString l _ _ -> l+ amap = fmap++instance Annotated Sign where+ ann sg = case sg of+ Signless l -> l+ Negative l -> l+ amap = fmap++instance Annotated Exp where+ ann e = case e of+ Var l _ -> l+ OverloadedLabel l _ -> l+ IPVar l _ -> l+ Con l _ -> l+ Lit l _ -> l+ InfixApp l _ _ _ -> l+ App l _ _ -> l+ NegApp l _ -> l+ Lambda l _ _ -> l+ Let l _ _ -> l+ If l _ _ _ -> l+ MultiIf l _ -> l+ Case l _ _ -> l+ Do l _ -> l+ MDo l _ -> l+ Tuple l _ _ -> l+ UnboxedSum l _ _ _ -> l+ TupleSection l _ _ -> l+ List l _ -> l+ ParArray l _ -> l+ Paren l _ -> l+ LeftSection l _ _ -> l+ RightSection l _ _ -> l+ RecConstr l _ _ -> l+ RecUpdate l _ _ -> l+ EnumFrom l _ -> l+ EnumFromTo l _ _ -> l+ EnumFromThen l _ _ -> l+ EnumFromThenTo l _ _ _ -> l+ ParArrayFromTo l _ _ -> l+ ParArrayFromThenTo l _ _ _ -> l+ ListComp l _ _ -> l+ ParComp l _ _ -> l+ ParArrayComp l _ _ -> l+ ExpTypeSig l _ _ -> l+ VarQuote l _ -> l+ TypQuote l _ -> l+ BracketExp l _ -> l+ SpliceExp l _ -> l+ QuasiQuote l _ _ -> l+ TypeApp l _ -> l++ XTag l _ _ _ _ -> l+ XETag l _ _ _ -> l+ XPcdata l _ -> l+ XExpTag l _ -> l+ XChildTag l _ -> l++ CorePragma l _ _ -> l+ SCCPragma l _ _ -> l+ GenPragma l _ _ _ _ -> l++ Proc l _ _ -> l+ LeftArrApp l _ _ -> l+ RightArrApp l _ _ -> l+ LeftArrHighApp l _ _ -> l+ RightArrHighApp l _ _ -> l+ ArrOp l _ -> l++ LCase l _ -> l++ amap f e1 = case e1 of+ Var l qn -> Var (f l) qn+ OverloadedLabel l qn -> OverloadedLabel (f l) qn+ IPVar l ipn -> IPVar (f l) ipn+ Con l qn -> Con (f l) qn+ Lit l lit -> Lit (f l) lit+ InfixApp l e1' qop e2 -> InfixApp (f l) e1' qop e2+ App l e1' e2 -> App (f l) e1' e2+ NegApp l e -> NegApp (f l) e+ Lambda l ps e -> Lambda (f l) ps e+ Let l bs e -> Let (f l) bs e+ If l ec et ee -> If (f l) ec et ee+ Case l e alts -> Case (f l) e alts+ Do l ss -> Do (f l) ss+ MDo l ss -> MDo (f l) ss+ Tuple l bx es -> Tuple (f l) bx es+ UnboxedSum l b a es -> UnboxedSum (f l) b a es+ TupleSection l bx mes -> TupleSection (f l) bx mes+ List l es -> List (f l) es+ ParArray l es -> ParArray (f l) es+ Paren l e -> Paren (f l) e+ LeftSection l e qop -> LeftSection (f l) e qop+ RightSection l qop e -> RightSection (f l) qop e+ RecConstr l qn fups -> RecConstr (f l) qn fups+ RecUpdate l e fups -> RecUpdate (f l) e fups+ EnumFrom l e -> EnumFrom (f l) e+ EnumFromTo l ef et -> EnumFromTo (f l) ef et+ EnumFromThen l ef et -> EnumFromThen (f l) ef et+ EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) ef eth eto+ ParArrayFromTo l ef et -> ParArrayFromTo (f l) ef et+ ParArrayFromThenTo l ef eth eto -> ParArrayFromThenTo (f l) ef eth eto+ ListComp l e qss -> ListComp (f l) e qss+ ParComp l e qsss -> ParComp (f l) e qsss+ ParArrayComp l e qsss -> ParArrayComp (f l) e qsss+ ExpTypeSig l e t -> ExpTypeSig (f l) e t+ VarQuote l qn -> VarQuote (f l) qn+ TypQuote l qn -> TypQuote (f l) qn+ BracketExp l br -> BracketExp (f l) br+ SpliceExp l sp -> SpliceExp (f l) sp+ QuasiQuote l sn se -> QuasiQuote (f l) sn se+ TypeApp l t -> TypeApp (f l) t++ XTag l xn xas me es -> XTag (f l) xn xas me es+ XETag l xn xas me -> XETag (f l) xn xas me+ XPcdata l s -> XPcdata (f l) s+ XExpTag l e -> XExpTag (f l) e+ XChildTag l es -> XChildTag (f l) es++ CorePragma l s e -> CorePragma (f l) s e+ SCCPragma l s e -> SCCPragma (f l) s e+ GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 e++ Proc l p e -> Proc (f l) p e+ LeftArrApp l e1' e2 -> LeftArrApp (f l) e1' e2+ RightArrApp l e1' e2 -> RightArrApp (f l) e1' e2+ LeftArrHighApp l e1' e2 -> LeftArrHighApp (f l) e1' e2+ RightArrHighApp l e1' e2 -> RightArrHighApp (f l) e1' e2+ ArrOp l e -> ArrOp (f l) e++ LCase l alts -> LCase (f l) alts+ MultiIf l alts -> MultiIf (f l) alts+++instance Annotated XName where+ ann (XName l _) = l+ ann (XDomName l _ _) = l+ amap = fmap++instance Annotated XAttr where+ ann (XAttr l _ _) = l+ amap f (XAttr l xn e) = XAttr (f l) xn e++instance Annotated Bracket where+ ann (ExpBracket l _) = l+ ann (TExpBracket l _) = l+ ann (PatBracket l _) = l+ ann (TypeBracket l _) = l+ ann (DeclBracket l _) = l+ amap f (ExpBracket l e) = ExpBracket (f l) e+ amap f (TExpBracket l e) = TExpBracket (f l) e+ amap f (PatBracket l p) = PatBracket (f l) p+ amap f (TypeBracket l t) = TypeBracket (f l) t+ amap f (DeclBracket l ds) = DeclBracket (f l) ds++instance Annotated Splice where+ ann (IdSplice l _) = l+ ann (TIdSplice l _) = l+ ann (ParenSplice l _) = l+ ann (TParenSplice l _) = l+ amap f (IdSplice l s) = IdSplice (f l) s+ amap f (TIdSplice l s) = TIdSplice (f l) s+ amap f (ParenSplice l e) = ParenSplice (f l) e+ amap f (TParenSplice l e) = TParenSplice (f l) e++instance Annotated Safety where+ ann (PlayRisky l) = l+ ann (PlaySafe l _) = l+ ann (PlayInterruptible l) = l+ amap = fmap++instance Annotated CallConv where+ ann (StdCall l) = l+ ann (CCall l) = l+ ann (CPlusPlus l) = l+ ann (DotNet l) = l+ ann (Jvm l) = l+ ann (Js l) = l+ ann (JavaScript l) = l+ ann (CApi l) = l+ amap = fmap++instance Annotated ModulePragma where+ ann (LanguagePragma l _) = l+ ann (OptionsPragma l _ _) = l+ ann (AnnModulePragma l _) = l+ amap f (LanguagePragma l ns) = LanguagePragma (f l) ns+ amap f (AnnModulePragma l a) = AnnModulePragma (f l) a+ amap f p = fmap f p++instance Annotated Overlap where+ ann (NoOverlap l) = l+ ann (Overlap l) = l+ ann (Overlaps l) = l+ ann (Overlappable l) = l+ ann (Overlapping l) = l+ ann (Incoherent l) = l+ amap = fmap++instance Annotated Activation where+ ann (ActiveFrom l _) = l+ ann (ActiveUntil l _) = l+ amap = fmap++instance Annotated Rule where+ ann (Rule l _ _ _ _ _) = l+ amap f (Rule l s act mrvs e1 e2) = Rule (f l) s act mrvs e1 e2++instance Annotated RuleVar where+ ann (RuleVar l _) = l+ ann (TypedRuleVar l _ _) = l+ amap f (RuleVar l n) = RuleVar (f l) n+ amap f (TypedRuleVar l n t) = TypedRuleVar (f l) n t++instance Annotated WarningText where+ ann (DeprText l _) = l+ ann (WarnText l _) = l+ amap = fmap++instance Annotated Pat where+ ann p = case p of+ PVar l _ -> l+ PLit l _ _ -> l+ PNPlusK l _ _ -> l+ PInfixApp l _ _ _ -> l+ PApp l _ _ -> l+ PTuple l _ _ -> l+ PUnboxedSum l _ _ _ -> l+ PList l _ -> l+ PParen l _ -> l+ PRec l _ _ -> l+ PAsPat l _ _ -> l+ PWildCard l -> l+ PIrrPat l _ -> l+ PatTypeSig l _ _ -> l+ PViewPat l _ _ -> l+ PRPat l _ -> l+ PXTag l _ _ _ _ -> l+ PXETag l _ _ _ -> l+ PXPcdata l _ -> l+ PXPatTag l _ -> l+ PXRPats l _ -> l+ PSplice l _ -> l+ PQuasiQuote l _ _ -> l+ PBangPat l _ -> l+ amap f p1 = case p1 of+ PVar l n -> PVar (f l) n+ PLit l sg lit -> PLit (f l) sg lit+ PNPlusK l n k -> PNPlusK (f l) n k+ PInfixApp l pa qn pb -> PInfixApp (f l) pa qn pb+ PApp l qn ps -> PApp (f l) qn ps+ PTuple l bx ps -> PTuple (f l) bx ps+ PUnboxedSum l b a ps -> PUnboxedSum (f l) b a ps+ PList l ps -> PList (f l) ps+ PParen l p -> PParen (f l) p+ PRec l qn pfs -> PRec (f l) qn pfs+ PAsPat l n p -> PAsPat (f l) n p+ PWildCard l -> PWildCard (f l)+ PIrrPat l p -> PIrrPat (f l) p+ PatTypeSig l p t -> PatTypeSig (f l) p t+ PViewPat l e p -> PViewPat (f l) e p+ PRPat l rps -> PRPat (f l) rps+ PXTag l xn pxas mp ps -> PXTag (f l) xn pxas mp ps+ PXETag l xn pxas mp -> PXETag (f l) xn pxas mp+ PXPcdata l s -> PXPcdata (f l) s+ PXPatTag l p -> PXPatTag (f l) p+ PXRPats l rps -> PXRPats (f l) rps+ PSplice l sp -> PSplice (f l) sp+ PQuasiQuote l sn st -> PQuasiQuote (f l) sn st+ PBangPat l p -> PBangPat (f l) p++instance Annotated PXAttr where+ ann (PXAttr l _ _) = l+ amap f (PXAttr l xn p) = PXAttr (f l) xn p++instance Annotated RPatOp where+ ann (RPStar l) = l+ ann (RPStarG l) = l+ ann (RPPlus l) = l+ ann (RPPlusG l) = l+ ann (RPOpt l) = l+ ann (RPOptG l) = l+ amap = fmap++instance Annotated RPat where+ ann rp = case rp of+ RPOp l _ _ -> l+ RPEither l _ _ -> l+ RPSeq l _ -> l+ RPGuard l _ _ -> l+ RPCAs l _ _ -> l+ RPAs l _ _ -> l+ RPParen l _ -> l+ RPPat l _ -> l+ amap f rp1 = case rp1 of+ RPOp l rp rop -> RPOp (f l) rp rop+ RPEither l rp1' rp2 -> RPEither (f l) rp1' rp2+ RPSeq l rps -> RPSeq (f l) rps+ RPGuard l p ss -> RPGuard (f l) p ss+ RPCAs l n rp -> RPCAs (f l) n rp+ RPAs l n rp -> RPAs (f l) n rp+ RPParen l rp -> RPParen (f l) rp+ RPPat l p -> RPPat (f l) p++instance Annotated PatField where+ ann (PFieldPat l _ _) = l+ ann (PFieldPun l _) = l+ ann (PFieldWildcard l) = l+ amap f (PFieldPat l qn p) = PFieldPat (f l) qn p+ amap f (PFieldPun l n) = PFieldPun (f l) n+ amap f (PFieldWildcard l) = PFieldWildcard (f l)++instance Annotated Stmt where+ ann (Generator l _ _) = l+ ann (Qualifier l _) = l+ ann (LetStmt l _) = l+ ann (RecStmt l _) = l+ amap f (Generator l p e) = Generator (f l) p e+ amap f (Qualifier l e) = Qualifier (f l) e+ amap f (LetStmt l bs) = LetStmt (f l) bs+ amap f (RecStmt l ss) = RecStmt (f l) ss++instance Annotated QualStmt where+ ann (QualStmt l _) = l+ ann (ThenTrans l _) = l+ ann (ThenBy l _ _) = l+ ann (GroupBy l _) = l+ ann (GroupUsing l _) = l+ ann (GroupByUsing l _ _) = l+ amap f (QualStmt l s) = QualStmt (f l) s+ amap f (ThenTrans l e) = ThenTrans (f l) e+ amap f (ThenBy l e1 e2) = ThenBy (f l) e1 e2+ amap f (GroupBy l e) = GroupBy (f l) e+ amap f (GroupUsing l e) = GroupUsing (f l) e+ amap f (GroupByUsing l e1 e2) = GroupByUsing (f l) e1 e2++instance Annotated FieldUpdate where+ ann (FieldUpdate l _ _) = l+ ann (FieldPun l _) = l+ ann (FieldWildcard l) = l+ amap f (FieldUpdate l qn e) = FieldUpdate (f l) qn e+ amap f (FieldPun l n) = FieldPun (f l) n+ amap f (FieldWildcard l) = FieldWildcard (f l)++instance Annotated Alt where+ ann (Alt l _ _ _) = l+ amap f (Alt l p gs bs) = Alt (f l) p gs bs++instance Annotated Promoted where+ ann (PromotedInteger l _ _) = l+ ann (PromotedString l _ _) = l+ ann (PromotedCon l _ _) = l+ ann (PromotedList l _ _) = l+ ann (PromotedTuple l _) = l+ ann (PromotedUnit l) = l+ amap f (PromotedInteger l int raw) = PromotedInteger (f l) int raw+ amap f (PromotedString l str raw) = PromotedString (f l) str raw+ amap f (PromotedCon l b qn) = PromotedCon (f l) b qn+ amap f (PromotedList l b ps) = PromotedList (f l) b ps+ amap f (PromotedTuple l ps) = PromotedTuple (f l) ps+ amap f (PromotedUnit l) = PromotedUnit (f l)
@@ -0,0 +1,72 @@+-- | Part of this code is from "Report on the Programming Language Haskell",+-- version 1.2, appendix C.+{-# OPTIONS_GHC -Wwarn #-}+module Language.Preprocessor.Unlit (unlit) where++import Data.Char+import Data.List (isPrefixOf)++data Classified = Program String | Blank | Comment+ | Include Int String | Pre String++classify :: [String] -> [Classified]+classify [] = []+classify (('\\':x):xs) | x == "begin{code}" = Blank : allProg xs+ where allProg [] = [] -- Should give an error message,+ -- but I have no good position information.+ allProg (('\\':y):ys) | "end{code}" `isPrefixOf` y = Blank : classify ys+ allProg (y:ys) = Program y : allProg ys+classify (('>':x):xs) = Program (' ' : x) : classify xs+classify (('#':x):xs) = (case words x of+ (line:rest) | all isDigit line+ -> Include (read line) (unwords rest)+ _ -> Pre x+ ) : classify xs+--classify (x:xs) | "{-# LINE" `isPrefixOf` x = Program x: classify xs+classify (x:xs) | all isSpace x = Blank : classify xs+classify (_:xs) = Comment : classify xs++unclassify :: Classified -> String+unclassify (Program s) = s+unclassify (Pre s) = '#':s+unclassify (Include i f) = '#':' ':show i ++ ' ':f+unclassify Blank = ""+unclassify Comment = ""++-- | 'unlit' takes a filename (for error reports), and transforms the+-- given string, to eliminate the literate comments from the program text.+unlit :: FilePath -> String -> String+unlit file lhs = (unlines+ . map unclassify+ . adjacent file (0::Int) Blank+ . classify) (inlines lhs)++adjacent :: FilePath -> Int -> Classified -> [Classified] -> [Classified]+adjacent file 0 _ (x :xs) = x : adjacent file 1 x xs -- force evaluation of line number+adjacent file n (Program _) (Comment :_ ) = error (message file n "program" "comment")+adjacent _ _ y@(Program _) (x@(Include i f):xs) = x: adjacent f i y xs+adjacent file n y@(Program _) (x@(Pre _) :xs) = x: adjacent file (n+1) y xs+adjacent file n Comment ( (Program _) :_ ) = error (message file n "comment" "program")+adjacent _ _ y@Comment (x@(Include i f):xs) = x: adjacent f i y xs+adjacent file n y@Comment (x@(Pre _) :xs) = x: adjacent file (n+1) y xs+adjacent _ _ y@Blank (x@(Include i f):xs) = x: adjacent f i y xs+adjacent file n y@Blank (x@(Pre _) :xs) = x: adjacent file (n+1) y xs+adjacent file n _ (x :xs) = x: adjacent file (n+1) x xs+adjacent _ _ _ [] = []++message :: String -> Int -> String -> String -> String+message "\"\"" n p c = "Line "++show n++": "++p++ " line before "++c++" line.\n"+message [] n p c = "Line "++show n++": "++p++ " line before "++c++" line.\n"+message file n p c = "In file " ++ file ++ " at line "++show n++": "++p++ " line before "++c++" line.\n"+++-- Re-implementation of 'lines', for better efficiency (but decreased laziness).+-- Also, importantly, accepts non-standard DOS and Mac line ending characters.+inlines :: String -> [String]+inlines = (`lines'` id)+ where+ lines' [] acc = [acc []]+ lines' ('\^M':'\n':s) acc = acc [] : lines' s id -- DOS+ lines' ('\^M':s) acc = acc [] : lines' s id -- MacOS+ lines' ('\n':s) acc = acc [] : lines' s id -- Unix+ lines' (c:s) acc = lines' s (acc . (c:))
@@ -0,0 +1,53 @@+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, StandaloneDeriving #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}+module Extensions (extensionProperties) where++import Test.Tasty+import Test.Tasty.SmallCheck+import Test.SmallCheck.Series+import Language.Haskell.Exts+import Data.Function+import Data.List++instance Monad m => Serial m Language where+ series = generate (const knownLanguages)++instance Monad m => Serial m Extension where+ series = generate (const knownExtensions)++instance Monad m => Serial m KnownExtension where+ series = generate $ const [ e | EnableExtension e <- knownExtensions ]++infix 3 ~~+(~~) :: Monad m => [Extension] -> [Extension] -> Property m+xts1 ~~ xts2 = forAll $ \lang -> ((==) `on` sort . toExtensionList lang) xts1 xts2++-- arbitrary examples+e1 :: KnownExtension+e1 = OverlappingInstances++e2 :: KnownExtension+e2 = UndecidableInstances++extensionProperties :: TestTree+extensionProperties =+ localOption (SmallCheckDepth 2) $ testGroup "Properties of LANGUAGE extensions" $+ [ testProperty "identity" $ \x -> x ~~ x+ , testProperty "idempotence" $ \x -> x ++ x ~~ x+ -- Actually, let's not exhaustively check n^2 cases+ -- , testProperty "right bias" $ \x y -> x ++ y ++ x ~~ y ++ x+ , testProperty "right bias - override to disabled" $+ [EnableExtension e1, DisableExtension e1] ~~ [DisableExtension e1]+ , testProperty "right bias - override to enabled" $+ [DisableExtension e1, EnableExtension e1] ~~ [EnableExtension e1]+ , testProperty "right bias - interleaved override to disabled" $+ [EnableExtension e1, EnableExtension e2, DisableExtension e1]+ ~~ [EnableExtension e2, DisableExtension e1]+ , testProperty "right bias - interleaved override to enabled" $+ [DisableExtension e1, EnableExtension e2, EnableExtension e1]+ ~~ [EnableExtension e2, EnableExtension e1]+ , testProperty "closedness of implication" $ \x -> impliesExts (impliesExts x) == impliesExts x+ , testProperty "closedness of toExtensionList" $ \l x -> let es = toExtensionList l x in es == impliesExts es+ , testProperty "opposite extensions 1" $ \x -> [EnableExtension x, DisableExtension x] ~~ [DisableExtension x]+ , testProperty "opposite extensions 2" $ \x -> [DisableExtension x, EnableExtension x] ~~ [EnableExtension x]+ ]
@@ -0,0 +1,189 @@+{-# LANGUAGE ViewPatterns #-}+-- | Use "runhaskell Setup.hs test" or "cabal test" to run these tests.+module Main where++import Language.Haskell.Exts++import Test.Tasty hiding (defaultMain)+import Test.Tasty.Golden+import Test.Tasty.Golden.Manage+import System.FilePath+import System.IO+import Control.Monad.Trans+import Control.Applicative+import Extensions+import Text.Show.Pretty+++main :: IO ()+main = do+ sources <- getTestFiles examplesDir+ defaultMain $ testGroup "Tests" $+ [ parserTests sources+ , exactPrinterTests sources+ , prettyPrinterTests sources+ , prettyParserTests sources+ , extensionProperties+ , commentsTests examplesDir+ ]++-- | Where all the tests are to be found+examplesDir :: FilePath+examplesDir = "tests/examples"++getTestFiles :: MonadIO m => FilePath -> m [FilePath]+getTestFiles dir = liftIO $ findByExtension [".hs", ".lhs"] dir++parserTests :: [FilePath] -> TestTree -- {{{+parserTests sources = testGroup "Parser tests" $ do+ -- list monad+ file <- sources+ let+ out = file <.> "parser" <.> "out"+ golden = file <.> "parser" <.> "golden"+ run = do+ ast <-+ parseUTF8FileWithComments+ (defaultParseMode { parseFilename = file })+ file+ writeBinaryFile out $ ppShow ast ++ "\n"+ return $ goldenVsFile (takeBaseName file) golden out run+-- }}}++exactPrinterTests :: [FilePath] -> TestTree -- {{{+exactPrinterTests sources = testGroup "Exact printer tests" $ do+ -- list monad+ file <- sources+ let+ out = file <.> "exactprinter" <.> "out"+ golden = file <.> "exactprinter" <.> "golden"+ run = do+ contents <- readUTF8File file+ let+ -- parse+ mbAst =+ parseFileContentsWithComments+ (defaultParseMode { parseFilename = file })+ contents+ -- try to pretty-print; summarize the test result+ result =+ case mbAst of+ f@ParseFailed{} -> show f+ ParseOk ast ->+ let+ printed = uncurry exactPrint ast+ in+ if printed == contents+ then "Match"+ else printed+ writeBinaryFile out $ result ++ "\n"+ return $ goldenVsFile (takeBaseName file) golden out run+-- }}}++prettyPrinterTests :: [FilePath] -> TestTree -- {{{+prettyPrinterTests sources = testGroup "Pretty printer tests" $ do+ -- list monad+ file <- sources+ let+ out = file <.> "prettyprinter" <.> "out"+ golden = file <.> "prettyprinter" <.> "golden"+ run = do+ contents <- readUTF8File file+ let+ -- parse+ mbAst =+ parseFileContentsWithMode+ (defaultParseMode { parseFilename = file })+ contents+ -- try to pretty-print; summarize the test result+ result =+ case mbAst of+ f@ParseFailed{} -> show f+ ParseOk ast -> prettyPrint ast+ writeBinaryFile out $ result ++ "\n"+ return $ goldenVsFile (takeBaseName file) golden out run+-- }}}++prettyParserTests :: [FilePath] -> TestTree -- {{{+prettyParserTests sources = testGroup "Pretty-parser tests" $ do+ -- list monad+ file <- sources+ let+ out = file <.> "prettyparser" <.> "out"+ golden = file <.> "prettyparser" <.> "golden"+ run = do+ contents <- readUTF8File file+ let+ -- parse+ parse1Result :: ParseResult (Module SrcSpanInfo)+ parse1Result =+ parseFileContentsWithMode+ (defaultParseMode { parseFilename = file })+ contents++ prettyResult :: ParseResult String+ prettyResult = prettyPrint <$> parse1Result++ parse2Result :: ParseResult (ParseResult (Module SrcSpanInfo))+ parse2Result = parseFileContents <$> prettyResult++ -- Even the un-annotated AST contains certain locations.+ -- Obviously, they may differ, so we have to erase them.+ eraseLocs :: Module l -> Module ()+ eraseLocs = (() <$)++ summary =+ case liftA3 (,,) parse1Result prettyResult parse2Result of+ f@ParseFailed{} -> show f+ ParseOk (eraseLocs -> ast1, pretty, mbAst2) ->+ case mbAst2 of+ f@ParseFailed{} ->+ "Failed to parse output of pretty-printer:\n" +++ show f ++ "\n" +++ "The pretty-printer output follows.\n\n" +++ pretty+ ParseOk (eraseLocs -> ast2) ->+ if ast1 == ast2+ then "Match"+ else+ "Roundtrip test failed\n\n" +++ "AST 1:\n\n" +++ show ast1 ++ "\n\n" +++ "AST 2:\n\n" +++ show ast2 ++ "\n"++ writeBinaryFile out $ summary ++ "\n"+ return $ goldenVsFile (takeBaseName file) golden out run+-- }}}++commentsTests :: FilePath -> TestTree -- {{{+commentsTests dir = testGroup "Comments tests" $ do+ let file = dir ++ "/HaddockComments.hs"+ out = file <.> "comments" <.> "out"+ golden = file <.> "comments" <.> "golden"+ run = do+ contents <- readUTF8File file+ let+ -- parse+ parse1Result :: ParseResult (Module SrcSpanInfo,[Comment])+ parse1Result =+ parseFileContentsWithComments+ (defaultParseMode { parseFilename = file })+ contents+ withC = case parse1Result of+ ParseOk res -> ParseOk $ associateHaddock res+ ParseFailed sloc msg -> ParseFailed sloc msg+ writeBinaryFile out $ show withC ++ "\n"+ return $ goldenVsFile (takeBaseName file) golden out run++-- UTF8 utils {{{+readUTF8File :: FilePath -> IO String+readUTF8File fp = openFile fp ReadMode >>= \h -> do+ hSetEncoding h utf8+ c <- hGetContents h >>= \s -> length s `seq` return s+ hClose h+ return c++parseUTF8FileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo, [Comment]))+parseUTF8FileWithComments p fp = readUTF8File fp >>= (return . parseFileContentsWithComments p)+-- }}}
@@ -0,0 +1,1 @@+f = (+ 1) . head &&& tail
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "" (-1) (-1)) "Ambiguous infix expression"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "" (-1) (-1)) "Ambiguous infix expression"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "" (-1) (-1)) "Ambiguous infix expression"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "" (-1) (-1)) "Ambiguous infix expression"
@@ -0,0 +1,7 @@+module ArityMismatch where++foo a b = 1+foo a = 2++bar = 1+baz = 2
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/ArityMismatch.hs" 3 1) "arity mismatch for 'foo'"
@@ -0,0 +1,3 @@+ParseFailed+ (SrcLoc "tests/examples/ArityMismatch.hs" 3 1)+ "arity mismatch for 'foo'"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/ArityMismatch.hs" 3 1) "arity mismatch for 'foo'"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/ArityMismatch.hs" 3 1) "arity mismatch for 'foo'"
@@ -0,0 +1,8 @@+{-# LANGUAGE Arrows #-}+module ArrowBrackets where++foo = proc (x, y) -> (| f (g -< x) |) y++bar = proc (x, y) -> do+ z <- (| f (g -< x) |) y+ (| f (h -< z) |) y
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,541 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 9 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 1 1+ , SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 1+ , SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 1+ , SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 1+ , SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 6 1+ , SrcSpan "tests/examples/ArrowBrackets.hs" 9 1 9 1+ , SrcSpan "tests/examples/ArrowBrackets.hs" 9 1 9 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 7+ , SrcSpan "tests/examples/ArrowBrackets.hs" 2 22 2 27+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 2 8 2 21+ , srcInfoPoints = []+ }+ "ArrowBrackets")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 1 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 1 13+ , SrcSpan "tests/examples/ArrowBrackets.hs" 1 21 1 24+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 1 14 1 20+ , srcInfoPoints = []+ }+ "Arrows"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 40+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 5 4 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 5 4 6 ]+ }+ (Proc+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 7 4 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 7 4 11+ , SrcSpan "tests/examples/ArrowBrackets.hs" 4 19 4 21+ ]+ }+ (PTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 12 4 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 12 4 13+ , SrcSpan "tests/examples/ArrowBrackets.hs" 4 14 4 15+ , SrcSpan "tests/examples/ArrowBrackets.hs" 4 17 4 18+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ "x")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 16 4 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 16 4 17+ , srcInfoPoints = []+ }+ "y")+ ])+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 22 4 40+ , srcInfoPoints = []+ }+ (ArrOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 22 4 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 22 4 24+ , SrcSpan "tests/examples/ArrowBrackets.hs" 4 36 4 38+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 35+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 26+ , srcInfoPoints = []+ }+ "f")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 27 4 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 27 4 28+ , SrcSpan "tests/examples/ArrowBrackets.hs" 4 34 4 35+ ]+ }+ (LeftArrApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 30 4 32 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ "g")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 4 33 4 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 4 33 4 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 4 33 4 34+ , srcInfoPoints = []+ }+ "x")))))))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 39 4 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 39 4 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 39 4 40+ , srcInfoPoints = []+ }+ "y"))))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 8 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ "bar"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 5 8 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 5 6 6 ]+ }+ (Proc+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 7 8 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 7 6 11+ , SrcSpan "tests/examples/ArrowBrackets.hs" 6 19 6 21+ ]+ }+ (PTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 12 6 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 12 6 13+ , SrcSpan "tests/examples/ArrowBrackets.hs" 6 14 6 15+ , SrcSpan "tests/examples/ArrowBrackets.hs" 6 17 6 18+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 13 6 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 13 6 14+ , srcInfoPoints = []+ }+ "x")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 16 6 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 16 6 17+ , srcInfoPoints = []+ }+ "y")+ ])+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 22 8 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 22 6 24+ , SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 3+ , SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 3+ , SrcSpan "tests/examples/ArrowBrackets.hs" 9 1 9 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 5 7 7 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 4+ , srcInfoPoints = []+ }+ "z"))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 8 7 26+ , srcInfoPoints = []+ }+ (ArrOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 8 7 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 8 7 10+ , SrcSpan "tests/examples/ArrowBrackets.hs" 7 22 7 24+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 12+ , srcInfoPoints = []+ }+ "f")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 13 7 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 13 7 14+ , SrcSpan "tests/examples/ArrowBrackets.hs" 7 20 7 21+ ]+ }+ (LeftArrApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 14 7 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 16 7 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowBrackets.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowBrackets.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ "g")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 19 7 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowBrackets.hs" 7 19 7 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowBrackets.hs" 7 19 7 20+ , srcInfoPoints = []+ }+ "x")))))))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ "y"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 21+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 21+ , srcInfoPoints = []+ }+ (ArrOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 5+ , SrcSpan "tests/examples/ArrowBrackets.hs" 8 17 8 19+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 16+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ "f")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 8 8 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 8 8 8 9+ , SrcSpan "tests/examples/ArrowBrackets.hs" 8 15 8 16+ ]+ }+ (LeftArrApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 9 8 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowBrackets.hs" 8 11 8 13 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 9 8 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 9 8 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowBrackets.hs" 8 9 8 10+ , srcInfoPoints = []+ }+ "h")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 14 8 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowBrackets.hs" 8 14 8 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowBrackets.hs" 8 14 8 15+ , srcInfoPoints = []+ }+ "z")))))))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 20 8 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 20 8 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowBrackets.hs" 8 20 8 21+ , srcInfoPoints = []+ }+ "y"))))+ ])))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,7 @@+{-# LANGUAGE Arrows #-}+module ArrowBrackets where+foo = proc (x, y) -> (| f (g -< x) |) y+bar+ = proc (x, y) ->+ do z <- (| f (g -< x) |) y+ (| f (h -< z) |) y
@@ -0,0 +1,7 @@+{-# LANGUAGE Arrows #-}+module ArrowLayout where++exp = proc () -> do+ rec let e = 1 + i+ i <- integral -< e+ returnA -< e
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,338 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 1 1 8 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 1 1 1 1+ , SrcSpan "tests/examples/ArrowLayout.hs" 2 1 2 1+ , SrcSpan "tests/examples/ArrowLayout.hs" 2 1 2 1+ , SrcSpan "tests/examples/ArrowLayout.hs" 4 1 4 1+ , SrcSpan "tests/examples/ArrowLayout.hs" 8 1 8 1+ , SrcSpan "tests/examples/ArrowLayout.hs" 8 1 8 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 2 1 2 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 2 1 2 7+ , SrcSpan "tests/examples/ArrowLayout.hs" 2 20 2 25+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 2 8 2 19+ , srcInfoPoints = []+ }+ "ArrowLayout")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 1 1 1 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 1 1 1 13+ , SrcSpan "tests/examples/ArrowLayout.hs" 1 21 1 24+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 1 14 1 20+ , srcInfoPoints = []+ }+ "Arrows"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 1 7 15+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ "exp"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 5 7 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 4 5 4 6 ]+ }+ (Proc+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 7 7 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 4 7 4 11+ , SrcSpan "tests/examples/ArrowLayout.hs" 4 15 4 17+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 12 4 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 4 12 4 13+ , SrcSpan "tests/examples/ArrowLayout.hs" 4 13 4 14+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 12 4 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 4 12 4 13+ , SrcSpan "tests/examples/ArrowLayout.hs" 4 13 4 14+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 12 4 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 4 12 4 13+ , SrcSpan "tests/examples/ArrowLayout.hs" 4 13 4 14+ ]+ }))+ [])+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 4 18 7 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 4 18 4 20+ , SrcSpan "tests/examples/ArrowLayout.hs" 5 3 5 3+ , SrcSpan "tests/examples/ArrowLayout.hs" 7 3 7 3+ , SrcSpan "tests/examples/ArrowLayout.hs" 8 1 8 0+ ]+ }+ [ RecStmt+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 5 3 6 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 5 3 5 6+ , SrcSpan "tests/examples/ArrowLayout.hs" 5 7 5 7+ , SrcSpan "tests/examples/ArrowLayout.hs" 6 7 6 7+ , SrcSpan "tests/examples/ArrowLayout.hs" 7 3 7 0+ ]+ }+ [ LetStmt+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 5 7 5 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 5 7 5 10 ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 5 11 5 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 5 11 5 11+ , SrcSpan "tests/examples/ArrowLayout.hs" 6 7 6 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 11 5 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 11 5 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 11 5 12+ , srcInfoPoints = []+ }+ "e"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 13 5 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 5 13 5 14 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 15 5 20+ , srcInfoPoints = []+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 15 5 16+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowLayout.hs" 5 15 5 16+ , srcInfoPoints = []+ }+ 1+ "1"))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 17 5 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowLayout.hs" 5 17 5 18+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowLayout.hs" 5 17 5 18+ , srcInfoPoints = []+ }+ "+")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 5 19 5 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowLayout.hs" 5 19 5 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ArrowLayout.hs" 5 19 5 20+ , srcInfoPoints = []+ }+ "i")))))+ Nothing+ ])+ , Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 6 7 6 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 6 9 6 11 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 6 7 6 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 6 7 6 8+ , srcInfoPoints = []+ }+ "i"))+ (LeftArrApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 6 12 6 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 6 21 6 23 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 6 12 6 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 6 12 6 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 6 12 6 20+ , srcInfoPoints = []+ }+ "integral")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 6 24 6 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 6 24 6 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 6 24 6 25+ , srcInfoPoints = []+ }+ "e"))))+ ]+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 7 3 7 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 7 11 7 13 ]+ }+ (LeftArrApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 7 3 7 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ArrowLayout.hs" 7 11 7 13 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 7 3 7 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 7 3 7 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 7 3 7 10+ , srcInfoPoints = []+ }+ "returnA")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ArrowLayout.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ArrowLayout.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ "e"))))+ ])))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,7 @@+{-# LANGUAGE Arrows #-}+module ArrowLayout where+exp+ = proc () ->+ do rec let e = 1 + i+ i <- integral -< e+ returnA -< e
@@ -0,0 +1,8 @@+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-}++data a :+: b = Proxy++foo = id @(Int :+: Int)++_ @> m = m
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,291 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 1 1 9 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 1 1 1 1+ , SrcSpan "tests/examples/AtOperator.hs" 2 1 2 1+ , SrcSpan "tests/examples/AtOperator.hs" 4 1 4 1+ , SrcSpan "tests/examples/AtOperator.hs" 4 1 4 1+ , SrcSpan "tests/examples/AtOperator.hs" 4 1 4 1+ , SrcSpan "tests/examples/AtOperator.hs" 6 1 6 1+ , SrcSpan "tests/examples/AtOperator.hs" 8 1 8 1+ , SrcSpan "tests/examples/AtOperator.hs" 9 1 9 1+ , SrcSpan "tests/examples/AtOperator.hs" 9 1 9 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 1 1 1 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 1 1 1 13+ , SrcSpan "tests/examples/AtOperator.hs" 1 31 1 34+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 1 14 1 30+ , srcInfoPoints = []+ }+ "TypeApplications"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 2 1 2 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 2 1 2 13+ , SrcSpan "tests/examples/AtOperator.hs" 2 28 2 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 2 14 2 27+ , srcInfoPoints = []+ }+ "TypeOperators"+ ]+ ]+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 1 4 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 4 14 4 15 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 1 4 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 13+ , srcInfoPoints = []+ }+ (DHInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 13+ , srcInfoPoints = []+ }+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 7+ , srcInfoPoints = []+ }+ "a"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 8 4 11+ , srcInfoPoints = []+ }+ ":+:"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 12 4 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 12 4 13+ , srcInfoPoints = []+ }+ "b")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 16 4 21+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 16 4 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 16 4 21+ , srcInfoPoints = []+ }+ "Proxy")+ [])+ ]+ []+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 1 6 24+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 5 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 6 5 6 6 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 9+ , srcInfoPoints = []+ }+ "id")))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 10 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 6 10 6 11 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 11 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 6 11 6 12+ , SrcSpan "tests/examples/AtOperator.hs" 6 23 6 24+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 15+ , srcInfoPoints = []+ }+ "Int")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 16 6 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 16 6 19+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 16 6 19+ , srcInfoPoints = []+ }+ ":+:")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 20 6 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 20 6 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 20 6 23+ , srcInfoPoints = []+ }+ "Int"))))))))+ Nothing+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 1 8 11+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 1 8 11+ , srcInfoPoints = []+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 1 8 2+ , srcInfoPoints = []+ })+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 3 8 5+ , srcInfoPoints = []+ }+ "@>")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ "m")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 8 8 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 8 8 8 9 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ "m"))))+ Nothing+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,6 @@+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-}++data a :+: b = Proxy+foo = id @(Int :+: Int)+_ @> m = m
@@ -0,0 +1,17 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeApplications #-}+{- |+Accelerate interface to the native CUDA implementation+of the Fourier Transform provided by the CUFFT library.+-}+module Data.Array.Accelerate.CUFFT.Private where+++transform hndl@(Handle fallback mode width _) =+ wrap mode (A.constant width) $+ A.foreignAcc+ (AF.CUDAForeignAcc "transformForeign" $ transformForeign hndl)+ (unwrap mode (A.constant width) fallback)++
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,591 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 1 1 18 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 1 1 1 1+ , SrcSpan "tests/examples/AtSign.hs" 2 1 2 1+ , SrcSpan "tests/examples/AtSign.hs" 3 1 3 1+ , SrcSpan "tests/examples/AtSign.hs" 8 1 8 1+ , SrcSpan "tests/examples/AtSign.hs" 8 1 8 1+ , SrcSpan "tests/examples/AtSign.hs" 11 1 11 1+ , SrcSpan "tests/examples/AtSign.hs" 18 1 18 1+ , SrcSpan "tests/examples/AtSign.hs" 18 1 18 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 8 1 8 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 8 1 8 7+ , SrcSpan "tests/examples/AtSign.hs" 8 44 8 49+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 8 8 8 43+ , srcInfoPoints = []+ }+ "Data.Array.Accelerate.CUFFT.Private")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 1 1 1 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 1 1 1 13+ , SrcSpan "tests/examples/AtSign.hs" 1 27 1 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 1 14 1 26+ , srcInfoPoints = []+ }+ "TypeFamilies"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 2 1 2 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 2 1 2 13+ , SrcSpan "tests/examples/AtSign.hs" 2 28 2 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 2 14 2 27+ , srcInfoPoints = []+ }+ "TypeOperators"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 3 1 3 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 3 1 3 13+ , SrcSpan "tests/examples/AtSign.hs" 3 31 3 34+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 3 14 3 30+ , srcInfoPoints = []+ }+ "TypeApplications"+ ]+ ]+ []+ [ FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 1 15 48+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 1 15 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 1 11 10+ , srcInfoPoints = []+ }+ "transform")+ [ PAsPat+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 11 11 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 11 15 11 16 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 11 11 15+ , srcInfoPoints = []+ }+ "hndl")+ (PParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 16 11 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 11 16 11 17+ , SrcSpan "tests/examples/AtSign.hs" 11 45 11 46+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 17 11 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 17 11 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 17 11 23+ , srcInfoPoints = []+ }+ "Handle"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 24 11 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 24 11 32+ , srcInfoPoints = []+ }+ "fallback")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 33 11 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 33 11 37+ , srcInfoPoints = []+ }+ "mode")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 38 11 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 38 11 43+ , srcInfoPoints = []+ }+ "width")+ , PWildCard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 44 11 45+ , srcInfoPoints = []+ }+ ]))+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 11 47 15 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 11 47 11 48 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 4 15 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 4 12 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 4 12 13+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 4 12 8+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 4 12 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 4 12 8+ , srcInfoPoints = []+ }+ "wrap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 9 12 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 9 12 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 9 12 13+ , srcInfoPoints = []+ }+ "mode"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 14 12 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 12 14 12 15+ , SrcSpan "tests/examples/AtSign.hs" 12 31 12 32+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 15 12 31+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 15 12 25+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 15 12 25+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 12 15 12 25+ , srcInfoPoints = []+ }+ "A")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 12 15 12 25+ , srcInfoPoints = []+ }+ "constant")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 26 12 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 26 12 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 12 26 12 31+ , srcInfoPoints = []+ }+ "width"))))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 33 12 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 33 12 34+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 12 33 12 34+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 13 4 15 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 13 4 14 69+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 13 4 13 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 13 4 13 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 13 4 13 16+ , srcInfoPoints = []+ }+ "A")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 13 4 13 16+ , srcInfoPoints = []+ }+ "foreignAcc")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 14 7 14 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 14 7 14 8+ , SrcSpan "tests/examples/AtSign.hs" 14 68 14 69+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 14 8 14 68+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 14 8 14 44+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 8 14 25+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 8 14 25+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 8 14 25+ , srcInfoPoints = []+ }+ "AF")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 8 14 25+ , srcInfoPoints = []+ }+ "CUDAForeignAcc")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 26 14 44+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 26 14 44+ , srcInfoPoints = []+ }+ "transformForeign"+ "transformForeign")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 14 45 14 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 45 14 46+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 45 14 46+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 14 47 14 68+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 47 14 63+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 47 14 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 47 14 63+ , srcInfoPoints = []+ }+ "transformForeign")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 64 14 68+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 64 14 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 14 64 14 68+ , srcInfoPoints = []+ }+ "hndl")))))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 15 7 15 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 15 7 15 8+ , SrcSpan "tests/examples/AtSign.hs" 15 47 15 48+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 15 8 15 47+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 15 8 15 38+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 15 8 15 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 8 15 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 8 15 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 8 15 14+ , srcInfoPoints = []+ }+ "unwrap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 15 15 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 15 15 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 15 15 19+ , srcInfoPoints = []+ }+ "mode"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 15 20 15 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtSign.hs" 15 20 15 21+ , SrcSpan "tests/examples/AtSign.hs" 15 37 15 38+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 21 15 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 21 15 31+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 21 15 31+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 21 15 31+ , srcInfoPoints = []+ }+ "A")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 21 15 31+ , srcInfoPoints = []+ }+ "constant")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 32 15 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 32 15 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 32 15 37+ , srcInfoPoints = []+ }+ "width"))))))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 15 39 15 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtSign.hs" 15 39 15 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/AtSign.hs" 15 39 15 47+ , srcInfoPoints = []+ }+ "fallback"))))))))+ Nothing+ ]+ ]+ , [ Comment+ True+ (SrcSpan "tests/examples/AtSign.hs" 4 1 7 3)+ " |\nAccelerate interface to the native CUDA implementation\nof the Fourier Transform provided by the CUFFT library.\n"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,9 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeApplications #-}+module Data.Array.Accelerate.CUFFT.Private where+transform hndl@(Handle fallback mode width _)+ = wrap mode (A.constant width) $+ A.foreignAcc+ (AF.CUDAForeignAcc "transformForeign" $ transformForeign hndl)+ (unwrap mode (A.constant width) fallback)
@@ -0,0 +1,2181 @@+{- |+ Module : Data.GraphViz.Attributes+ Description : Definition of the Graphviz attributes.+ Copyright : (c) Matthew Sackman, Ivan Lazar Miljenovic+ License : 3-Clause BSD-style+ Maintainer : Ivan.Miljenovic@gmail.com++ This module defines the various attributes that different parts of+ a Graphviz graph can have. These attributes are based on the+ documentation found at:+ <http://graphviz.org/doc/info/attrs.html>++ For more information on usage, etc. please see that document.++ A summary of known current constraints\/limitations\/differences:++ * There might still be a few cases where quotes are still not+ escaped/parsed correctly; if you find such a situation, please+ let me know; however, you should be able to use 'String' values+ directly without having to worry about when quotes are required+ or extra escaping of quote characters as 'PrintDot' and+ 'ParseDot' instances for 'String' should take care of that+ for you.++ * Note that for an edge, in /Dot/ parlance if the edge goes from+ /A/ to /B/, then /A/ is the tail node and /B/ is the head node+ (since /A/ is at the tail end of the arrow).++ * ColorList and PointfList are defined as actual lists (but+ 'LayerList' is not). Note that for the Color 'Attribute' for+ node values, only a single Color is valid; edges are allowed+ multiple colors with one spline/arrow per color in the list (but+ you must have at least one 'Color' in the list). This might be+ changed in future.++ * Style is implemented as a list of 'StyleItem' values; note that+ empty lists are not allowed.++ * A lot of values have a possible value of @none@. These now+ have custom constructors. In fact, most constructors have been+ expanded upon to give an idea of what they represent rather than+ using generic terms.++ * @PointF@ and 'Point' have been combined, and feature support for pure+ 'Int'-based co-ordinates as well as 'Double' ones (i.e. no floating+ point-only points for Point). The optional '!' and third value+ for Point are not available.++ * 'Rect' uses two 'Point' values to denote the lower-left and+ top-right corners.++ * The two 'LabelLoc' attributes have been combined.++ * The defined 'LayerSep' is not used to parse 'LayerRange' or+ 'LayerList'; the default (@[' ', ':', '\t']@) is instead used.++ * @SplineType@ has been replaced with @['Spline']@.++ * Only polygon-based 'Shape's are available.++ * 'PortPos' only has the 'CompassPoint' option, not+ @PortName[:CompassPoint]@ (since record shapes aren't allowed,+ and parsing HTML-like labels could be problematic).++ * Not every 'Attribute' is fully documented/described. However,+ all those which have specific allowed values should be covered.++ * Deprecated 'Overlap' algorithms are not defined.++ * The global @Orientation@ attribute is not defined, as it is+ difficult to distinguish from the node-based 'Orientation'+ 'Attribute'; also, its behaviour is duplicated by 'Rotate'.++ -}+module Data.GraphViz.Attributes+ ( -- * The actual /Dot/ attributes.+ Attribute(..)+ , Attributes+ -- ** Validity functions on @Attribute@ values.+ , usedByGraphs+ , usedBySubGraphs+ , usedByClusters+ , usedByNodes+ , usedByEdges+ -- * Value types for @Attribute@s.+ , EscString+ , URL(..)+ , ArrowType(..)+ , AspectType(..)+ , Rect(..)+ , ClusterMode(..)+ , DirType(..)+ , DEConstraints(..)+ , DPoint(..)+ , ModeType(..)+ , Model(..)+ , Label(..)+ , Point(..)+ , Overlap(..)+ , LayerRange(..)+ , LayerID(..)+ , LayerList(..)+ , OutputMode(..)+ , Pack(..)+ , PackMode(..)+ , Pos(..)+ , EdgeType(..)+ , PageDir(..)+ , Spline(..)+ , QuadType(..)+ , Root(..)+ , RankType(..)+ , RankDir(..)+ , Shape(..)+ , SmoothType(..)+ , StartType(..)+ , STStyle(..)+ , StyleItem(..)+ , StyleName(..)+ , PortPos(..)+ , CompassPoint(..)+ , ViewPort(..)+ , FocusType(..)+ , VerticalPlacement(..)+ , ScaleType(..)+ , Justification(..)+ , Ratios(..)+ , module Data.GraphViz.Attributes.Colors+ -- * Types representing the Dot grammar for @ArrowType@.+ , ArrowShape(..)+ , ArrowModifier(..)+ , ArrowFill(..)+ , ArrowSide(..)+ -- ** Default @ArrowType@ aliases.+ -- *** The 9 primitive @ArrowShape@s.+ , box+ , crow+ , diamond+ , dotArrow+ , inv+ , noArrow+ , normal+ , tee+ , vee+ -- *** 5 derived Arrows.+ , oDot+ , invDot+ , invODot+ , oBox+ , oDiamond+ -- *** 5 supported cases for backwards compatibility+ , eDiamond+ , openArr+ , halfOpen+ , emptyArr+ , invEmpty+ -- ** @ArrowModifier@ instances+ , noMods+ , openMod+ -- * Other exported functions\/values+ , defLayerSep+ , notLayerSep+ ) where++import Data.GraphViz.Attributes.Colors+import Data.GraphViz.Util+import Data.GraphViz.Parsing+import Data.GraphViz.Printing++import Data.Char(toLower)+import Data.Maybe(isJust)+import Control.Arrow(first)+import Control.Monad(liftM, liftM2)++-- -----------------------------------------------------------------------------++{- |++ These attributes have been implemented in a /permissive/ manner:+ that is, rather than split them up based on which type of value+ they are allowed, they have all been included in the one data type,+ with functions to determine if they are indeed valid for what+ they're being applied to.++ To interpret the /Valid for/ listings:++ [@G@] Valid for Graphs.++ [@C@] Valid for Clusters.++ [@S@] Valid for Sub-Graphs (and also Clusters).++ [@N@] Valid for Nodes.++ [@E@] Valid for Edges.++ The /Default/ listings are those that the various Graphviz commands+ use if that 'Attribute' isn't specified (in cases where this is+ /none/, this is equivalent to a 'Nothing' value; that is, no value+ is used). The /Parsing Default/ listings represent what value is+ used (i.e. corresponds to 'True') when the 'Attribute' name is+ listed on its own in /Dot/ source code.+-}+data Attribute+ = Damping Double -- ^ /Valid for/: G; /Default/: @0.99@; /Minimum/: @0.0@; /Notes/: neato only+ | K Double -- ^ /Valid for/: GC; /Default/: @0.3@; /Minimum/: @0@; /Notes/: sfdp, fdp only+ | URL URL -- ^ /Valid for/: ENGC; /Default/: none; /Notes/: svg, postscript, map only+ | ArrowHead ArrowType -- ^ /Valid for/: E; /Default/: @'normal'@+ | ArrowSize Double -- ^ /Valid for/: E; /Default/: @1.0@; /Minimum/: @0.0@+ | ArrowTail ArrowType -- ^ /Valid for/: E; /Default/: @'normal'@+ | Aspect AspectType -- ^ /Valid for/: G; /Notes/: dot only+ | Bb Rect -- ^ /Valid for/: G; /Notes/: write only+ | BgColor Color -- ^ /Valid for/: GC; /Default/: X11Color 'Transparent'+ | Center Bool -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'True'+ | Charset String -- ^ /Valid for/: G; /Default/: @\"UTF-8\"@+ | ClusterRank ClusterMode -- ^ /Valid for/: G; /Default/: @'Local'@; /Notes/: dot only+ | ColorScheme ColorScheme -- ^ /Valid for/: ENCG; /Default/: @'X11'@+ | Color [Color] -- ^ /Valid for/: ENC; /Default/: @X11Color 'Black'@+ | Comment String -- ^ /Valid for/: ENG; /Default/: @\"\"@+ | Compound Bool -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'True'; /Notes/: dot only+ | Concentrate Bool -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'True'+ | Constraint Bool -- ^ /Valid for/: E; /Default/: @'True'@; /Parsing Default/: 'True'; /Notes/: dot only+ | Decorate Bool -- ^ /Valid for/: E; /Default/: @'False'@; /Parsing Default/: 'True'+ | DefaultDist Double -- ^ /Valid for/: G; /Default/: @1+(avg. len)*sqrt(|V|)@; /Minimum/: @epsilon@; /Notes/: neato only+ | Dimen Int -- ^ /Valid for/: G; /Default/: @2@; /Minimum/: @2@; /Notes/: sfdp, fdp, neato only+ | Dim Int -- ^ /Valid for/: G; /Default/: @2@; /Minimum/: @2@; /Notes/: sfdp, fdp, neato only+ | Dir DirType -- ^ /Valid for/: E; /Default/: @'Forward'@ (directed), @'NoDir'@ (undirected)+ | DirEdgeConstraints DEConstraints -- ^ /Valid for/: G; /Default/: @'NoConstraints'@; /Parsing Default/: 'EdgeConstraints'; /Notes/: neato only+ | Distortion Double -- ^ /Valid for/: N; /Default/: @0.0@; /Minimum/: @-100.0@+ | DPI Double -- ^ /Valid for/: G; /Default/: @96.0@, @0.0@; /Notes/: svg, bitmap output only; \"resolution\" is a synonym+ | EdgeURL URL -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, map only+ | EdgeTarget EscString -- ^ /Valid for/: E; /Default/: none; /Notes/: svg, map only+ | EdgeTooltip EscString -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, cmap only+ | Epsilon Double -- ^ /Valid for/: G; /Default/: @.0001 * # nodes@ (@mode == 'KK'@), @.0001@ (@mode == 'Major'@); /Notes/: neato only+ | ESep DPoint -- ^ /Valid for/: G; /Default/: @+3@; /Notes/: not dot+ | FillColor Color -- ^ /Valid for/: NC; /Default/: @X11Color 'LightGray'@ (nodes), @X11Color 'Black'@ (clusters)+ | FixedSize Bool -- ^ /Valid for/: N; /Default/: @'False'@; /Parsing Default/: 'True'+ | FontColor Color -- ^ /Valid for/: ENGC; /Default/: @X11Color 'Black'@+ | FontName String -- ^ /Valid for/: ENGC; /Default/: @\"Times-Roman\"@+ | FontNames String -- ^ /Valid for/: G; /Default/: @\"\"@; /Notes/: svg only+ | FontPath String -- ^ /Valid for/: G; /Default/: system-dependent+ | FontSize Double -- ^ /Valid for/: ENGC; /Default/: @14.0@; /Minimum/: @1.0@+ | Group String -- ^ /Valid for/: N; /Default/: @\"\"@; /Notes/: dot only+ | HeadURL URL -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, map only+ | HeadClip Bool -- ^ /Valid for/: E; /Default/: @'True'@; /Parsing Default/: 'True'+ | HeadLabel Label -- ^ /Valid for/: E; /Default/: @\"\"@+ | HeadPort PortPos -- ^ /Valid for/: E; /Default/: @'PP' 'CenterPoint'@+ | HeadTarget EscString -- ^ /Valid for/: E; /Default/: none; /Notes/: svg, map only+ | HeadTooltip EscString -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, cmap only+ | Height Double -- ^ /Valid for/: N; /Default/: @0.5@; /Minimum/: @0.02@+ | ID Label -- ^ /Valid for/: GNE; /Default/: @\"\"@; /Notes/: svg, postscript, map only+ | Image String -- ^ /Valid for/: N; /Default/: @\"\"@+ | ImageScale ScaleType -- ^ /Valid for/: N; /Default/: @'NoScale'@; /Parsing Default/: 'UniformScale'+ | LabelURL URL -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, map only+ | LabelAngle Double -- ^ /Valid for/: E; /Default/: @-25.0@; /Minimum/: @-180.0@+ | LabelDistance Double -- ^ /Valid for/: E; /Default/: @1.0@; /Minimum/: @0.0@+ | LabelFloat Bool -- ^ /Valid for/: E; /Default/: @'False'@; /Parsing Default/: 'True'+ | LabelFontColor Color -- ^ /Valid for/: E; /Default/: @X11Color 'Black'@+ | LabelFontName String -- ^ /Valid for/: E; /Default/: @\"Times-Roman\"@+ | LabelFontSize Double -- ^ /Valid for/: E; /Default/: @14.0@; /Minimum/: @1.0@+ | LabelJust Justification -- ^ /Valid for/: GC; /Default/: @'JCenter'@+ | LabelLoc VerticalPlacement -- ^ /Valid for/: GCN; /Default/: @'VTop'@ (clusters), @'VBottom'@ (root graphs), @'VCenter'@ (nodes)+ | LabelTarget EscString -- ^ /Valid for/: E; /Default/: none; /Notes/: svg, map only+ | LabelTooltip EscString -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, cmap only+ | Label Label -- ^ /Valid for/: ENGC; /Default/: @'StrLabel' \"\N\"@ (nodes), @'StrLabel' \"\"@ (otherwise)+ | Landscape Bool -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'True'+ | LayerSep String -- ^ /Valid for/: G; /Default/: @\" :\t\"@+ | Layers LayerList -- ^ /Valid for/: G; /Default/: @\"\"@+ | Layer LayerRange -- ^ /Valid for/: EN; /Default/: @\"\"@+ | Layout String -- ^ /Valid for/: G; /Default/: @\"\"@+ | Len Double -- ^ /Valid for/: E; /Default/: @1.0@ (neato), @0.3@ (fdp); /Notes/: fdp, neato only+ | LevelsGap Double -- ^ /Valid for/: G; /Default/: @0.0@; /Notes/: neato only+ | Levels Int -- ^ /Valid for/: G; /Default/: @MAXINT@; /Minimum/: @0@; /Notes/: sfdp only+ | LHead String -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: dot only+ | LPos Point -- ^ /Valid for/: EGC; /Notes/: write only+ | LTail String -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: dot only+ | Margin DPoint -- ^ /Valid for/: NG; /Default/: device-dependent+ | MaxIter Int -- ^ /Valid for/: G; /Default/: @100 * # nodes@ (@mode == 'KK'@), @200@ (@mode == 'Major'@), @600@ (fdp); /Notes/: fdp, neato only+ | MCLimit Double -- ^ /Valid for/: G; /Default/: @1.0@; /Notes/: dot only+ | MinDist Double -- ^ /Valid for/: G; /Default/: @1.0@; /Minimum/: @0.0@; /Notes/: circo only+ | MinLen Int -- ^ /Valid for/: E; /Default/: @1@; /Minimum/: @0@; /Notes/: dot only+ | Model Model -- ^ /Valid for/: G; /Default/: @'ShortPath'@; /Notes/: neato only+ | Mode ModeType -- ^ /Valid for/: G; /Default/: @'Major'@; /Notes/: neato only+ | Mosek Bool -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'True'; /Notes/: neato only; requires the Mosek software+ | NodeSep Double -- ^ /Valid for/: G; /Default/: @0.25@; /Minimum/: @0.02@; /Notes/: dot only+ | NoJustify Bool -- ^ /Valid for/: GCNE; /Default/: @'False'@; /Parsing Default/: 'True'+ | Normalize Bool -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'True'; /Notes/: not dot+ | Nslimit1 Double -- ^ /Valid for/: G; /Notes/: dot only+ | Nslimit Double -- ^ /Valid for/: G; /Notes/: dot only+ | Ordering String -- ^ /Valid for/: G; /Default/: @\"\"@; /Notes/: dot only+ | Orientation Double -- ^ /Valid for/: N; /Default/: @0.0@; /Minimum/: @360.0@+ | OutputOrder OutputMode -- ^ /Valid for/: G; /Default/: @'BreadthFirst'@+ | OverlapScaling Double -- ^ /Valid for/: G; /Default/: @-4@; /Minimum/: @-1.0e10@; /Notes/: prism only+ | Overlap Overlap -- ^ /Valid for/: G; /Default/: @'KeepOverlaps'@; /Parsing Default/: 'KeepOverlaps'; /Notes/: not dot+ | PackMode PackMode -- ^ /Valid for/: G; /Default/: @'PackNode'@; /Notes/: not dot+ | Pack Pack -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'DoPack'; /Notes/: not dot+ | Pad DPoint -- ^ /Valid for/: G; /Default/: @'DVal' 0.0555@ (4 points)+ | PageDir PageDir -- ^ /Valid for/: G; /Default/: @'BL'@+ | Page Point -- ^ /Valid for/: G+ | PenColor Color -- ^ /Valid for/: C; /Default/: @X11Color 'Black'@+ | PenWidth Double -- ^ /Valid for/: CNE; /Default/: @1.0@; /Minimum/: @0.0@+ | Peripheries Int -- ^ /Valid for/: NC; /Default/: shape default (nodes), @1@ (clusters); /Minimum/: 0+ | Pin Bool -- ^ /Valid for/: N; /Default/: @'False'@; /Parsing Default/: 'True'; /Notes/: fdp, neato only+ | Pos Pos -- ^ /Valid for/: EN+ | QuadTree QuadType -- ^ /Valid for/: G; /Default/: @'NormalQT'@; /Parsing Default/: 'NormalQT'; /Notes/: sfdp only+ | Quantum Double -- ^ /Valid for/: G; /Default/: @0.0@; /Minimum/: @0.0@+ | RankDir RankDir -- ^ /Valid for/: G; /Default/: @'TB'@; /Notes/: dot only+ | RankSep Double -- ^ /Valid for/: G; /Default/: @0.5@ (dot), @1.0@ (twopi); /Minimum/: 0.02; /Notes/: twopi, dot only+ | Rank RankType -- ^ /Valid for/: S; /Notes/: dot only+ | Ratio Ratios -- ^ /Valid for/: G+ | Rects Rect -- ^ /Valid for/: N; /Notes/: write only+ | Regular Bool -- ^ /Valid for/: N; /Default/: @'False'@; /Parsing Default/: 'True'+ | ReMinCross Bool -- ^ /Valid for/: G; /Default/: @'False'@; /Parsing Default/: 'True'; /Notes/: dot only+ | RepulsiveForce Double -- ^ /Valid for/: G; /Default/: @1.0@; /Minimum/: @0.0@; /Notes/: sfdp only+ | Root Root -- ^ /Valid for/: GN; /Default/: @'NodeName' \"\"@ (graphs), @'NotCentral'@ (nodes); /Parsing Default/: 'IsCentral'; /Notes/: circo, twopi only+ | Rotate Int -- ^ /Valid for/: G; /Default/: @0@+ | SameHead String -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: dot only+ | SameTail String -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: dot only+ | SamplePoints Int -- ^ /Valid for/: N; /Default/: @8@ (output), @20@ (overlap and image maps)+ | SearchSize Int -- ^ /Valid for/: G; /Default/: @30@; /Notes/: dot only+ | Sep DPoint -- ^ /Valid for/: G; /Default/: @+4@; /Notes/: not dot+ | ShapeFile String -- ^ /Valid for/: N; /Default/: @\"\"@+ | Shape Shape -- ^ /Valid for/: N; /Default/: @'Ellipse'@+ | ShowBoxes Int -- ^ /Valid for/: ENG; /Default/: @0@; /Minimum/: @0@; /Notes/: dot only+ | Sides Int -- ^ /Valid for/: N; /Default/: @4@; /Minimum/: @0@+ | Size Point -- ^ /Valid for/: G+ | Skew Double -- ^ /Valid for/: N; /Default/: @0.0@; /Minimum/: @-100.0@+ | Smoothing SmoothType -- ^ /Valid for/: G; /Default/: @'NoSmooth'@; /Notes/: sfdp only+ | SortV Int -- ^ /Valid for/: GCN; /Default/: @0@; /Minimum/: @0@+ | Splines EdgeType -- ^ /Valid for/: G; /Parsing Default/: 'SplineEdges'+ | Start StartType -- ^ /Valid for/: G; /Default/: @\"\"@; /Notes/: fdp, neato only+ | StyleSheet String -- ^ /Valid for/: G; /Default/: @\"\"@; /Notes/: svg only+ | Style [StyleItem] -- ^ /Valid for/: ENC+ | TailURL URL -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, map only+ | TailClip Bool -- ^ /Valid for/: E; /Default/: @'True'@; /Parsing Default/: 'True'+ | TailLabel Label -- ^ /Valid for/: E; /Default/: @\"\"@+ | TailPort PortPos -- ^ /Valid for/: E; /Default/: center+ | TailTarget EscString -- ^ /Valid for/: E; /Default/: none; /Notes/: svg, map only+ | TailTooltip EscString -- ^ /Valid for/: E; /Default/: @\"\"@; /Notes/: svg, cmap only+ | Target EscString -- ^ /Valid for/: ENGC; /Default/: none; /Notes/: svg, map only+ | Tooltip EscString -- ^ /Valid for/: NEC; /Default/: @\"\"@; /Notes/: svg, cmap only+ | TrueColor Bool -- ^ /Valid for/: G; /Parsing Default/: 'True'; /Notes/: bitmap output only+ | Vertices [Point] -- ^ /Valid for/: N; /Notes/: write only+ | ViewPort ViewPort -- ^ /Valid for/: G; /Default/: none+ | VoroMargin Double -- ^ /Valid for/: G; /Default/: @0.05@; /Minimum/: @0.0@; /Notes/: not dot+ | Weight Double -- ^ /Valid for/: E; /Default/: @1.0@; /Minimum/: @0@ (dot), @1@ (neato,fdp,sfdp)+ | Width Double -- ^ /Valid for/: N; /Default/: @0.75@; /Minimum/: @0.01@+ | Z Double -- ^ /Valid for/: N; /Default/: @0.0@; /Minimum/: @-MAXFLOAT@, @-1000@+ deriving (Eq, Ord, Show, Read)++type Attributes = [Attribute]++instance PrintDot Attribute where+ unqtDot (Damping v) = printField "Damping" v+ unqtDot (K v) = printField "K" v+ unqtDot (URL v) = printField "URL" v+ unqtDot (ArrowHead v) = printField "arrowhead" v+ unqtDot (ArrowSize v) = printField "arrowsize" v+ unqtDot (ArrowTail v) = printField "arrowtail" v+ unqtDot (Aspect v) = printField "aspect" v+ unqtDot (Bb v) = printField "bb" v+ unqtDot (BgColor v) = printField "bgcolor" v+ unqtDot (Center v) = printField "center" v+ unqtDot (Charset v) = printField "charset" v+ unqtDot (ClusterRank v) = printField "clusterrank" v+ unqtDot (ColorScheme v) = printField "colorscheme" v+ unqtDot (Color v) = printField "color" v+ unqtDot (Comment v) = printField "comment" v+ unqtDot (Compound v) = printField "compound" v+ unqtDot (Concentrate v) = printField "concentrate" v+ unqtDot (Constraint v) = printField "constraint" v+ unqtDot (Decorate v) = printField "decorate" v+ unqtDot (DefaultDist v) = printField "defaultdist" v+ unqtDot (Dimen v) = printField "dimen" v+ unqtDot (Dim v) = printField "dim" v+ unqtDot (Dir v) = printField "dir" v+ unqtDot (DirEdgeConstraints v) = printField "diredgeconstraints" v+ unqtDot (Distortion v) = printField "distortion" v+ unqtDot (DPI v) = printField "dpi" v+ unqtDot (EdgeURL v) = printField "edgeURL" v+ unqtDot (EdgeTarget v) = printField "edgetarget" v+ unqtDot (EdgeTooltip v) = printField "edgetooltip" v+ unqtDot (Epsilon v) = printField "epsilon" v+ unqtDot (ESep v) = printField "esep" v+ unqtDot (FillColor v) = printField "fillcolor" v+ unqtDot (FixedSize v) = printField "fixedsize" v+ unqtDot (FontColor v) = printField "fontcolor" v+ unqtDot (FontName v) = printField "fontname" v+ unqtDot (FontNames v) = printField "fontnames" v+ unqtDot (FontPath v) = printField "fontpath" v+ unqtDot (FontSize v) = printField "fontsize" v+ unqtDot (Group v) = printField "group" v+ unqtDot (HeadURL v) = printField "headURL" v+ unqtDot (HeadClip v) = printField "headclip" v+ unqtDot (HeadLabel v) = printField "headlabel" v+ unqtDot (HeadPort v) = printField "headport" v+ unqtDot (HeadTarget v) = printField "headtarget" v+ unqtDot (HeadTooltip v) = printField "headtooltip" v+ unqtDot (Height v) = printField "height" v+ unqtDot (ID v) = printField "id" v+ unqtDot (Image v) = printField "image" v+ unqtDot (ImageScale v) = printField "imagescale" v+ unqtDot (LabelURL v) = printField "labelURL" v+ unqtDot (LabelAngle v) = printField "labelangle" v+ unqtDot (LabelDistance v) = printField "labeldistance" v+ unqtDot (LabelFloat v) = printField "labelfloat" v+ unqtDot (LabelFontColor v) = printField "labelfontcolor" v+ unqtDot (LabelFontName v) = printField "labelfontname" v+ unqtDot (LabelFontSize v) = printField "labelfontsize" v+ unqtDot (LabelJust v) = printField "labeljust" v+ unqtDot (LabelLoc v) = printField "labelloc" v+ unqtDot (LabelTarget v) = printField "labeltarget" v+ unqtDot (LabelTooltip v) = printField "labeltooltip" v+ unqtDot (Label v) = printField "label" v+ unqtDot (Landscape v) = printField "landscape" v+ unqtDot (LayerSep v) = printField "layersep" v+ unqtDot (Layers v) = printField "layers" v+ unqtDot (Layer v) = printField "layer" v+ unqtDot (Layout v) = printField "layout" v+ unqtDot (Len v) = printField "len" v+ unqtDot (LevelsGap v) = printField "levelsgap" v+ unqtDot (Levels v) = printField "levels" v+ unqtDot (LHead v) = printField "lhead" v+ unqtDot (LPos v) = printField "lp" v+ unqtDot (LTail v) = printField "ltail" v+ unqtDot (Margin v) = printField "margin" v+ unqtDot (MaxIter v) = printField "maxiter" v+ unqtDot (MCLimit v) = printField "mclimit" v+ unqtDot (MinDist v) = printField "mindist" v+ unqtDot (MinLen v) = printField "minlen" v+ unqtDot (Model v) = printField "model" v+ unqtDot (Mode v) = printField "mode" v+ unqtDot (Mosek v) = printField "mosek" v+ unqtDot (NodeSep v) = printField "nodesep" v+ unqtDot (NoJustify v) = printField "nojustify" v+ unqtDot (Normalize v) = printField "normalize" v+ unqtDot (Nslimit1 v) = printField "nslimit1" v+ unqtDot (Nslimit v) = printField "nslimit" v+ unqtDot (Ordering v) = printField "ordering" v+ unqtDot (Orientation v) = printField "orientation" v+ unqtDot (OutputOrder v) = printField "outputorder" v+ unqtDot (OverlapScaling v) = printField "overlap_scaling" v+ unqtDot (Overlap v) = printField "overlap" v+ unqtDot (PackMode v) = printField "packmode" v+ unqtDot (Pack v) = printField "pack" v+ unqtDot (Pad v) = printField "pad" v+ unqtDot (PageDir v) = printField "pagedir" v+ unqtDot (Page v) = printField "page" v+ unqtDot (PenColor v) = printField "pencolor" v+ unqtDot (PenWidth v) = printField "penwidth" v+ unqtDot (Peripheries v) = printField "peripheries" v+ unqtDot (Pin v) = printField "pin" v+ unqtDot (Pos v) = printField "pos" v+ unqtDot (QuadTree v) = printField "quadtree" v+ unqtDot (Quantum v) = printField "quantum" v+ unqtDot (RankDir v) = printField "rankdir" v+ unqtDot (RankSep v) = printField "ranksep" v+ unqtDot (Rank v) = printField "rank" v+ unqtDot (Ratio v) = printField "ratio" v+ unqtDot (Rects v) = printField "rects" v+ unqtDot (Regular v) = printField "regular" v+ unqtDot (ReMinCross v) = printField "remincross" v+ unqtDot (RepulsiveForce v) = printField "repulsiveforce" v+ unqtDot (Root v) = printField "root" v+ unqtDot (Rotate v) = printField "rotate" v+ unqtDot (SameHead v) = printField "samehead" v+ unqtDot (SameTail v) = printField "sametail" v+ unqtDot (SamplePoints v) = printField "samplepoints" v+ unqtDot (SearchSize v) = printField "searchsize" v+ unqtDot (Sep v) = printField "sep" v+ unqtDot (ShapeFile v) = printField "shapefile" v+ unqtDot (Shape v) = printField "shape" v+ unqtDot (ShowBoxes v) = printField "showboxes" v+ unqtDot (Sides v) = printField "sides" v+ unqtDot (Size v) = printField "size" v+ unqtDot (Skew v) = printField "skew" v+ unqtDot (Smoothing v) = printField "smoothing" v+ unqtDot (SortV v) = printField "sortv" v+ unqtDot (Splines v) = printField "splines" v+ unqtDot (Start v) = printField "start" v+ unqtDot (StyleSheet v) = printField "stylesheet" v+ unqtDot (Style v) = printField "style" v+ unqtDot (TailURL v) = printField "tailURL" v+ unqtDot (TailClip v) = printField "tailclip" v+ unqtDot (TailLabel v) = printField "taillabel" v+ unqtDot (TailPort v) = printField "tailport" v+ unqtDot (TailTarget v) = printField "tailtarget" v+ unqtDot (TailTooltip v) = printField "tailtooltip" v+ unqtDot (Target v) = printField "target" v+ unqtDot (Tooltip v) = printField "tooltip" v+ unqtDot (TrueColor v) = printField "truecolor" v+ unqtDot (Vertices v) = printField "vertices" v+ unqtDot (ViewPort v) = printField "viewport" v+ unqtDot (VoroMargin v) = printField "voro_margin" v+ unqtDot (Weight v) = printField "weight" v+ unqtDot (Width v) = printField "width" v+ unqtDot (Z v) = printField "z" v++ listToDot = unqtListToDot++instance ParseDot Attribute where+ parseUnqt = oneOf [ liftM Damping $ parseField "Damping"+ , liftM K $ parseField "K"+ , liftM URL $ parseFields ["URL", "href"]+ , liftM ArrowHead $ parseField "arrowhead"+ , liftM ArrowSize $ parseField "arrowsize"+ , liftM ArrowTail $ parseField "arrowtail"+ , liftM Aspect $ parseField "aspect"+ , liftM Bb $ parseField "bb"+ , liftM BgColor $ parseField "bgcolor"+ , liftM Center $ parseFieldBool "center"+ , liftM Charset $ parseField "charset"+ , liftM ClusterRank $ parseField "clusterrank"+ , liftM ColorScheme $ parseField "colorscheme"+ , liftM Color $ parseField "color"+ , liftM Comment $ parseField "comment"+ , liftM Compound $ parseFieldBool "compound"+ , liftM Concentrate $ parseFieldBool "concentrate"+ , liftM Constraint $ parseFieldBool "constraint"+ , liftM Decorate $ parseFieldBool "decorate"+ , liftM DefaultDist $ parseField "defaultdist"+ , liftM Dimen $ parseField "dimen"+ , liftM Dim $ parseField "dim"+ , liftM Dir $ parseField "dir"+ , liftM DirEdgeConstraints $ parseFieldDef EdgeConstraints "diredgeconstraints"+ , liftM Distortion $ parseField "distortion"+ , liftM DPI $ parseFields ["dpi", "resolution"]+ , liftM EdgeURL $ parseFields ["edgeURL", "edgehref"]+ , liftM EdgeTarget $ parseField "edgetarget"+ , liftM EdgeTooltip $ parseField "edgetooltip"+ , liftM Epsilon $ parseField "epsilon"+ , liftM ESep $ parseField "esep"+ , liftM FillColor $ parseField "fillcolor"+ , liftM FixedSize $ parseFieldBool "fixedsize"+ , liftM FontColor $ parseField "fontcolor"+ , liftM FontName $ parseField "fontname"+ , liftM FontNames $ parseField "fontnames"+ , liftM FontPath $ parseField "fontpath"+ , liftM FontSize $ parseField "fontsize"+ , liftM Group $ parseField "group"+ , liftM HeadURL $ parseFields ["headURL", "headhref"]+ , liftM HeadClip $ parseFieldBool "headclip"+ , liftM HeadLabel $ parseField "headlabel"+ , liftM HeadPort $ parseField "headport"+ , liftM HeadTarget $ parseField "headtarget"+ , liftM HeadTooltip $ parseField "headtooltip"+ , liftM Height $ parseField "height"+ , liftM ID $ parseField "id"+ , liftM Image $ parseField "image"+ , liftM ImageScale $ parseFieldDef UniformScale "imagescale"+ , liftM LabelURL $ parseFields ["labelURL", "labelhref"]+ , liftM LabelAngle $ parseField "labelangle"+ , liftM LabelDistance $ parseField "labeldistance"+ , liftM LabelFloat $ parseFieldBool "labelfloat"+ , liftM LabelFontColor $ parseField "labelfontcolor"+ , liftM LabelFontName $ parseField "labelfontname"+ , liftM LabelFontSize $ parseField "labelfontsize"+ , liftM LabelJust $ parseField "labeljust"+ , liftM LabelLoc $ parseField "labelloc"+ , liftM LabelTarget $ parseField "labeltarget"+ , liftM LabelTooltip $ parseField "labeltooltip"+ , liftM Label $ parseField "label"+ , liftM Landscape $ parseFieldBool "landscape"+ , liftM LayerSep $ parseField "layersep"+ , liftM Layers $ parseField "layers"+ , liftM Layer $ parseField "layer"+ , liftM Layout $ parseField "layout"+ , liftM Len $ parseField "len"+ , liftM LevelsGap $ parseField "levelsgap"+ , liftM Levels $ parseField "levels"+ , liftM LHead $ parseField "lhead"+ , liftM LPos $ parseField "lp"+ , liftM LTail $ parseField "ltail"+ , liftM Margin $ parseField "margin"+ , liftM MaxIter $ parseField "maxiter"+ , liftM MCLimit $ parseField "mclimit"+ , liftM MinDist $ parseField "mindist"+ , liftM MinLen $ parseField "minlen"+ , liftM Model $ parseField "model"+ , liftM Mode $ parseField "mode"+ , liftM Mosek $ parseFieldBool "mosek"+ , liftM NodeSep $ parseField "nodesep"+ , liftM NoJustify $ parseFieldBool "nojustify"+ , liftM Normalize $ parseFieldBool "normalize"+ , liftM Nslimit1 $ parseField "nslimit1"+ , liftM Nslimit $ parseField "nslimit"+ , liftM Ordering $ parseField "ordering"+ , liftM Orientation $ parseField "orientation"+ , liftM OutputOrder $ parseField "outputorder"+ , liftM OverlapScaling $ parseField "overlap_scaling"+ , liftM Overlap $ parseFieldDef KeepOverlaps "overlap"+ , liftM PackMode $ parseField "packmode"+ , liftM Pack $ parseFieldDef DoPack "pack"+ , liftM Pad $ parseField "pad"+ , liftM PageDir $ parseField "pagedir"+ , liftM Page $ parseField "page"+ , liftM PenColor $ parseField "pencolor"+ , liftM PenWidth $ parseField "penwidth"+ , liftM Peripheries $ parseField "peripheries"+ , liftM Pin $ parseFieldBool "pin"+ , liftM Pos $ parseField "pos"+ , liftM QuadTree $ parseFieldDef NormalQT "quadtree"+ , liftM Quantum $ parseField "quantum"+ , liftM RankDir $ parseField "rankdir"+ , liftM RankSep $ parseField "ranksep"+ , liftM Rank $ parseField "rank"+ , liftM Ratio $ parseField "ratio"+ , liftM Rects $ parseField "rects"+ , liftM Regular $ parseFieldBool "regular"+ , liftM ReMinCross $ parseFieldBool "remincross"+ , liftM RepulsiveForce $ parseField "repulsiveforce"+ , liftM Root $ parseFieldDef IsCentral "root"+ , liftM Rotate $ parseField "rotate"+ , liftM SameHead $ parseField "samehead"+ , liftM SameTail $ parseField "sametail"+ , liftM SamplePoints $ parseField "samplepoints"+ , liftM SearchSize $ parseField "searchsize"+ , liftM Sep $ parseField "sep"+ , liftM ShapeFile $ parseField "shapefile"+ , liftM Shape $ parseField "shape"+ , liftM ShowBoxes $ parseField "showboxes"+ , liftM Sides $ parseField "sides"+ , liftM Size $ parseField "size"+ , liftM Skew $ parseField "skew"+ , liftM Smoothing $ parseField "smoothing"+ , liftM SortV $ parseField "sortv"+ , liftM Splines $ parseFieldDef SplineEdges "splines"+ , liftM Start $ parseField "start"+ , liftM StyleSheet $ parseField "stylesheet"+ , liftM Style $ parseField "style"+ , liftM TailURL $ parseFields ["tailURL", "tailhref"]+ , liftM TailClip $ parseFieldBool "tailclip"+ , liftM TailLabel $ parseField "taillabel"+ , liftM TailPort $ parseField "tailport"+ , liftM TailTarget $ parseField "tailtarget"+ , liftM TailTooltip $ parseField "tailtooltip"+ , liftM Target $ parseField "target"+ , liftM Tooltip $ parseField "tooltip"+ , liftM TrueColor $ parseFieldBool "truecolor"+ , liftM Vertices $ parseField "vertices"+ , liftM ViewPort $ parseField "viewport"+ , liftM VoroMargin $ parseField "voro_margin"+ , liftM Weight $ parseField "weight"+ , liftM Width $ parseField "width"+ , liftM Z $ parseField "z"+ ]++ parse = parseUnqt++ parseList = parseUnqtList++-- | Determine if this Attribute is valid for use with Graphs.+usedByGraphs :: Attribute -> Bool+usedByGraphs Damping{} = True+usedByGraphs K{} = True+usedByGraphs URL{} = True+usedByGraphs Aspect{} = True+usedByGraphs Bb{} = True+usedByGraphs BgColor{} = True+usedByGraphs Center{} = True+usedByGraphs Charset{} = True+usedByGraphs ClusterRank{} = True+usedByGraphs ColorScheme{} = True+usedByGraphs Comment{} = True+usedByGraphs Compound{} = True+usedByGraphs Concentrate{} = True+usedByGraphs DefaultDist{} = True+usedByGraphs Dimen{} = True+usedByGraphs Dim{} = True+usedByGraphs DirEdgeConstraints{} = True+usedByGraphs DPI{} = True+usedByGraphs Epsilon{} = True+usedByGraphs ESep{} = True+usedByGraphs FontColor{} = True+usedByGraphs FontName{} = True+usedByGraphs FontNames{} = True+usedByGraphs FontPath{} = True+usedByGraphs FontSize{} = True+usedByGraphs ID{} = True+usedByGraphs LabelJust{} = True+usedByGraphs LabelLoc{} = True+usedByGraphs Label{} = True+usedByGraphs Landscape{} = True+usedByGraphs LayerSep{} = True+usedByGraphs Layers{} = True+usedByGraphs Layout{} = True+usedByGraphs LevelsGap{} = True+usedByGraphs Levels{} = True+usedByGraphs LPos{} = True+usedByGraphs Margin{} = True+usedByGraphs MaxIter{} = True+usedByGraphs MCLimit{} = True+usedByGraphs MinDist{} = True+usedByGraphs Model{} = True+usedByGraphs Mode{} = True+usedByGraphs Mosek{} = True+usedByGraphs NodeSep{} = True+usedByGraphs NoJustify{} = True+usedByGraphs Normalize{} = True+usedByGraphs Nslimit1{} = True+usedByGraphs Nslimit{} = True+usedByGraphs Ordering{} = True+usedByGraphs OutputOrder{} = True+usedByGraphs OverlapScaling{} = True+usedByGraphs Overlap{} = True+usedByGraphs PackMode{} = True+usedByGraphs Pack{} = True+usedByGraphs Pad{} = True+usedByGraphs PageDir{} = True+usedByGraphs Page{} = True+usedByGraphs QuadTree{} = True+usedByGraphs Quantum{} = True+usedByGraphs RankDir{} = True+usedByGraphs RankSep{} = True+usedByGraphs Ratio{} = True+usedByGraphs ReMinCross{} = True+usedByGraphs RepulsiveForce{} = True+usedByGraphs Root{} = True+usedByGraphs Rotate{} = True+usedByGraphs SearchSize{} = True+usedByGraphs Sep{} = True+usedByGraphs ShowBoxes{} = True+usedByGraphs Size{} = True+usedByGraphs Smoothing{} = True+usedByGraphs SortV{} = True+usedByGraphs Splines{} = True+usedByGraphs Start{} = True+usedByGraphs StyleSheet{} = True+usedByGraphs Target{} = True+usedByGraphs TrueColor{} = True+usedByGraphs ViewPort{} = True+usedByGraphs VoroMargin{} = True+usedByGraphs _ = False++-- | Determine if this Attribute is valid for use with Clusters.+usedByClusters :: Attribute -> Bool+usedByClusters K{} = True+usedByClusters URL{} = True+usedByClusters BgColor{} = True+usedByClusters ColorScheme{} = True+usedByClusters Color{} = True+usedByClusters FillColor{} = True+usedByClusters FontColor{} = True+usedByClusters FontName{} = True+usedByClusters FontSize{} = True+usedByClusters LabelJust{} = True+usedByClusters LabelLoc{} = True+usedByClusters Label{} = True+usedByClusters LPos{} = True+usedByClusters NoJustify{} = True+usedByClusters PenColor{} = True+usedByClusters PenWidth{} = True+usedByClusters Peripheries{} = True+usedByClusters Rank{} = True+usedByClusters SortV{} = True+usedByClusters Style{} = True+usedByClusters Target{} = True+usedByClusters Tooltip{} = True+usedByClusters _ = False++-- | Determine if this Attribute is valid for use with SubGraphs.+usedBySubGraphs :: Attribute -> Bool+usedBySubGraphs Rank{} = True+usedBySubGraphs _ = False++-- | Determine if this Attribute is valid for use with Nodes.+usedByNodes :: Attribute -> Bool+usedByNodes URL{} = True+usedByNodes ColorScheme{} = True+usedByNodes Color{} = True+usedByNodes Comment{} = True+usedByNodes Distortion{} = True+usedByNodes FillColor{} = True+usedByNodes FixedSize{} = True+usedByNodes FontColor{} = True+usedByNodes FontName{} = True+usedByNodes FontSize{} = True+usedByNodes Group{} = True+usedByNodes Height{} = True+usedByNodes ID{} = True+usedByNodes Image{} = True+usedByNodes ImageScale{} = True+usedByNodes LabelLoc{} = True+usedByNodes Label{} = True+usedByNodes Layer{} = True+usedByNodes Margin{} = True+usedByNodes NoJustify{} = True+usedByNodes Orientation{} = True+usedByNodes PenWidth{} = True+usedByNodes Peripheries{} = True+usedByNodes Pin{} = True+usedByNodes Pos{} = True+usedByNodes Rects{} = True+usedByNodes Regular{} = True+usedByNodes Root{} = True+usedByNodes SamplePoints{} = True+usedByNodes ShapeFile{} = True+usedByNodes Shape{} = True+usedByNodes ShowBoxes{} = True+usedByNodes Sides{} = True+usedByNodes Skew{} = True+usedByNodes SortV{} = True+usedByNodes Style{} = True+usedByNodes Target{} = True+usedByNodes Tooltip{} = True+usedByNodes Vertices{} = True+usedByNodes Width{} = True+usedByNodes Z{} = True+usedByNodes _ = False++-- | Determine if this Attribute is valid for use with Edges.+usedByEdges :: Attribute -> Bool+usedByEdges URL{} = True+usedByEdges ArrowHead{} = True+usedByEdges ArrowSize{} = True+usedByEdges ArrowTail{} = True+usedByEdges ColorScheme{} = True+usedByEdges Color{} = True+usedByEdges Comment{} = True+usedByEdges Constraint{} = True+usedByEdges Decorate{} = True+usedByEdges Dir{} = True+usedByEdges EdgeURL{} = True+usedByEdges EdgeTarget{} = True+usedByEdges EdgeTooltip{} = True+usedByEdges FontColor{} = True+usedByEdges FontName{} = True+usedByEdges FontSize{} = True+usedByEdges HeadURL{} = True+usedByEdges HeadClip{} = True+usedByEdges HeadLabel{} = True+usedByEdges HeadPort{} = True+usedByEdges HeadTarget{} = True+usedByEdges HeadTooltip{} = True+usedByEdges ID{} = True+usedByEdges LabelURL{} = True+usedByEdges LabelAngle{} = True+usedByEdges LabelDistance{} = True+usedByEdges LabelFloat{} = True+usedByEdges LabelFontColor{} = True+usedByEdges LabelFontName{} = True+usedByEdges LabelFontSize{} = True+usedByEdges LabelTarget{} = True+usedByEdges LabelTooltip{} = True+usedByEdges Label{} = True+usedByEdges Layer{} = True+usedByEdges Len{} = True+usedByEdges LHead{} = True+usedByEdges LPos{} = True+usedByEdges LTail{} = True+usedByEdges MinLen{} = True+usedByEdges NoJustify{} = True+usedByEdges PenWidth{} = True+usedByEdges Pos{} = True+usedByEdges SameHead{} = True+usedByEdges SameTail{} = True+usedByEdges ShowBoxes{} = True+usedByEdges Style{} = True+usedByEdges TailURL{} = True+usedByEdges TailClip{} = True+usedByEdges TailLabel{} = True+usedByEdges TailPort{} = True+usedByEdges TailTarget{} = True+usedByEdges TailTooltip{} = True+usedByEdges Target{} = True+usedByEdges Tooltip{} = True+usedByEdges Weight{} = True+usedByEdges _ = False++{- Delete to here -}+-- -----------------------------------------------------------------------------++{- |++ Some 'Attribute's (mainly label-like ones) take a 'String' argument+ that allows for extra escape codes. This library doesn't do any+ extra checks or special parsing for these escape codes, but usage+ of 'EscString' rather than 'String' indicates that the Graphviz+ tools will recognise these extra escape codes for these+ 'Attribute's.++ The extra escape codes include (note that these are all 'String's):++ [@\\N@] Replace with the name of the node (for Node 'Attribute's).++ [@\\G@] Replace with the name of the graph (for Node 'Attribute's)+ or the name of the graph or cluster, whichever is+ applicable (for Graph, Cluster and Edge 'Attribute's).++ [@\\E@] Replace with the name of the edge, formed by the two+ adjoining nodes and the edge type (for Edge 'Attribute's).++ [@\\T@] Replace with the name of the tail node (for Edge+ 'Attribute's).++ [@\\H@] Replace with the name of the head node (for Edge+ 'Attribute's).++ [@\\L@] Replace with the object's label (for all 'Attribute's).++ Also, if the 'Attribute' in question is 'Label', 'HeadLabel' or+ 'TailLabel', then @\\n@, @\\l@ and @\\r@ split the label into lines+ centered, left-justified and right-justified respectively.++ -}+type EscString = String++-- -----------------------------------------------------------------------------++-- | No checks are placed on the content of a 'URL' value; however,+-- you should ensure that it does not contain any \'@>@\' or \'@<@\'+-- characters; Graphviz might care about escaping other characters+-- properly, but for the purposes of this library the presence of+-- these characters will make it harder to parse URLs.+newtype URL = UStr { urlString :: EscString }+ deriving (Eq, Ord, Show, Read)++instance PrintDot URL where+ unqtDot = wrap (char '<') (char '>')+ -- Explicitly use text here... no quotes!+ . text . urlString++instance ParseDot URL where+ parseUnqt = liftM UStr+ $ bracket (character open)+ (character close)+ (many1 $ satisfy ((/=) close))+ where+ open = '<'+ close = '>'++ -- No quotes+ parse = parseUnqt++-- -----------------------------------------------------------------------------++-- | /Dot/ has a basic grammar of arrow shapes which allows usage of+-- up to 1,544,761 different shapes from 9 different basic+-- 'ArrowShape's. Note that whilst an explicit list is used in the+-- definition of 'ArrowType', there must be at least one tuple and a+-- maximum of 4 (since that is what is required by Dot). For more+-- information, see: <http://graphviz.org/doc/info/arrows.html>+--+-- The 19 basic arrows shown on the overall attributes page have+-- been defined below as a convenience. Parsing of the 5+-- backward-compatible special cases is also supported.+newtype ArrowType = AType [(ArrowModifier, ArrowShape)]+ deriving (Eq, Ord, Show, Read)++box, crow, diamond, dotArrow, inv, noArrow, normal, tee, vee :: ArrowType+oDot, invDot, invODot, oBox, oDiamond :: ArrowType+eDiamond, openArr, halfOpen, emptyArr, invEmpty :: ArrowType++normal = AType [(noMods, Normal)]+inv = AType [(noMods, Inv)]+dotArrow = AType [(noMods, DotArrow)]+invDot = AType [ (noMods, Inv)+ , (noMods, DotArrow)]+oDot = AType [(ArrMod OpenArrow BothSides, DotArrow)]+invODot = AType [ (noMods, Inv)+ , (openMod, DotArrow)]+noArrow = AType [(noMods, NoArrow)]+tee = AType [(noMods, Tee)]+emptyArr = AType [(openMod, Normal)]+invEmpty = AType [ (noMods, Inv)+ , (openMod, Normal)]+diamond = AType [(noMods, Diamond)]+oDiamond = AType [(openMod, Diamond)]+eDiamond = oDiamond+crow = AType [(noMods, Crow)]+box = AType [(noMods, Box)]+oBox = AType [(openMod, Box)]+openArr = vee+halfOpen = AType [(ArrMod FilledArrow LeftSide, Vee)]+vee = AType [(noMods, Vee)]++instance PrintDot ArrowType where+ unqtDot (AType mas) = hcat $ map appMod mas+ where+ appMod (m, a) = unqtDot m <> unqtDot a++instance ParseDot ArrowType where+ parseUnqt = do mas <- many1 $ do m <- parseUnqt+ a <- parseUnqt+ return (m,a)+ return $ AType mas+ `onFail`+ specialArrowParse++specialArrowParse :: Parse ArrowType+specialArrowParse = oneOf [ stringRep eDiamond "ediamond"+ , stringRep openArr "open"+ , stringRep halfOpen "halfopen"+ , stringRep emptyArr "empty"+ , stringRep invEmpty "invempty"+ ]++data ArrowShape = Box+ | Crow+ | Diamond+ | DotArrow+ | Inv+ | NoArrow+ | Normal+ | Tee+ | Vee+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ArrowShape where+ unqtDot Box = unqtDot "box"+ unqtDot Crow = unqtDot "crow"+ unqtDot Diamond = unqtDot "diamond"+ unqtDot DotArrow = unqtDot "dot"+ unqtDot Inv = unqtDot "inv"+ unqtDot NoArrow = unqtDot "none"+ unqtDot Normal = unqtDot "normal"+ unqtDot Tee = unqtDot "tee"+ unqtDot Vee = unqtDot "vee"++instance ParseDot ArrowShape where+ parseUnqt = oneOf [ stringRep Box "box"+ , stringRep Crow "crow"+ , stringRep Diamond "diamond"+ , stringRep DotArrow "dot"+ , stringRep Inv "inv"+ , stringRep NoArrow "none"+ , stringRep Normal "normal"+ , stringRep Tee "tee"+ , stringRep Vee "vee"+ ]++-- | What modifications to apply to an 'ArrowShape'.+data ArrowModifier = ArrMod { arrowFill :: ArrowFill+ , arrowSide :: ArrowSide+ }+ deriving (Eq, Ord, Show, Read)++-- | Apply no modifications to an 'ArrowShape'.+noMods :: ArrowModifier+noMods = ArrMod FilledArrow BothSides++-- | 'OpenArrow' and 'BothSides'+openMod :: ArrowModifier+openMod = ArrMod OpenArrow BothSides++instance PrintDot ArrowModifier where+ unqtDot (ArrMod f s) = unqtDot f <> unqtDot s++instance ParseDot ArrowModifier where+ parseUnqt = do f <- parseUnqt+ s <- parseUnqt+ return $ ArrMod f s++data ArrowFill = OpenArrow+ | FilledArrow+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ArrowFill where+ unqtDot OpenArrow = char 'o'+ unqtDot FilledArrow = empty++instance ParseDot ArrowFill where+ parseUnqt = liftM (bool FilledArrow OpenArrow . isJust)+ $ optional (character 'o')++ -- Not used individually+ parse = parseUnqt++-- | Represents which side (when looking towards the node the arrow is+-- pointing to) is drawn.+data ArrowSide = LeftSide+ | RightSide+ | BothSides+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ArrowSide where+ unqtDot LeftSide = char 'l'+ unqtDot RightSide = char 'r'+ unqtDot BothSides = empty++instance ParseDot ArrowSide where+ parseUnqt = liftM getSideType+ $ optional (oneOf $ map character ['l', 'r'])+ where+ getSideType = maybe BothSides+ (bool RightSide LeftSide . (==) 'l')++ -- Not used individually+ parse = parseUnqt++-- -----------------------------------------------------------------------------++data AspectType = RatioOnly Double+ | RatioPassCount Double Int+ deriving (Eq, Ord, Show, Read)++instance PrintDot AspectType where+ unqtDot (RatioOnly r) = unqtDot r+ unqtDot (RatioPassCount r p) = commaDel r p++ toDot at@RatioOnly{} = unqtDot at+ toDot at@RatioPassCount{} = doubleQuotes $ unqtDot at++instance ParseDot AspectType where+ parseUnqt = liftM (uncurry RatioPassCount) commaSepUnqt+ `onFail`+ liftM RatioOnly parseUnqt+++ parse = quotedParse (liftM (uncurry RatioPassCount) commaSepUnqt)+ `onFail`+ liftM RatioOnly parse++-- -----------------------------------------------------------------------------++data Rect = Rect Point Point+ deriving (Eq, Ord, Show, Read)++instance PrintDot Rect where+ unqtDot (Rect p1 p2) = commaDel p1 p2++ toDot = doubleQuotes . unqtDot++instance ParseDot Rect where+ parseUnqt = liftM (uncurry Rect) commaSepUnqt++ parse = quotedParse parseUnqt++-- -----------------------------------------------------------------------------++data ClusterMode = Local+ | Global+ | NoCluster+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ClusterMode where+ unqtDot Local = unqtDot "local"+ unqtDot Global = unqtDot "global"+ unqtDot NoCluster = unqtDot "none"++++instance ParseDot ClusterMode where+ parseUnqt = oneOf [ stringRep Local "local"+ , stringRep Global "global"+ , stringRep NoCluster "none"+ ]++-- -----------------------------------------------------------------------------++data DirType = Forward | Back | Both | NoDir+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot DirType where+ unqtDot Forward = unqtDot "forward"+ unqtDot Back = unqtDot "back"+ unqtDot Both = unqtDot "both"+ unqtDot NoDir = unqtDot "none"++instance ParseDot DirType where+ parseUnqt = oneOf [ stringRep Forward "forward"+ , stringRep Back "back"+ , stringRep Both "both"+ , stringRep NoDir "none"+ ]++-- -----------------------------------------------------------------------------++-- | Only when @mode == 'IpSep'@.+data DEConstraints = EdgeConstraints+ | NoConstraints+ | HierConstraints+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot DEConstraints where+ unqtDot EdgeConstraints = unqtDot True+ unqtDot NoConstraints = unqtDot False+ unqtDot HierConstraints = text "hier"++instance ParseDot DEConstraints where+ parseUnqt = liftM (bool NoConstraints EdgeConstraints) parse+ `onFail`+ stringRep HierConstraints "hier"++-- -----------------------------------------------------------------------------++-- | Either a 'Double' or a 'Point'.+data DPoint = DVal Double+ | PVal Point+ deriving (Eq, Ord, Show, Read)++instance PrintDot DPoint where+ unqtDot (DVal d) = unqtDot d+ unqtDot (PVal p) = unqtDot p++ toDot (DVal d) = toDot d+ toDot (PVal p) = toDot p++instance ParseDot DPoint where+ parseUnqt = liftM PVal parseUnqt+ `onFail`+ liftM DVal parseUnqt++ parse = liftM PVal parse+ `onFail`+ liftM DVal parse++-- -----------------------------------------------------------------------------++data ModeType = Major+ | KK+ | Hier+ | IpSep+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ModeType where+ unqtDot Major = text "major"+ unqtDot KK = text "KK"+ unqtDot Hier = text "hier"+ unqtDot IpSep = text "ipsep"++instance ParseDot ModeType where+ parseUnqt = oneOf [ stringRep Major "major"+ , stringRep KK "KK"+ , stringRep Hier "hier"+ , stringRep IpSep "ipsep"+ ]++-- -----------------------------------------------------------------------------++data Model = ShortPath+ | SubSet+ | Circuit+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot Model where+ unqtDot ShortPath = text "shortpath"+ unqtDot SubSet = text "subset"+ unqtDot Circuit = text "circuit"++instance ParseDot Model where+ parseUnqt = oneOf [ stringRep ShortPath "shortpath"+ , stringRep SubSet "subset"+ , stringRep Circuit "circuit"+ ]++-- -----------------------------------------------------------------------------++data Label = StrLabel EscString+ | URLLabel URL+ deriving (Eq, Ord, Show, Read)++instance PrintDot Label where+ unqtDot (StrLabel s) = unqtDot s+ unqtDot (URLLabel u) = unqtDot u++ toDot (StrLabel s) = toDot s+ toDot (URLLabel u) = toDot u++instance ParseDot Label where+ parseUnqt = liftM StrLabel parseUnqt+ `onFail`+ liftM URLLabel parseUnqt++ parse = liftM StrLabel parse+ `onFail`+ liftM URLLabel parse++-- -----------------------------------------------------------------------------++data Point = Point Int Int+ | PointD Double Double+ deriving (Eq, Ord, Show, Read)++instance PrintDot Point where+ unqtDot (Point x y) = commaDel x y+ unqtDot (PointD x y) = commaDel x y++ toDot = doubleQuotes . unqtDot++ unqtListToDot = hsep . map unqtDot++ listToDot = doubleQuotes . unqtListToDot++instance ParseDot Point where+ -- Need to take into account the situation where first value is an+ -- integer, second a double: if Point parsing first, then it won't+ -- parse the second number properly; but if PointD first then it+ -- will treat Int/Int as Double/Double.+ parseUnqt = intDblPoint+ `onFail`+ liftM (uncurry Point) commaSepUnqt+ `onFail`+ liftM (uncurry PointD) commaSepUnqt+ where+ intDblPoint = liftM (uncurry PointD . first fI)+ $ commaSep' parseUnqt parseStrictFloat+ fI :: Int -> Double+ fI = fromIntegral++ parse = quotedParse parseUnqt++ parseUnqtList = sepBy1 parseUnqt whitespace++-- -----------------------------------------------------------------------------++data Overlap = KeepOverlaps+ | RemoveOverlaps+ | ScaleOverlaps+ | ScaleXYOverlaps+ | PrismOverlap (Maybe Int) -- ^ Only when sfdp is available, 'Int' is non-negative+ | CompressOverlap+ | VpscOverlap+ | IpsepOverlap -- ^ Only when @mode == 'IpSep'@+ deriving (Eq, Ord, Show, Read)++instance PrintDot Overlap where+ unqtDot KeepOverlaps = unqtDot True+ unqtDot RemoveOverlaps = unqtDot False+ unqtDot ScaleOverlaps = text "scale"+ unqtDot ScaleXYOverlaps = text "scalexy"+ unqtDot (PrismOverlap i) = maybe id (flip (<>) . unqtDot) i $ text "prism"+ unqtDot CompressOverlap = text "compress"+ unqtDot VpscOverlap = text "vpsc"+ unqtDot IpsepOverlap = text "ipsep"++instance ParseDot Overlap where+ parseUnqt = oneOf [ stringRep KeepOverlaps "true"+ , stringRep RemoveOverlaps "false"+ , stringRep ScaleXYOverlaps "scalexy"+ , stringRep ScaleOverlaps "scale"+ , string "prism" >> liftM PrismOverlap (optional parse)+ , stringRep CompressOverlap "compress"+ , stringRep VpscOverlap "vpsc"+ , stringRep IpsepOverlap "ipsep"+ ]++-- -----------------------------------------------------------------------------++data LayerRange = LRID LayerID+ | LRS LayerID String LayerID+ deriving (Eq, Ord, Show, Read)++instance PrintDot LayerRange where+ unqtDot (LRID lid) = unqtDot lid+ unqtDot (LRS id1 s id2) = unqtDot id1 <> unqtDot s <> unqtDot id2++ toDot (LRID lid) = toDot lid+ toDot lrs = doubleQuotes $ unqtDot lrs++instance ParseDot LayerRange where+ parseUnqt = do id1 <- parseUnqt+ s <- parseLayerSep+ id2 <- parseUnqt+ return $ LRS id1 s id2+ `onFail`+ liftM LRID parseUnqt+++ parse = quotedParse ( do id1 <- parseUnqt+ s <- parseLayerSep+ id2 <- parseUnqt+ return $ LRS id1 s id2+ )+ `onFail`+ liftM LRID parse++parseLayerSep :: Parse String+parseLayerSep = many1 . oneOf+ $ map character defLayerSep++defLayerSep :: [Char]+defLayerSep = [' ', ':', '\t']++parseLayerName :: Parse String+parseLayerName = many1 . orQuote+ $ satisfy (liftM2 (&&) notLayerSep ((/=) quoteChar))++parseLayerName' :: Parse String+parseLayerName' = stringBlock+ `onFail`+ quotedParse parseLayerName++notLayerSep :: Char -> Bool+notLayerSep = flip notElem defLayerSep++-- | You should not have any quote characters for the 'LRName' option,+-- as it won't be parseable.+data LayerID = AllLayers+ | LRInt Int+ | LRName String+ deriving (Eq, Ord, Show, Read)++instance PrintDot LayerID where+ unqtDot AllLayers = text "all"+ unqtDot (LRInt n) = unqtDot n+ unqtDot (LRName nm) = unqtDot nm++ toDot (LRName nm) = toDot nm+ -- Other two don't need quotes+ toDot li = unqtDot li++instance ParseDot LayerID where+ parseUnqt = liftM checkLayerName parseLayerName -- tests for Int and All++ parse = oneOf [ liftM checkLayerName parseLayerName'+ , liftM LRInt parse -- Mainly for unquoted case.+ ]++checkLayerName :: String -> LayerID+checkLayerName str = maybe checkAll LRInt $ stringToInt str+ where+ checkAll = if map toLower str == "all"+ then AllLayers+ else LRName str++-- | The list represent (Separator, Name). You should not have any+-- quote characters for any of the 'String's, since there are+-- parsing problems with them.+data LayerList = LL String [(String, String)]+ deriving (Eq, Ord, Show, Read)++instance PrintDot LayerList where+ unqtDot (LL l1 ols) = unqtDot l1 <> hcat (map subLL ols)+ where+ subLL (s, l) = unqtDot s <> unqtDot l++ toDot (LL l1 []) = toDot l1+ -- Might not need quotes, but probably will.+ toDot ll = doubleQuotes $ unqtDot ll++instance ParseDot LayerList where+ parseUnqt = do l1 <- parseLayerName+ ols <- many $ do s <- parseLayerSep+ lnm <- parseLayerName+ return (s, lnm)+ return $ LL l1 ols++ parse = quotedParse parseUnqt+ `onFail`+ liftM (flip LL []) (parseLayerName' `onFail` numString)++-- -----------------------------------------------------------------------------++data OutputMode = BreadthFirst | NodesFirst | EdgesFirst+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot OutputMode where+ unqtDot BreadthFirst = text "breadthfirst"+ unqtDot NodesFirst = text "nodesfirst"+ unqtDot EdgesFirst = text "edgesfirst"++instance ParseDot OutputMode where+ parseUnqt = oneOf [ stringRep BreadthFirst "breadthfirst"+ , stringRep NodesFirst "nodesfirst"+ , stringRep EdgesFirst "edgesfirst"+ ]++-- -----------------------------------------------------------------------------++data Pack = DoPack+ | DontPack+ | PackMargin Int -- ^ If non-negative, then packs; otherwise doesn't.+ deriving (Eq, Ord, Show, Read)++instance PrintDot Pack where+ unqtDot DoPack = unqtDot True+ unqtDot DontPack = unqtDot False+ unqtDot (PackMargin m) = unqtDot m++instance ParseDot Pack where+ -- What happens if it parses 0? It's non-negative, but parses as False+ parseUnqt = oneOf [ liftM PackMargin parseUnqt+ , liftM (bool DontPack DoPack) onlyBool+ ]++-- -----------------------------------------------------------------------------++data PackMode = PackNode+ | PackClust+ | PackGraph+ | PackArray Bool Bool (Maybe Int) -- ^ Sort by cols, sort+ -- by user, number of+ -- rows/cols+ deriving (Eq, Ord, Show, Read)++instance PrintDot PackMode where+ unqtDot PackNode = text "node"+ unqtDot PackClust = text "clust"+ unqtDot PackGraph = text "graph"+ unqtDot (PackArray c u mi) = addNum . isU . isC . isUnder+ $ text "array"+ where+ addNum = maybe id (flip (<>) . unqtDot) mi+ isUnder = if c || u+ then flip (<>) $ char '_'+ else id+ isC = if c+ then flip (<>) $ char 'c'+ else id+ isU = if u+ then flip (<>) $ char 'u'+ else id++instance ParseDot PackMode where+ parseUnqt = oneOf [ stringRep PackNode "node"+ , stringRep PackClust "clust"+ , stringRep PackGraph "graph"+ , do string "array"+ mcu <- optional $ do character '_'+ many1 $ satisfy isCU+ let c = hasCharacter mcu 'c'+ u = hasCharacter mcu 'u'+ mi <- optional parseUnqt+ return $ PackArray c u mi+ ]+ where+ hasCharacter ms c = maybe False (elem c) ms+ -- Also checks and removes quote characters+ isCU = flip elem ['c', 'u']++-- -----------------------------------------------------------------------------++data Pos = PointPos Point+ | SplinePos [Spline]+ deriving (Eq, Ord, Show, Read)++instance PrintDot Pos where+ unqtDot (PointPos p) = unqtDot p+ unqtDot (SplinePos ss) = unqtDot ss++ toDot (PointPos p) = toDot p+ toDot (SplinePos ss) = toDot ss++instance ParseDot Pos where+ -- Have to be careful with this: if we try to parse points first,+ -- then a spline with no start and end points will erroneously get+ -- parsed as a point and then the parser will crash as it expects+ -- a closing quote character...+ parseUnqt = do splns <- parseUnqt+ case splns of+ [Spline Nothing Nothing [p]] -> return $ PointPos p+ _ -> return $ SplinePos splns++ parse = quotedParse parseUnqt++-- -----------------------------------------------------------------------------++-- | Controls how (and if) edges are represented.+data EdgeType = SplineEdges+ | LineEdges+ | NoEdges+ | PolyLine+ | CompoundEdge -- ^ fdp only+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot EdgeType where+ unqtDot SplineEdges = toDot True+ unqtDot LineEdges = toDot False+ unqtDot NoEdges = empty+ unqtDot PolyLine = text "polyline"+ unqtDot CompoundEdge = text "compound"++ toDot NoEdges = doubleQuotes empty+ toDot et = unqtDot et++instance ParseDot EdgeType where+ -- Can't parse NoEdges without quotes.+ parseUnqt = oneOf [ liftM (bool LineEdges SplineEdges) parse+ , stringRep SplineEdges "spline"+ , stringRep LineEdges "line"+ , stringRep PolyLine "polyline"+ , stringRep CompoundEdge "compound"+ ]++ parse = stringRep NoEdges "\"\""+ `onFail`+ optionalQuoted parseUnqt++-- -----------------------------------------------------------------------------++-- | Upper-case first character is major order;+-- lower-case second character is minor order.+data PageDir = Bl | Br | Tl | Tr | Rb | Rt | Lb | Lt+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot PageDir where+ unqtDot Bl = text "BL"+ unqtDot Br = text "BR"+ unqtDot Tl = text "TL"+ unqtDot Tr = text "TR"+ unqtDot Rb = text "RB"+ unqtDot Rt = text "RT"+ unqtDot Lb = text "LB"+ unqtDot Lt = text "LT"++instance ParseDot PageDir where+ parseUnqt = oneOf [ stringRep Bl "BL"+ , stringRep Br "BR"+ , stringRep Tl "TL"+ , stringRep Tr "TR"+ , stringRep Rb "RB"+ , stringRep Rt "RT"+ , stringRep Lb "LB"+ , stringRep Lt "LT"+ ]++-- -----------------------------------------------------------------------------++-- | The number of points in the list must be equivalent to 1 mod 3;+-- note that this is not checked.+data Spline = Spline (Maybe Point) (Maybe Point) [Point]+ deriving (Eq, Ord, Show, Read)++instance PrintDot Spline where+ unqtDot (Spline ms me ps) = addS . addE+ . hsep+ $ map unqtDot ps+ where+ addP t = maybe id ((<+>) . commaDel t)+ addS = addP 's' ms+ addE = addP 'e' me++ toDot = doubleQuotes . unqtDot++ unqtListToDot = hcat . punctuate semi . map unqtDot++ listToDot = doubleQuotes . unqtListToDot++instance ParseDot Spline where+ parseUnqt = do ms <- parseP 's'+ me <- parseP 'e'+ ps <- sepBy1 parseUnqt whitespace+ return $ Spline ms me ps+ where+ parseP t = optional $ do character t+ parseComma+ parseUnqt `discard` whitespace++ parse = quotedParse parseUnqt++ parseUnqtList = sepBy1 parseUnqt (character ';')++-- -----------------------------------------------------------------------------++data QuadType = NormalQT+ | FastQT+ | NoQT+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot QuadType where+ unqtDot NormalQT = text "normal"+ unqtDot FastQT = text "fast"+ unqtDot NoQT = text "none"++instance ParseDot QuadType where+ -- Have to take into account the slightly different interpretation+ -- of Bool used as an option for parsing QuadType+ parseUnqt = oneOf [ stringRep NormalQT "normal"+ , stringRep FastQT "fast"+ , stringRep NoQT "none"+ , character '2' >> return FastQT -- weird bool+ , liftM (bool NoQT NormalQT) parse+ ]++-- -----------------------------------------------------------------------------++-- | Specify the root node either as a Node attribute or a Graph attribute.+data Root = IsCentral -- ^ For Nodes only+ | NotCentral -- ^ For Nodes only+ | NodeName String -- ^ For Graphs only+ deriving (Eq, Ord, Show, Read)++instance PrintDot Root where+ unqtDot IsCentral = unqtDot True+ unqtDot NotCentral = unqtDot False+ unqtDot (NodeName n) = unqtDot n++ toDot (NodeName n) = toDot n+ toDot r = unqtDot r++instance ParseDot Root where+ parseUnqt = liftM (bool NotCentral IsCentral) onlyBool+ `onFail`+ liftM NodeName parseUnqt++ parse = optionalQuoted (liftM (bool NotCentral IsCentral) onlyBool)+ `onFail`+ liftM NodeName parse++-- -----------------------------------------------------------------------------++data RankType = SameRank+ | MinRank+ | SourceRank+ | MaxRank+ | SinkRank+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot RankType where+ unqtDot SameRank = text "same"+ unqtDot MinRank = text "min"+ unqtDot SourceRank = text "source"+ unqtDot MaxRank = text "max"+ unqtDot SinkRank = text "sink"++instance ParseDot RankType where+ parseUnqt = oneOf [ stringRep SameRank "same"+ , stringRep MinRank "min"+ , stringRep SourceRank "source"+ , stringRep MaxRank "max"+ , stringRep SinkRank "sink"+ ]++-- -----------------------------------------------------------------------------++data RankDir = FromTop+ | FromLeft+ | FromBottom+ | FromRight+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot RankDir where+ unqtDot FromTop = text "TB"+ unqtDot FromLeft = text "LR"+ unqtDot FromBottom = text "BT"+ unqtDot FromRight = text "RL"++instance ParseDot RankDir where+ parseUnqt = oneOf [ stringRep FromTop "TB"+ , stringRep FromLeft "LR"+ , stringRep FromBottom "BT"+ , stringRep FromRight "RL"+ ]++-- -----------------------------------------------------------------------------++data Shape+ = BoxShape -- ^ Has synonyms of /rect/ and /rectangle/.+ | Polygon+ | Ellipse+ | Circle+ | PointShape+ | Egg+ | Triangle+ | PlainText -- ^ Has synonym of /none/.+ | DiamondShape+ | Trapezium+ | Parallelogram+ | House+ | Pentagon+ | Hexagon+ | Septagon+ | Octagon+ | DoubleCircle+ | DoubleOctagon+ | TripleOctagon+ | InvTriangle+ | InvTrapezium+ | InvHouse+ | MDiamond+ | MSquare+ | MCircle+ | Note+ | Tab+ | Folder+ | Box3D+ | Component+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot Shape where+ unqtDot BoxShape = text "box"+ unqtDot Polygon = text "polygon"+ unqtDot Ellipse = text "ellipse"+ unqtDot Circle = text "circle"+ unqtDot PointShape = text "point"+ unqtDot Egg = text "egg"+ unqtDot Triangle = text "triangle"+ unqtDot PlainText = text "plaintext"+ unqtDot DiamondShape = text "diamond"+ unqtDot Trapezium = text "trapezium"+ unqtDot Parallelogram = text "parallelogram"+ unqtDot House = text "house"+ unqtDot Pentagon = text "pentagon"+ unqtDot Hexagon = text "hexagon"+ unqtDot Septagon = text "septagon"+ unqtDot Octagon = text "octagon"+ unqtDot DoubleCircle = text "doublecircle"+ unqtDot DoubleOctagon = text "doubleoctagon"+ unqtDot TripleOctagon = text "tripleoctagon"+ unqtDot InvTriangle = text "invtriangle"+ unqtDot InvTrapezium = text "invtrapezium"+ unqtDot InvHouse = text "invhouse"+ unqtDot MDiamond = text "Mdiamond"+ unqtDot MSquare = text "Msquare"+ unqtDot MCircle = text "Mcircle"+ unqtDot Note = text "note"+ unqtDot Tab = text "tab"+ unqtDot Folder = text "folder"+ unqtDot Box3D = text "box3d"+ unqtDot Component = text "component"++instance ParseDot Shape where+ parseUnqt = oneOf [ stringRep Box3D "box3d" -- Parse this before "box"+ , stringReps BoxShape ["box","rectangle","rect"]+ , stringRep Polygon "polygon"+ , stringRep Ellipse "ellipse"+ , stringRep Circle "circle"+ , stringRep PointShape "point"+ , stringRep Egg "egg"+ , stringRep Triangle "triangle"+ , stringReps PlainText ["plaintext","none"]+ , stringRep DiamondShape "diamond"+ , stringRep Trapezium "trapezium"+ , stringRep Parallelogram "parallelogram"+ , stringRep House "house"+ , stringRep Pentagon "pentagon"+ , stringRep Hexagon "hexagon"+ , stringRep Septagon "septagon"+ , stringRep Octagon "octagon"+ , stringRep DoubleCircle "doublecircle"+ , stringRep DoubleOctagon "doubleoctagon"+ , stringRep TripleOctagon "tripleoctagon"+ , stringRep InvTriangle "invtriangle"+ , stringRep InvTrapezium "invtrapezium"+ , stringRep InvHouse "invhouse"+ , stringRep MDiamond "Mdiamond"+ , stringRep MSquare "Msquare"+ , stringRep MCircle "Mcircle"+ , stringRep Note "note"+ , stringRep Tab "tab"+ , stringRep Folder "folder"+ , stringRep Component "component"+ ]++-- -----------------------------------------------------------------------------++data SmoothType = NoSmooth+ | AvgDist+ | GraphDist+ | PowerDist+ | RNG+ | Spring+ | TriangleSmooth+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot SmoothType where+ unqtDot NoSmooth = text "none"+ unqtDot AvgDist = text "avg_dist"+ unqtDot GraphDist = text "graph_dist"+ unqtDot PowerDist = text "power_dist"+ unqtDot RNG = text "rng"+ unqtDot Spring = text "spring"+ unqtDot TriangleSmooth = text "triangle"++instance ParseDot SmoothType where+ parseUnqt = oneOf [ stringRep NoSmooth "none"+ , stringRep AvgDist "avg_dist"+ , stringRep GraphDist "graph_dist"+ , stringRep PowerDist "power_dist"+ , stringRep RNG "rng"+ , stringRep Spring "spring"+ , stringRep TriangleSmooth "triangle"+ ]++-- -----------------------------------------------------------------------------++data StartType = StartStyle STStyle+ | StartSeed Int+ | StartStyleSeed STStyle Int+ deriving (Eq, Ord, Show, Read)++instance PrintDot StartType where+ unqtDot (StartStyle ss) = unqtDot ss+ unqtDot (StartSeed s) = unqtDot s+ unqtDot (StartStyleSeed ss s) = unqtDot ss <> unqtDot s++instance ParseDot StartType where+ parseUnqt = oneOf [ do ss <- parseUnqt+ s <- parseUnqt+ return $ StartStyleSeed ss s+ , liftM StartStyle parseUnqt+ , liftM StartSeed parseUnqt+ ]++data STStyle = RegularStyle+ | SelfStyle+ | RandomStyle+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot STStyle where+ unqtDot RegularStyle = text "regular"+ unqtDot SelfStyle = text "self"+ unqtDot RandomStyle = text "random"++instance ParseDot STStyle where+ parseUnqt = oneOf [ stringRep RegularStyle "regular"+ , stringRep SelfStyle "self"+ , stringRep RandomStyle "random"+ ]++-- -----------------------------------------------------------------------------++data StyleItem = SItem StyleName [String]+ deriving (Eq, Ord, Show, Read)++instance PrintDot StyleItem where+ unqtDot (SItem nm args)+ | null args = dnm+ | otherwise = dnm <> parens args'+ where+ dnm = unqtDot nm+ args' = hcat . punctuate comma $ map unqtDot args++ toDot si@(SItem nm args)+ | null args = toDot nm+ | otherwise = doubleQuotes $ unqtDot si++ unqtListToDot = hcat . punctuate comma . map unqtDot++ listToDot [SItem nm []] = toDot nm+ listToDot sis = doubleQuotes $ unqtListToDot sis++instance ParseDot StyleItem where+ parseUnqt = do nm <- parseUnqt+ args <- tryParseList' parseArgs+ return $ SItem nm args++ parse = quotedParse (liftM2 SItem parseUnqt parseArgs)+ `onFail`+ liftM (flip SItem []) parse++ parseUnqtList = sepBy1 parseUnqt parseComma++ parseList = quotedParse parseUnqtList+ `onFail`+ -- Might not necessarily need to be quoted if a singleton...+ liftM return parse++parseArgs :: Parse [String]+parseArgs = bracketSep (character '(')+ parseComma+ (character ')')+ parseStyleName++data StyleName = Dashed -- ^ Nodes and Edges+ | Dotted -- ^ Nodes and Edges+ | Solid -- ^ Nodes and Edges+ | Bold -- ^ Nodes and Edges+ | Invisible -- ^ Nodes and Edges+ | Filled -- ^ Nodes and Clusters+ | Diagonals -- ^ Nodes only+ | Rounded -- ^ Nodes and Clusters+ | DD String -- ^ Device Dependent+ deriving (Eq, Ord, Show, Read)++instance PrintDot StyleName where+ unqtDot Dashed = text "dashed"+ unqtDot Dotted = text "dotted"+ unqtDot Solid = text "solid"+ unqtDot Bold = text "bold"+ unqtDot Invisible = text "invis"+ unqtDot Filled = text "filled"+ unqtDot Diagonals = text "diagonals"+ unqtDot Rounded = text "rounded"+ unqtDot (DD nm) = unqtDot nm++ toDot (DD nm) = toDot nm+ toDot sn = unqtDot sn++instance ParseDot StyleName where+ parseUnqt = liftM checkDD parseStyleName++ parse = liftM checkDD+ $ quotedParse parseStyleName+ `onFail`+ -- In case a singleton DD is at the end of an attribute list.+ do f <- orQuote $ noneOf [quoteChar, '(', ')', ',', ' ', ']']+ r <- many (orQuote $ noneOf [quoteChar, '(', ')', ',', ']'])+ return $ f:r++checkDD :: String -> StyleName+checkDD str = case map toLower str of+ "dashed" -> Dashed+ "dotted" -> Dotted+ "solid" -> Solid+ "bold" -> Bold+ "invis" -> Invisible+ "filled" -> Filled+ "diagonals" -> Diagonals+ "rounded" -> Rounded+ _ -> DD str++parseStyleName :: Parse String+parseStyleName = do f <- orQuote $ noneOf [quoteChar, '(', ')', ',', ' ']+ r <- many (orQuote $ noneOf [quoteChar, '(', ')', ','])+ return $ f:r++-- -----------------------------------------------------------------------------++newtype PortPos = PP CompassPoint+ deriving (Eq, Ord, Show, Read)++instance PrintDot PortPos where+ unqtDot (PP cp) = unqtDot cp++ toDot (PP cp) = toDot cp++instance ParseDot PortPos where+ parseUnqt = liftM PP parseUnqt++data CompassPoint = North+ | NorthEast+ | East+ | SouthEast+ | South+ | SouthWest+ | West+ | NorthWest+ | CenterPoint+ | NoCP+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot CompassPoint where+ unqtDot NorthEast = text "ne"+ unqtDot NorthWest = text "nw"+ unqtDot North = text "n"+ unqtDot East = text "e"+ unqtDot SouthEast = text "se"+ unqtDot SouthWest = text "sw"+ unqtDot South = text "s"+ unqtDot West = text "w"+ unqtDot CenterPoint = text "c"+ unqtDot NoCP = text "_"++instance ParseDot CompassPoint where+ -- Have to take care of longer parsing values first.+ parseUnqt = oneOf [ stringRep NorthEast "ne"+ , stringRep NorthWest "nw"+ , stringRep North "n"+ , stringRep SouthEast "se"+ , stringRep SouthWest "sw"+ , stringRep South "s"+ , stringRep East "e"+ , stringRep West "w"+ , stringRep CenterPoint "c"+ , stringRep NoCP "_"+ ]++-- -----------------------------------------------------------------------------++data ViewPort = VP { wVal :: Double+ , hVal :: Double+ , zVal :: Double+ , focus :: Maybe FocusType+ }+ deriving (Eq, Ord, Show, Read)++instance PrintDot ViewPort where+ unqtDot vp = maybe vs ((<>) (vs <> comma) . unqtDot)+ $ focus vp+ where+ vs = hcat . punctuate comma+ $ map (unqtDot . flip ($) vp) [wVal, hVal, zVal]++ toDot = doubleQuotes . unqtDot++instance ParseDot ViewPort where+ parseUnqt = do wv <- parseUnqt+ parseComma+ hv <- parseUnqt+ parseComma+ zv <- parseUnqt+ mf <- optional $ parseComma >> parseUnqt+ return $ VP wv hv zv mf++ parse = quotedParse parseUnqt++data FocusType = XY Point+ | NodeFocus String+ deriving (Eq, Ord, Show, Read)++instance PrintDot FocusType where+ unqtDot (XY p) = unqtDot p+ unqtDot (NodeFocus nm) = unqtDot nm++ toDot (XY p) = toDot p+ toDot (NodeFocus nm) = toDot nm++instance ParseDot FocusType where+ parseUnqt = liftM XY parseUnqt+ `onFail`+ liftM NodeFocus parseUnqt++ parse = liftM XY parse+ `onFail`+ liftM NodeFocus parse++-- -----------------------------------------------------------------------------++data VerticalPlacement = VTop+ | VCenter -- ^ Only valid for Nodes.+ | VBottom+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot VerticalPlacement where+ unqtDot VTop = char 't'+ unqtDot VCenter = char 'c'+ unqtDot VBottom = char 'b'++instance ParseDot VerticalPlacement where+ parseUnqt = oneOf [ stringRep VTop "t"+ , stringRep VCenter "c"+ , stringRep VBottom "b"+ ]++-- -----------------------------------------------------------------------------++data ScaleType = UniformScale+ | NoScale+ | FillWidth+ | FillHeight+ | FillBoth+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ScaleType where+ unqtDot UniformScale = unqtDot True+ unqtDot NoScale = unqtDot False+ unqtDot FillWidth = text "width"+ unqtDot FillHeight = text "height"+ unqtDot FillBoth = text "both"++instance ParseDot ScaleType where+ parseUnqt = oneOf [ stringRep UniformScale "true"+ , stringRep NoScale "false"+ , stringRep FillWidth "width"+ , stringRep FillHeight "height"+ , stringRep FillBoth "both"+ ]++-- -----------------------------------------------------------------------------++data Justification = JLeft+ | JRight+ | JCenter+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot Justification where+ unqtDot JLeft = char 'l'+ unqtDot JRight = char 'r'+ unqtDot JCenter = char 'c'++instance ParseDot Justification where+ parseUnqt = oneOf [ stringRep JLeft "l"+ , stringRep JRight "r"+ , stringRep JCenter "c"+ ]++-- -----------------------------------------------------------------------------++data Ratios = AspectRatio Double+ | FillRatio+ | CompressRatio+ | ExpandRatio+ | AutoRatio+ deriving (Eq, Ord, Show, Read)++instance PrintDot Ratios where+ unqtDot (AspectRatio r) = unqtDot r+ unqtDot FillRatio = text "fill"+ unqtDot CompressRatio = text "compress"+ unqtDot ExpandRatio = text "expand"+ unqtDot AutoRatio = text "auto"++instance ParseDot Ratios where+ parseUnqt = oneOf [ liftM AspectRatio parseUnqt+ , stringRep FillRatio "fill"+ , stringRep CompressRatio "compress"+ , stringRep ExpandRatio "expand"+ , stringRep AutoRatio "auto"+ ]
@@ -0,0 +1,1 @@+Match
file too large to diff
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1718 @@+module Data.GraphViz.Attributes+ (Attribute(..), Attributes, usedByGraphs, usedBySubGraphs,+ usedByClusters, usedByNodes, usedByEdges, EscString, URL(..),+ ArrowType(..), AspectType(..), Rect(..), ClusterMode(..),+ DirType(..), DEConstraints(..), DPoint(..), ModeType(..),+ Model(..), Label(..), Point(..), Overlap(..), LayerRange(..),+ LayerID(..), LayerList(..), OutputMode(..), Pack(..), PackMode(..),+ Pos(..), EdgeType(..), PageDir(..), Spline(..), QuadType(..),+ Root(..), RankType(..), RankDir(..), Shape(..), SmoothType(..),+ StartType(..), STStyle(..), StyleItem(..), StyleName(..),+ PortPos(..), CompassPoint(..), ViewPort(..), FocusType(..),+ VerticalPlacement(..), ScaleType(..), Justification(..),+ Ratios(..), module Data.GraphViz.Attributes.Colors, ArrowShape(..),+ ArrowModifier(..), ArrowFill(..), ArrowSide(..), box, crow,+ diamond, dotArrow, inv, noArrow, normal, tee, vee, oDot, invDot,+ invODot, oBox, oDiamond, eDiamond, openArr, halfOpen, emptyArr,+ invEmpty, noMods, openMod, defLayerSep, notLayerSep)+ where+import Data.GraphViz.Attributes.Colors+import Data.GraphViz.Util+import Data.GraphViz.Parsing+import Data.GraphViz.Printing+import Data.Char (toLower)+import Data.Maybe (isJust)+import Control.Arrow (first)+import Control.Monad (liftM, liftM2)++data Attribute = Damping Double+ | K Double+ | URL URL+ | ArrowHead ArrowType+ | ArrowSize Double+ | ArrowTail ArrowType+ | Aspect AspectType+ | Bb Rect+ | BgColor Color+ | Center Bool+ | Charset String+ | ClusterRank ClusterMode+ | ColorScheme ColorScheme+ | Color [Color]+ | Comment String+ | Compound Bool+ | Concentrate Bool+ | Constraint Bool+ | Decorate Bool+ | DefaultDist Double+ | Dimen Int+ | Dim Int+ | Dir DirType+ | DirEdgeConstraints DEConstraints+ | Distortion Double+ | DPI Double+ | EdgeURL URL+ | EdgeTarget EscString+ | EdgeTooltip EscString+ | Epsilon Double+ | ESep DPoint+ | FillColor Color+ | FixedSize Bool+ | FontColor Color+ | FontName String+ | FontNames String+ | FontPath String+ | FontSize Double+ | Group String+ | HeadURL URL+ | HeadClip Bool+ | HeadLabel Label+ | HeadPort PortPos+ | HeadTarget EscString+ | HeadTooltip EscString+ | Height Double+ | ID Label+ | Image String+ | ImageScale ScaleType+ | LabelURL URL+ | LabelAngle Double+ | LabelDistance Double+ | LabelFloat Bool+ | LabelFontColor Color+ | LabelFontName String+ | LabelFontSize Double+ | LabelJust Justification+ | LabelLoc VerticalPlacement+ | LabelTarget EscString+ | LabelTooltip EscString+ | Label Label+ | Landscape Bool+ | LayerSep String+ | Layers LayerList+ | Layer LayerRange+ | Layout String+ | Len Double+ | LevelsGap Double+ | Levels Int+ | LHead String+ | LPos Point+ | LTail String+ | Margin DPoint+ | MaxIter Int+ | MCLimit Double+ | MinDist Double+ | MinLen Int+ | Model Model+ | Mode ModeType+ | Mosek Bool+ | NodeSep Double+ | NoJustify Bool+ | Normalize Bool+ | Nslimit1 Double+ | Nslimit Double+ | Ordering String+ | Orientation Double+ | OutputOrder OutputMode+ | OverlapScaling Double+ | Overlap Overlap+ | PackMode PackMode+ | Pack Pack+ | Pad DPoint+ | PageDir PageDir+ | Page Point+ | PenColor Color+ | PenWidth Double+ | Peripheries Int+ | Pin Bool+ | Pos Pos+ | QuadTree QuadType+ | Quantum Double+ | RankDir RankDir+ | RankSep Double+ | Rank RankType+ | Ratio Ratios+ | Rects Rect+ | Regular Bool+ | ReMinCross Bool+ | RepulsiveForce Double+ | Root Root+ | Rotate Int+ | SameHead String+ | SameTail String+ | SamplePoints Int+ | SearchSize Int+ | Sep DPoint+ | ShapeFile String+ | Shape Shape+ | ShowBoxes Int+ | Sides Int+ | Size Point+ | Skew Double+ | Smoothing SmoothType+ | SortV Int+ | Splines EdgeType+ | Start StartType+ | StyleSheet String+ | Style [StyleItem]+ | TailURL URL+ | TailClip Bool+ | TailLabel Label+ | TailPort PortPos+ | TailTarget EscString+ | TailTooltip EscString+ | Target EscString+ | Tooltip EscString+ | TrueColor Bool+ | Vertices [Point]+ | ViewPort ViewPort+ | VoroMargin Double+ | Weight Double+ | Width Double+ | Z Double+ deriving (Eq, Ord, Show, Read)++type Attributes = [Attribute]++instance PrintDot Attribute where+ unqtDot (Damping v) = printField "Damping" v+ unqtDot (K v) = printField "K" v+ unqtDot (URL v) = printField "URL" v+ unqtDot (ArrowHead v) = printField "arrowhead" v+ unqtDot (ArrowSize v) = printField "arrowsize" v+ unqtDot (ArrowTail v) = printField "arrowtail" v+ unqtDot (Aspect v) = printField "aspect" v+ unqtDot (Bb v) = printField "bb" v+ unqtDot (BgColor v) = printField "bgcolor" v+ unqtDot (Center v) = printField "center" v+ unqtDot (Charset v) = printField "charset" v+ unqtDot (ClusterRank v) = printField "clusterrank" v+ unqtDot (ColorScheme v) = printField "colorscheme" v+ unqtDot (Color v) = printField "color" v+ unqtDot (Comment v) = printField "comment" v+ unqtDot (Compound v) = printField "compound" v+ unqtDot (Concentrate v) = printField "concentrate" v+ unqtDot (Constraint v) = printField "constraint" v+ unqtDot (Decorate v) = printField "decorate" v+ unqtDot (DefaultDist v) = printField "defaultdist" v+ unqtDot (Dimen v) = printField "dimen" v+ unqtDot (Dim v) = printField "dim" v+ unqtDot (Dir v) = printField "dir" v+ unqtDot (DirEdgeConstraints v) = printField "diredgeconstraints" v+ unqtDot (Distortion v) = printField "distortion" v+ unqtDot (DPI v) = printField "dpi" v+ unqtDot (EdgeURL v) = printField "edgeURL" v+ unqtDot (EdgeTarget v) = printField "edgetarget" v+ unqtDot (EdgeTooltip v) = printField "edgetooltip" v+ unqtDot (Epsilon v) = printField "epsilon" v+ unqtDot (ESep v) = printField "esep" v+ unqtDot (FillColor v) = printField "fillcolor" v+ unqtDot (FixedSize v) = printField "fixedsize" v+ unqtDot (FontColor v) = printField "fontcolor" v+ unqtDot (FontName v) = printField "fontname" v+ unqtDot (FontNames v) = printField "fontnames" v+ unqtDot (FontPath v) = printField "fontpath" v+ unqtDot (FontSize v) = printField "fontsize" v+ unqtDot (Group v) = printField "group" v+ unqtDot (HeadURL v) = printField "headURL" v+ unqtDot (HeadClip v) = printField "headclip" v+ unqtDot (HeadLabel v) = printField "headlabel" v+ unqtDot (HeadPort v) = printField "headport" v+ unqtDot (HeadTarget v) = printField "headtarget" v+ unqtDot (HeadTooltip v) = printField "headtooltip" v+ unqtDot (Height v) = printField "height" v+ unqtDot (ID v) = printField "id" v+ unqtDot (Image v) = printField "image" v+ unqtDot (ImageScale v) = printField "imagescale" v+ unqtDot (LabelURL v) = printField "labelURL" v+ unqtDot (LabelAngle v) = printField "labelangle" v+ unqtDot (LabelDistance v) = printField "labeldistance" v+ unqtDot (LabelFloat v) = printField "labelfloat" v+ unqtDot (LabelFontColor v) = printField "labelfontcolor" v+ unqtDot (LabelFontName v) = printField "labelfontname" v+ unqtDot (LabelFontSize v) = printField "labelfontsize" v+ unqtDot (LabelJust v) = printField "labeljust" v+ unqtDot (LabelLoc v) = printField "labelloc" v+ unqtDot (LabelTarget v) = printField "labeltarget" v+ unqtDot (LabelTooltip v) = printField "labeltooltip" v+ unqtDot (Label v) = printField "label" v+ unqtDot (Landscape v) = printField "landscape" v+ unqtDot (LayerSep v) = printField "layersep" v+ unqtDot (Layers v) = printField "layers" v+ unqtDot (Layer v) = printField "layer" v+ unqtDot (Layout v) = printField "layout" v+ unqtDot (Len v) = printField "len" v+ unqtDot (LevelsGap v) = printField "levelsgap" v+ unqtDot (Levels v) = printField "levels" v+ unqtDot (LHead v) = printField "lhead" v+ unqtDot (LPos v) = printField "lp" v+ unqtDot (LTail v) = printField "ltail" v+ unqtDot (Margin v) = printField "margin" v+ unqtDot (MaxIter v) = printField "maxiter" v+ unqtDot (MCLimit v) = printField "mclimit" v+ unqtDot (MinDist v) = printField "mindist" v+ unqtDot (MinLen v) = printField "minlen" v+ unqtDot (Model v) = printField "model" v+ unqtDot (Mode v) = printField "mode" v+ unqtDot (Mosek v) = printField "mosek" v+ unqtDot (NodeSep v) = printField "nodesep" v+ unqtDot (NoJustify v) = printField "nojustify" v+ unqtDot (Normalize v) = printField "normalize" v+ unqtDot (Nslimit1 v) = printField "nslimit1" v+ unqtDot (Nslimit v) = printField "nslimit" v+ unqtDot (Ordering v) = printField "ordering" v+ unqtDot (Orientation v) = printField "orientation" v+ unqtDot (OutputOrder v) = printField "outputorder" v+ unqtDot (OverlapScaling v) = printField "overlap_scaling" v+ unqtDot (Overlap v) = printField "overlap" v+ unqtDot (PackMode v) = printField "packmode" v+ unqtDot (Pack v) = printField "pack" v+ unqtDot (Pad v) = printField "pad" v+ unqtDot (PageDir v) = printField "pagedir" v+ unqtDot (Page v) = printField "page" v+ unqtDot (PenColor v) = printField "pencolor" v+ unqtDot (PenWidth v) = printField "penwidth" v+ unqtDot (Peripheries v) = printField "peripheries" v+ unqtDot (Pin v) = printField "pin" v+ unqtDot (Pos v) = printField "pos" v+ unqtDot (QuadTree v) = printField "quadtree" v+ unqtDot (Quantum v) = printField "quantum" v+ unqtDot (RankDir v) = printField "rankdir" v+ unqtDot (RankSep v) = printField "ranksep" v+ unqtDot (Rank v) = printField "rank" v+ unqtDot (Ratio v) = printField "ratio" v+ unqtDot (Rects v) = printField "rects" v+ unqtDot (Regular v) = printField "regular" v+ unqtDot (ReMinCross v) = printField "remincross" v+ unqtDot (RepulsiveForce v) = printField "repulsiveforce" v+ unqtDot (Root v) = printField "root" v+ unqtDot (Rotate v) = printField "rotate" v+ unqtDot (SameHead v) = printField "samehead" v+ unqtDot (SameTail v) = printField "sametail" v+ unqtDot (SamplePoints v) = printField "samplepoints" v+ unqtDot (SearchSize v) = printField "searchsize" v+ unqtDot (Sep v) = printField "sep" v+ unqtDot (ShapeFile v) = printField "shapefile" v+ unqtDot (Shape v) = printField "shape" v+ unqtDot (ShowBoxes v) = printField "showboxes" v+ unqtDot (Sides v) = printField "sides" v+ unqtDot (Size v) = printField "size" v+ unqtDot (Skew v) = printField "skew" v+ unqtDot (Smoothing v) = printField "smoothing" v+ unqtDot (SortV v) = printField "sortv" v+ unqtDot (Splines v) = printField "splines" v+ unqtDot (Start v) = printField "start" v+ unqtDot (StyleSheet v) = printField "stylesheet" v+ unqtDot (Style v) = printField "style" v+ unqtDot (TailURL v) = printField "tailURL" v+ unqtDot (TailClip v) = printField "tailclip" v+ unqtDot (TailLabel v) = printField "taillabel" v+ unqtDot (TailPort v) = printField "tailport" v+ unqtDot (TailTarget v) = printField "tailtarget" v+ unqtDot (TailTooltip v) = printField "tailtooltip" v+ unqtDot (Target v) = printField "target" v+ unqtDot (Tooltip v) = printField "tooltip" v+ unqtDot (TrueColor v) = printField "truecolor" v+ unqtDot (Vertices v) = printField "vertices" v+ unqtDot (ViewPort v) = printField "viewport" v+ unqtDot (VoroMargin v) = printField "voro_margin" v+ unqtDot (Weight v) = printField "weight" v+ unqtDot (Width v) = printField "width" v+ unqtDot (Z v) = printField "z" v+ listToDot = unqtListToDot++instance ParseDot Attribute where+ parseUnqt+ = oneOf+ [liftM Damping $ parseField "Damping", liftM K $ parseField "K",+ liftM URL $ parseFields ["URL", "href"],+ liftM ArrowHead $ parseField "arrowhead",+ liftM ArrowSize $ parseField "arrowsize",+ liftM ArrowTail $ parseField "arrowtail",+ liftM Aspect $ parseField "aspect", liftM Bb $ parseField "bb",+ liftM BgColor $ parseField "bgcolor",+ liftM Center $ parseFieldBool "center",+ liftM Charset $ parseField "charset",+ liftM ClusterRank $ parseField "clusterrank",+ liftM ColorScheme $ parseField "colorscheme",+ liftM Color $ parseField "color",+ liftM Comment $ parseField "comment",+ liftM Compound $ parseFieldBool "compound",+ liftM Concentrate $ parseFieldBool "concentrate",+ liftM Constraint $ parseFieldBool "constraint",+ liftM Decorate $ parseFieldBool "decorate",+ liftM DefaultDist $ parseField "defaultdist",+ liftM Dimen $ parseField "dimen", liftM Dim $ parseField "dim",+ liftM Dir $ parseField "dir",+ liftM DirEdgeConstraints $+ parseFieldDef EdgeConstraints "diredgeconstraints",+ liftM Distortion $ parseField "distortion",+ liftM DPI $ parseFields ["dpi", "resolution"],+ liftM EdgeURL $ parseFields ["edgeURL", "edgehref"],+ liftM EdgeTarget $ parseField "edgetarget",+ liftM EdgeTooltip $ parseField "edgetooltip",+ liftM Epsilon $ parseField "epsilon",+ liftM ESep $ parseField "esep",+ liftM FillColor $ parseField "fillcolor",+ liftM FixedSize $ parseFieldBool "fixedsize",+ liftM FontColor $ parseField "fontcolor",+ liftM FontName $ parseField "fontname",+ liftM FontNames $ parseField "fontnames",+ liftM FontPath $ parseField "fontpath",+ liftM FontSize $ parseField "fontsize",+ liftM Group $ parseField "group",+ liftM HeadURL $ parseFields ["headURL", "headhref"],+ liftM HeadClip $ parseFieldBool "headclip",+ liftM HeadLabel $ parseField "headlabel",+ liftM HeadPort $ parseField "headport",+ liftM HeadTarget $ parseField "headtarget",+ liftM HeadTooltip $ parseField "headtooltip",+ liftM Height $ parseField "height", liftM ID $ parseField "id",+ liftM Image $ parseField "image",+ liftM ImageScale $ parseFieldDef UniformScale "imagescale",+ liftM LabelURL $ parseFields ["labelURL", "labelhref"],+ liftM LabelAngle $ parseField "labelangle",+ liftM LabelDistance $ parseField "labeldistance",+ liftM LabelFloat $ parseFieldBool "labelfloat",+ liftM LabelFontColor $ parseField "labelfontcolor",+ liftM LabelFontName $ parseField "labelfontname",+ liftM LabelFontSize $ parseField "labelfontsize",+ liftM LabelJust $ parseField "labeljust",+ liftM LabelLoc $ parseField "labelloc",+ liftM LabelTarget $ parseField "labeltarget",+ liftM LabelTooltip $ parseField "labeltooltip",+ liftM Label $ parseField "label",+ liftM Landscape $ parseFieldBool "landscape",+ liftM LayerSep $ parseField "layersep",+ liftM Layers $ parseField "layers",+ liftM Layer $ parseField "layer",+ liftM Layout $ parseField "layout", liftM Len $ parseField "len",+ liftM LevelsGap $ parseField "levelsgap",+ liftM Levels $ parseField "levels",+ liftM LHead $ parseField "lhead", liftM LPos $ parseField "lp",+ liftM LTail $ parseField "ltail",+ liftM Margin $ parseField "margin",+ liftM MaxIter $ parseField "maxiter",+ liftM MCLimit $ parseField "mclimit",+ liftM MinDist $ parseField "mindist",+ liftM MinLen $ parseField "minlen",+ liftM Model $ parseField "model", liftM Mode $ parseField "mode",+ liftM Mosek $ parseFieldBool "mosek",+ liftM NodeSep $ parseField "nodesep",+ liftM NoJustify $ parseFieldBool "nojustify",+ liftM Normalize $ parseFieldBool "normalize",+ liftM Nslimit1 $ parseField "nslimit1",+ liftM Nslimit $ parseField "nslimit",+ liftM Ordering $ parseField "ordering",+ liftM Orientation $ parseField "orientation",+ liftM OutputOrder $ parseField "outputorder",+ liftM OverlapScaling $ parseField "overlap_scaling",+ liftM Overlap $ parseFieldDef KeepOverlaps "overlap",+ liftM PackMode $ parseField "packmode",+ liftM Pack $ parseFieldDef DoPack "pack",+ liftM Pad $ parseField "pad", liftM PageDir $ parseField "pagedir",+ liftM Page $ parseField "page",+ liftM PenColor $ parseField "pencolor",+ liftM PenWidth $ parseField "penwidth",+ liftM Peripheries $ parseField "peripheries",+ liftM Pin $ parseFieldBool "pin", liftM Pos $ parseField "pos",+ liftM QuadTree $ parseFieldDef NormalQT "quadtree",+ liftM Quantum $ parseField "quantum",+ liftM RankDir $ parseField "rankdir",+ liftM RankSep $ parseField "ranksep",+ liftM Rank $ parseField "rank", liftM Ratio $ parseField "ratio",+ liftM Rects $ parseField "rects",+ liftM Regular $ parseFieldBool "regular",+ liftM ReMinCross $ parseFieldBool "remincross",+ liftM RepulsiveForce $ parseField "repulsiveforce",+ liftM Root $ parseFieldDef IsCentral "root",+ liftM Rotate $ parseField "rotate",+ liftM SameHead $ parseField "samehead",+ liftM SameTail $ parseField "sametail",+ liftM SamplePoints $ parseField "samplepoints",+ liftM SearchSize $ parseField "searchsize",+ liftM Sep $ parseField "sep",+ liftM ShapeFile $ parseField "shapefile",+ liftM Shape $ parseField "shape",+ liftM ShowBoxes $ parseField "showboxes",+ liftM Sides $ parseField "sides", liftM Size $ parseField "size",+ liftM Skew $ parseField "skew",+ liftM Smoothing $ parseField "smoothing",+ liftM SortV $ parseField "sortv",+ liftM Splines $ parseFieldDef SplineEdges "splines",+ liftM Start $ parseField "start",+ liftM StyleSheet $ parseField "stylesheet",+ liftM Style $ parseField "style",+ liftM TailURL $ parseFields ["tailURL", "tailhref"],+ liftM TailClip $ parseFieldBool "tailclip",+ liftM TailLabel $ parseField "taillabel",+ liftM TailPort $ parseField "tailport",+ liftM TailTarget $ parseField "tailtarget",+ liftM TailTooltip $ parseField "tailtooltip",+ liftM Target $ parseField "target",+ liftM Tooltip $ parseField "tooltip",+ liftM TrueColor $ parseFieldBool "truecolor",+ liftM Vertices $ parseField "vertices",+ liftM ViewPort $ parseField "viewport",+ liftM VoroMargin $ parseField "voro_margin",+ liftM Weight $ parseField "weight",+ liftM Width $ parseField "width", liftM Z $ parseField "z"]+ parse = parseUnqt+ parseList = parseUnqtList++usedByGraphs :: Attribute -> Bool+usedByGraphs Damping{} = True+usedByGraphs K{} = True+usedByGraphs URL{} = True+usedByGraphs Aspect{} = True+usedByGraphs Bb{} = True+usedByGraphs BgColor{} = True+usedByGraphs Center{} = True+usedByGraphs Charset{} = True+usedByGraphs ClusterRank{} = True+usedByGraphs ColorScheme{} = True+usedByGraphs Comment{} = True+usedByGraphs Compound{} = True+usedByGraphs Concentrate{} = True+usedByGraphs DefaultDist{} = True+usedByGraphs Dimen{} = True+usedByGraphs Dim{} = True+usedByGraphs DirEdgeConstraints{} = True+usedByGraphs DPI{} = True+usedByGraphs Epsilon{} = True+usedByGraphs ESep{} = True+usedByGraphs FontColor{} = True+usedByGraphs FontName{} = True+usedByGraphs FontNames{} = True+usedByGraphs FontPath{} = True+usedByGraphs FontSize{} = True+usedByGraphs ID{} = True+usedByGraphs LabelJust{} = True+usedByGraphs LabelLoc{} = True+usedByGraphs Label{} = True+usedByGraphs Landscape{} = True+usedByGraphs LayerSep{} = True+usedByGraphs Layers{} = True+usedByGraphs Layout{} = True+usedByGraphs LevelsGap{} = True+usedByGraphs Levels{} = True+usedByGraphs LPos{} = True+usedByGraphs Margin{} = True+usedByGraphs MaxIter{} = True+usedByGraphs MCLimit{} = True+usedByGraphs MinDist{} = True+usedByGraphs Model{} = True+usedByGraphs Mode{} = True+usedByGraphs Mosek{} = True+usedByGraphs NodeSep{} = True+usedByGraphs NoJustify{} = True+usedByGraphs Normalize{} = True+usedByGraphs Nslimit1{} = True+usedByGraphs Nslimit{} = True+usedByGraphs Ordering{} = True+usedByGraphs OutputOrder{} = True+usedByGraphs OverlapScaling{} = True+usedByGraphs Overlap{} = True+usedByGraphs PackMode{} = True+usedByGraphs Pack{} = True+usedByGraphs Pad{} = True+usedByGraphs PageDir{} = True+usedByGraphs Page{} = True+usedByGraphs QuadTree{} = True+usedByGraphs Quantum{} = True+usedByGraphs RankDir{} = True+usedByGraphs RankSep{} = True+usedByGraphs Ratio{} = True+usedByGraphs ReMinCross{} = True+usedByGraphs RepulsiveForce{} = True+usedByGraphs Root{} = True+usedByGraphs Rotate{} = True+usedByGraphs SearchSize{} = True+usedByGraphs Sep{} = True+usedByGraphs ShowBoxes{} = True+usedByGraphs Size{} = True+usedByGraphs Smoothing{} = True+usedByGraphs SortV{} = True+usedByGraphs Splines{} = True+usedByGraphs Start{} = True+usedByGraphs StyleSheet{} = True+usedByGraphs Target{} = True+usedByGraphs TrueColor{} = True+usedByGraphs ViewPort{} = True+usedByGraphs VoroMargin{} = True+usedByGraphs _ = False++usedByClusters :: Attribute -> Bool+usedByClusters K{} = True+usedByClusters URL{} = True+usedByClusters BgColor{} = True+usedByClusters ColorScheme{} = True+usedByClusters Color{} = True+usedByClusters FillColor{} = True+usedByClusters FontColor{} = True+usedByClusters FontName{} = True+usedByClusters FontSize{} = True+usedByClusters LabelJust{} = True+usedByClusters LabelLoc{} = True+usedByClusters Label{} = True+usedByClusters LPos{} = True+usedByClusters NoJustify{} = True+usedByClusters PenColor{} = True+usedByClusters PenWidth{} = True+usedByClusters Peripheries{} = True+usedByClusters Rank{} = True+usedByClusters SortV{} = True+usedByClusters Style{} = True+usedByClusters Target{} = True+usedByClusters Tooltip{} = True+usedByClusters _ = False++usedBySubGraphs :: Attribute -> Bool+usedBySubGraphs Rank{} = True+usedBySubGraphs _ = False++usedByNodes :: Attribute -> Bool+usedByNodes URL{} = True+usedByNodes ColorScheme{} = True+usedByNodes Color{} = True+usedByNodes Comment{} = True+usedByNodes Distortion{} = True+usedByNodes FillColor{} = True+usedByNodes FixedSize{} = True+usedByNodes FontColor{} = True+usedByNodes FontName{} = True+usedByNodes FontSize{} = True+usedByNodes Group{} = True+usedByNodes Height{} = True+usedByNodes ID{} = True+usedByNodes Image{} = True+usedByNodes ImageScale{} = True+usedByNodes LabelLoc{} = True+usedByNodes Label{} = True+usedByNodes Layer{} = True+usedByNodes Margin{} = True+usedByNodes NoJustify{} = True+usedByNodes Orientation{} = True+usedByNodes PenWidth{} = True+usedByNodes Peripheries{} = True+usedByNodes Pin{} = True+usedByNodes Pos{} = True+usedByNodes Rects{} = True+usedByNodes Regular{} = True+usedByNodes Root{} = True+usedByNodes SamplePoints{} = True+usedByNodes ShapeFile{} = True+usedByNodes Shape{} = True+usedByNodes ShowBoxes{} = True+usedByNodes Sides{} = True+usedByNodes Skew{} = True+usedByNodes SortV{} = True+usedByNodes Style{} = True+usedByNodes Target{} = True+usedByNodes Tooltip{} = True+usedByNodes Vertices{} = True+usedByNodes Width{} = True+usedByNodes Z{} = True+usedByNodes _ = False++usedByEdges :: Attribute -> Bool+usedByEdges URL{} = True+usedByEdges ArrowHead{} = True+usedByEdges ArrowSize{} = True+usedByEdges ArrowTail{} = True+usedByEdges ColorScheme{} = True+usedByEdges Color{} = True+usedByEdges Comment{} = True+usedByEdges Constraint{} = True+usedByEdges Decorate{} = True+usedByEdges Dir{} = True+usedByEdges EdgeURL{} = True+usedByEdges EdgeTarget{} = True+usedByEdges EdgeTooltip{} = True+usedByEdges FontColor{} = True+usedByEdges FontName{} = True+usedByEdges FontSize{} = True+usedByEdges HeadURL{} = True+usedByEdges HeadClip{} = True+usedByEdges HeadLabel{} = True+usedByEdges HeadPort{} = True+usedByEdges HeadTarget{} = True+usedByEdges HeadTooltip{} = True+usedByEdges ID{} = True+usedByEdges LabelURL{} = True+usedByEdges LabelAngle{} = True+usedByEdges LabelDistance{} = True+usedByEdges LabelFloat{} = True+usedByEdges LabelFontColor{} = True+usedByEdges LabelFontName{} = True+usedByEdges LabelFontSize{} = True+usedByEdges LabelTarget{} = True+usedByEdges LabelTooltip{} = True+usedByEdges Label{} = True+usedByEdges Layer{} = True+usedByEdges Len{} = True+usedByEdges LHead{} = True+usedByEdges LPos{} = True+usedByEdges LTail{} = True+usedByEdges MinLen{} = True+usedByEdges NoJustify{} = True+usedByEdges PenWidth{} = True+usedByEdges Pos{} = True+usedByEdges SameHead{} = True+usedByEdges SameTail{} = True+usedByEdges ShowBoxes{} = True+usedByEdges Style{} = True+usedByEdges TailURL{} = True+usedByEdges TailClip{} = True+usedByEdges TailLabel{} = True+usedByEdges TailPort{} = True+usedByEdges TailTarget{} = True+usedByEdges TailTooltip{} = True+usedByEdges Target{} = True+usedByEdges Tooltip{} = True+usedByEdges Weight{} = True+usedByEdges _ = False++type EscString = String++newtype URL = UStr{urlString :: EscString}+ deriving (Eq, Ord, Show, Read)++instance PrintDot URL where+ unqtDot = wrap (char '<') (char '>') . text . urlString++instance ParseDot URL where+ parseUnqt+ = liftM UStr $+ bracket (character open) (character close)+ (many1 $ satisfy ((/=) close))+ where open = '<'+ close = '>'+ parse = parseUnqt++newtype ArrowType = AType [(ArrowModifier, ArrowShape)]+ deriving (Eq, Ord, Show, Read)++box, crow, diamond, dotArrow, inv, noArrow, normal, tee, vee ::+ ArrowType++oDot, invDot, invODot, oBox, oDiamond :: ArrowType++eDiamond, openArr, halfOpen, emptyArr, invEmpty :: ArrowType+normal = AType [(noMods, Normal)]+inv = AType [(noMods, Inv)]+dotArrow = AType [(noMods, DotArrow)]+invDot = AType [(noMods, Inv), (noMods, DotArrow)]+oDot = AType [(ArrMod OpenArrow BothSides, DotArrow)]+invODot = AType [(noMods, Inv), (openMod, DotArrow)]+noArrow = AType [(noMods, NoArrow)]+tee = AType [(noMods, Tee)]+emptyArr = AType [(openMod, Normal)]+invEmpty = AType [(noMods, Inv), (openMod, Normal)]+diamond = AType [(noMods, Diamond)]+oDiamond = AType [(openMod, Diamond)]+eDiamond = oDiamond+crow = AType [(noMods, Crow)]+box = AType [(noMods, Box)]+oBox = AType [(openMod, Box)]+openArr = vee+halfOpen = AType [(ArrMod FilledArrow LeftSide, Vee)]+vee = AType [(noMods, Vee)]++instance PrintDot ArrowType where+ unqtDot (AType mas) = hcat $ map appMod mas+ where appMod (m, a) = unqtDot m <> unqtDot a++instance ParseDot ArrowType where+ parseUnqt+ = do mas <- many1 $+ do m <- parseUnqt+ a <- parseUnqt+ return (m, a)+ return $ AType mas+ `onFail` specialArrowParse++specialArrowParse :: Parse ArrowType+specialArrowParse+ = oneOf+ [stringRep eDiamond "ediamond", stringRep openArr "open",+ stringRep halfOpen "halfopen", stringRep emptyArr "empty",+ stringRep invEmpty "invempty"]++data ArrowShape = Box+ | Crow+ | Diamond+ | DotArrow+ | Inv+ | NoArrow+ | Normal+ | Tee+ | Vee+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ArrowShape where+ unqtDot Box = unqtDot "box"+ unqtDot Crow = unqtDot "crow"+ unqtDot Diamond = unqtDot "diamond"+ unqtDot DotArrow = unqtDot "dot"+ unqtDot Inv = unqtDot "inv"+ unqtDot NoArrow = unqtDot "none"+ unqtDot Normal = unqtDot "normal"+ unqtDot Tee = unqtDot "tee"+ unqtDot Vee = unqtDot "vee"++instance ParseDot ArrowShape where+ parseUnqt+ = oneOf+ [stringRep Box "box", stringRep Crow "crow",+ stringRep Diamond "diamond", stringRep DotArrow "dot",+ stringRep Inv "inv", stringRep NoArrow "none",+ stringRep Normal "normal", stringRep Tee "tee",+ stringRep Vee "vee"]++data ArrowModifier = ArrMod{arrowFill :: ArrowFill,+ arrowSide :: ArrowSide}+ deriving (Eq, Ord, Show, Read)++noMods :: ArrowModifier+noMods = ArrMod FilledArrow BothSides++openMod :: ArrowModifier+openMod = ArrMod OpenArrow BothSides++instance PrintDot ArrowModifier where+ unqtDot (ArrMod f s) = unqtDot f <> unqtDot s++instance ParseDot ArrowModifier where+ parseUnqt+ = do f <- parseUnqt+ s <- parseUnqt+ return $ ArrMod f s++data ArrowFill = OpenArrow+ | FilledArrow+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ArrowFill where+ unqtDot OpenArrow = char 'o'+ unqtDot FilledArrow = empty++instance ParseDot ArrowFill where+ parseUnqt+ = liftM (bool FilledArrow OpenArrow . isJust) $+ optional (character 'o')+ parse = parseUnqt++data ArrowSide = LeftSide+ | RightSide+ | BothSides+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ArrowSide where+ unqtDot LeftSide = char 'l'+ unqtDot RightSide = char 'r'+ unqtDot BothSides = empty++instance ParseDot ArrowSide where+ parseUnqt+ = liftM getSideType $ optional (oneOf $ map character ['l', 'r'])+ where getSideType+ = maybe BothSides (bool RightSide LeftSide . (==) 'l')+ parse = parseUnqt++data AspectType = RatioOnly Double+ | RatioPassCount Double Int+ deriving (Eq, Ord, Show, Read)++instance PrintDot AspectType where+ unqtDot (RatioOnly r) = unqtDot r+ unqtDot (RatioPassCount r p) = commaDel r p+ toDot at@RatioOnly{} = unqtDot at+ toDot at@RatioPassCount{} = doubleQuotes $ unqtDot at++instance ParseDot AspectType where+ parseUnqt+ = liftM (uncurry RatioPassCount) commaSepUnqt `onFail`+ liftM RatioOnly parseUnqt+ parse+ = quotedParse (liftM (uncurry RatioPassCount) commaSepUnqt)+ `onFail` liftM RatioOnly parse++data Rect = Rect Point Point+ deriving (Eq, Ord, Show, Read)++instance PrintDot Rect where+ unqtDot (Rect p1 p2) = commaDel p1 p2+ toDot = doubleQuotes . unqtDot++instance ParseDot Rect where+ parseUnqt = liftM (uncurry Rect) commaSepUnqt+ parse = quotedParse parseUnqt++data ClusterMode = Local+ | Global+ | NoCluster+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ClusterMode where+ unqtDot Local = unqtDot "local"+ unqtDot Global = unqtDot "global"+ unqtDot NoCluster = unqtDot "none"++instance ParseDot ClusterMode where+ parseUnqt+ = oneOf+ [stringRep Local "local", stringRep Global "global",+ stringRep NoCluster "none"]++data DirType = Forward+ | Back+ | Both+ | NoDir+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot DirType where+ unqtDot Forward = unqtDot "forward"+ unqtDot Back = unqtDot "back"+ unqtDot Both = unqtDot "both"+ unqtDot NoDir = unqtDot "none"++instance ParseDot DirType where+ parseUnqt+ = oneOf+ [stringRep Forward "forward", stringRep Back "back",+ stringRep Both "both", stringRep NoDir "none"]++data DEConstraints = EdgeConstraints+ | NoConstraints+ | HierConstraints+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot DEConstraints where+ unqtDot EdgeConstraints = unqtDot True+ unqtDot NoConstraints = unqtDot False+ unqtDot HierConstraints = text "hier"++instance ParseDot DEConstraints where+ parseUnqt+ = liftM (bool NoConstraints EdgeConstraints) parse `onFail`+ stringRep HierConstraints "hier"++data DPoint = DVal Double+ | PVal Point+ deriving (Eq, Ord, Show, Read)++instance PrintDot DPoint where+ unqtDot (DVal d) = unqtDot d+ unqtDot (PVal p) = unqtDot p+ toDot (DVal d) = toDot d+ toDot (PVal p) = toDot p++instance ParseDot DPoint where+ parseUnqt = liftM PVal parseUnqt `onFail` liftM DVal parseUnqt+ parse = liftM PVal parse `onFail` liftM DVal parse++data ModeType = Major+ | KK+ | Hier+ | IpSep+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ModeType where+ unqtDot Major = text "major"+ unqtDot KK = text "KK"+ unqtDot Hier = text "hier"+ unqtDot IpSep = text "ipsep"++instance ParseDot ModeType where+ parseUnqt+ = oneOf+ [stringRep Major "major", stringRep KK "KK", stringRep Hier "hier",+ stringRep IpSep "ipsep"]++data Model = ShortPath+ | SubSet+ | Circuit+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot Model where+ unqtDot ShortPath = text "shortpath"+ unqtDot SubSet = text "subset"+ unqtDot Circuit = text "circuit"++instance ParseDot Model where+ parseUnqt+ = oneOf+ [stringRep ShortPath "shortpath", stringRep SubSet "subset",+ stringRep Circuit "circuit"]++data Label = StrLabel EscString+ | URLLabel URL+ deriving (Eq, Ord, Show, Read)++instance PrintDot Label where+ unqtDot (StrLabel s) = unqtDot s+ unqtDot (URLLabel u) = unqtDot u+ toDot (StrLabel s) = toDot s+ toDot (URLLabel u) = toDot u++instance ParseDot Label where+ parseUnqt+ = liftM StrLabel parseUnqt `onFail` liftM URLLabel parseUnqt+ parse = liftM StrLabel parse `onFail` liftM URLLabel parse++data Point = Point Int Int+ | PointD Double Double+ deriving (Eq, Ord, Show, Read)++instance PrintDot Point where+ unqtDot (Point x y) = commaDel x y+ unqtDot (PointD x y) = commaDel x y+ toDot = doubleQuotes . unqtDot+ unqtListToDot = hsep . map unqtDot+ listToDot = doubleQuotes . unqtListToDot++instance ParseDot Point where+ parseUnqt+ = intDblPoint `onFail` liftM (uncurry Point) commaSepUnqt `onFail`+ liftM (uncurry PointD) commaSepUnqt+ where intDblPoint+ = liftM (uncurry PointD . first fI) $+ commaSep' parseUnqt parseStrictFloat+ + fI :: Int -> Double+ fI = fromIntegral+ parse = quotedParse parseUnqt+ parseUnqtList = sepBy1 parseUnqt whitespace++data Overlap = KeepOverlaps+ | RemoveOverlaps+ | ScaleOverlaps+ | ScaleXYOverlaps+ | PrismOverlap (Maybe Int)+ | CompressOverlap+ | VpscOverlap+ | IpsepOverlap+ deriving (Eq, Ord, Show, Read)++instance PrintDot Overlap where+ unqtDot KeepOverlaps = unqtDot True+ unqtDot RemoveOverlaps = unqtDot False+ unqtDot ScaleOverlaps = text "scale"+ unqtDot ScaleXYOverlaps = text "scalexy"+ unqtDot (PrismOverlap i)+ = maybe id (flip (<>) . unqtDot) i $ text "prism"+ unqtDot CompressOverlap = text "compress"+ unqtDot VpscOverlap = text "vpsc"+ unqtDot IpsepOverlap = text "ipsep"++instance ParseDot Overlap where+ parseUnqt+ = oneOf+ [stringRep KeepOverlaps "true", stringRep RemoveOverlaps "false",+ stringRep ScaleXYOverlaps "scalexy",+ stringRep ScaleOverlaps "scale",+ string "prism" >> liftM PrismOverlap (optional parse),+ stringRep CompressOverlap "compress", stringRep VpscOverlap "vpsc",+ stringRep IpsepOverlap "ipsep"]++data LayerRange = LRID LayerID+ | LRS LayerID String LayerID+ deriving (Eq, Ord, Show, Read)++instance PrintDot LayerRange where+ unqtDot (LRID lid) = unqtDot lid+ unqtDot (LRS id1 s id2) = unqtDot id1 <> unqtDot s <> unqtDot id2+ toDot (LRID lid) = toDot lid+ toDot lrs = doubleQuotes $ unqtDot lrs++instance ParseDot LayerRange where+ parseUnqt+ = do id1 <- parseUnqt+ s <- parseLayerSep+ id2 <- parseUnqt+ return $ LRS id1 s id2+ `onFail` liftM LRID parseUnqt+ parse+ = quotedParse+ (do id1 <- parseUnqt+ s <- parseLayerSep+ id2 <- parseUnqt+ return $ LRS id1 s id2)+ `onFail` liftM LRID parse++parseLayerSep :: Parse String+parseLayerSep = many1 . oneOf $ map character defLayerSep++defLayerSep :: [Char]+defLayerSep = [' ', ':', '\t']++parseLayerName :: Parse String+parseLayerName+ = many1 . orQuote $+ satisfy (liftM2 (&&) notLayerSep ((/=) quoteChar))++parseLayerName' :: Parse String+parseLayerName' = stringBlock `onFail` quotedParse parseLayerName++notLayerSep :: Char -> Bool+notLayerSep = flip notElem defLayerSep++data LayerID = AllLayers+ | LRInt Int+ | LRName String+ deriving (Eq, Ord, Show, Read)++instance PrintDot LayerID where+ unqtDot AllLayers = text "all"+ unqtDot (LRInt n) = unqtDot n+ unqtDot (LRName nm) = unqtDot nm+ toDot (LRName nm) = toDot nm+ toDot li = unqtDot li++instance ParseDot LayerID where+ parseUnqt = liftM checkLayerName parseLayerName+ parse+ = oneOf [liftM checkLayerName parseLayerName', liftM LRInt parse]++checkLayerName :: String -> LayerID+checkLayerName str = maybe checkAll LRInt $ stringToInt str+ where checkAll+ = if map toLower str == "all" then AllLayers else LRName str++data LayerList = LL String [(String, String)]+ deriving (Eq, Ord, Show, Read)++instance PrintDot LayerList where+ unqtDot (LL l1 ols) = unqtDot l1 <> hcat (map subLL ols)+ where subLL (s, l) = unqtDot s <> unqtDot l+ toDot (LL l1 []) = toDot l1+ toDot ll = doubleQuotes $ unqtDot ll++instance ParseDot LayerList where+ parseUnqt+ = do l1 <- parseLayerName+ ols <- many $+ do s <- parseLayerSep+ lnm <- parseLayerName+ return (s, lnm)+ return $ LL l1 ols+ parse+ = quotedParse parseUnqt `onFail`+ liftM (flip LL []) (parseLayerName' `onFail` numString)++data OutputMode = BreadthFirst+ | NodesFirst+ | EdgesFirst+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot OutputMode where+ unqtDot BreadthFirst = text "breadthfirst"+ unqtDot NodesFirst = text "nodesfirst"+ unqtDot EdgesFirst = text "edgesfirst"++instance ParseDot OutputMode where+ parseUnqt+ = oneOf+ [stringRep BreadthFirst "breadthfirst",+ stringRep NodesFirst "nodesfirst",+ stringRep EdgesFirst "edgesfirst"]++data Pack = DoPack+ | DontPack+ | PackMargin Int+ deriving (Eq, Ord, Show, Read)++instance PrintDot Pack where+ unqtDot DoPack = unqtDot True+ unqtDot DontPack = unqtDot False+ unqtDot (PackMargin m) = unqtDot m++instance ParseDot Pack where+ parseUnqt+ = oneOf+ [liftM PackMargin parseUnqt, liftM (bool DontPack DoPack) onlyBool]++data PackMode = PackNode+ | PackClust+ | PackGraph+ | PackArray Bool Bool (Maybe Int)+ deriving (Eq, Ord, Show, Read)++instance PrintDot PackMode where+ unqtDot PackNode = text "node"+ unqtDot PackClust = text "clust"+ unqtDot PackGraph = text "graph"+ unqtDot (PackArray c u mi)+ = addNum . isU . isC . isUnder $ text "array"+ where addNum = maybe id (flip (<>) . unqtDot) mi+ isUnder = if c || u then flip (<>) $ char '_' else id+ isC = if c then flip (<>) $ char 'c' else id+ isU = if u then flip (<>) $ char 'u' else id++instance ParseDot PackMode where+ parseUnqt+ = oneOf+ [stringRep PackNode "node", stringRep PackClust "clust",+ stringRep PackGraph "graph",+ do string "array"+ mcu <- optional $+ do character '_'+ many1 $ satisfy isCU+ let c = hasCharacter mcu 'c'+ u = hasCharacter mcu 'u'+ mi <- optional parseUnqt+ return $ PackArray c u mi]+ where hasCharacter ms c = maybe False (elem c) ms+ isCU = flip elem ['c', 'u']++data Pos = PointPos Point+ | SplinePos [Spline]+ deriving (Eq, Ord, Show, Read)++instance PrintDot Pos where+ unqtDot (PointPos p) = unqtDot p+ unqtDot (SplinePos ss) = unqtDot ss+ toDot (PointPos p) = toDot p+ toDot (SplinePos ss) = toDot ss++instance ParseDot Pos where+ parseUnqt+ = do splns <- parseUnqt+ case splns of+ [Spline Nothing Nothing [p]] -> return $ PointPos p+ _ -> return $ SplinePos splns+ parse = quotedParse parseUnqt++data EdgeType = SplineEdges+ | LineEdges+ | NoEdges+ | PolyLine+ | CompoundEdge+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot EdgeType where+ unqtDot SplineEdges = toDot True+ unqtDot LineEdges = toDot False+ unqtDot NoEdges = empty+ unqtDot PolyLine = text "polyline"+ unqtDot CompoundEdge = text "compound"+ toDot NoEdges = doubleQuotes empty+ toDot et = unqtDot et++instance ParseDot EdgeType where+ parseUnqt+ = oneOf+ [liftM (bool LineEdges SplineEdges) parse,+ stringRep SplineEdges "spline", stringRep LineEdges "line",+ stringRep PolyLine "polyline", stringRep CompoundEdge "compound"]+ parse = stringRep NoEdges "\"\"" `onFail` optionalQuoted parseUnqt++data PageDir = Bl+ | Br+ | Tl+ | Tr+ | Rb+ | Rt+ | Lb+ | Lt+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot PageDir where+ unqtDot Bl = text "BL"+ unqtDot Br = text "BR"+ unqtDot Tl = text "TL"+ unqtDot Tr = text "TR"+ unqtDot Rb = text "RB"+ unqtDot Rt = text "RT"+ unqtDot Lb = text "LB"+ unqtDot Lt = text "LT"++instance ParseDot PageDir where+ parseUnqt+ = oneOf+ [stringRep Bl "BL", stringRep Br "BR", stringRep Tl "TL",+ stringRep Tr "TR", stringRep Rb "RB", stringRep Rt "RT",+ stringRep Lb "LB", stringRep Lt "LT"]++data Spline = Spline (Maybe Point) (Maybe Point) [Point]+ deriving (Eq, Ord, Show, Read)++instance PrintDot Spline where+ unqtDot (Spline ms me ps) = addS . addE . hsep $ map unqtDot ps+ where addP t = maybe id ((<+>) . commaDel t)+ addS = addP 's' ms+ addE = addP 'e' me+ toDot = doubleQuotes . unqtDot+ unqtListToDot = hcat . punctuate semi . map unqtDot+ listToDot = doubleQuotes . unqtListToDot++instance ParseDot Spline where+ parseUnqt+ = do ms <- parseP 's'+ me <- parseP 'e'+ ps <- sepBy1 parseUnqt whitespace+ return $ Spline ms me ps+ where parseP t+ = optional $+ do character t+ parseComma+ parseUnqt `discard` whitespace+ parse = quotedParse parseUnqt+ parseUnqtList = sepBy1 parseUnqt (character ';')++data QuadType = NormalQT+ | FastQT+ | NoQT+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot QuadType where+ unqtDot NormalQT = text "normal"+ unqtDot FastQT = text "fast"+ unqtDot NoQT = text "none"++instance ParseDot QuadType where+ parseUnqt+ = oneOf+ [stringRep NormalQT "normal", stringRep FastQT "fast",+ stringRep NoQT "none", character '2' >> return FastQT,+ liftM (bool NoQT NormalQT) parse]++data Root = IsCentral+ | NotCentral+ | NodeName String+ deriving (Eq, Ord, Show, Read)++instance PrintDot Root where+ unqtDot IsCentral = unqtDot True+ unqtDot NotCentral = unqtDot False+ unqtDot (NodeName n) = unqtDot n+ toDot (NodeName n) = toDot n+ toDot r = unqtDot r++instance ParseDot Root where+ parseUnqt+ = liftM (bool NotCentral IsCentral) onlyBool `onFail`+ liftM NodeName parseUnqt+ parse+ = optionalQuoted (liftM (bool NotCentral IsCentral) onlyBool)+ `onFail` liftM NodeName parse++data RankType = SameRank+ | MinRank+ | SourceRank+ | MaxRank+ | SinkRank+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot RankType where+ unqtDot SameRank = text "same"+ unqtDot MinRank = text "min"+ unqtDot SourceRank = text "source"+ unqtDot MaxRank = text "max"+ unqtDot SinkRank = text "sink"++instance ParseDot RankType where+ parseUnqt+ = oneOf+ [stringRep SameRank "same", stringRep MinRank "min",+ stringRep SourceRank "source", stringRep MaxRank "max",+ stringRep SinkRank "sink"]++data RankDir = FromTop+ | FromLeft+ | FromBottom+ | FromRight+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot RankDir where+ unqtDot FromTop = text "TB"+ unqtDot FromLeft = text "LR"+ unqtDot FromBottom = text "BT"+ unqtDot FromRight = text "RL"++instance ParseDot RankDir where+ parseUnqt+ = oneOf+ [stringRep FromTop "TB", stringRep FromLeft "LR",+ stringRep FromBottom "BT", stringRep FromRight "RL"]++data Shape = BoxShape+ | Polygon+ | Ellipse+ | Circle+ | PointShape+ | Egg+ | Triangle+ | PlainText+ | DiamondShape+ | Trapezium+ | Parallelogram+ | House+ | Pentagon+ | Hexagon+ | Septagon+ | Octagon+ | DoubleCircle+ | DoubleOctagon+ | TripleOctagon+ | InvTriangle+ | InvTrapezium+ | InvHouse+ | MDiamond+ | MSquare+ | MCircle+ | Note+ | Tab+ | Folder+ | Box3D+ | Component+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot Shape where+ unqtDot BoxShape = text "box"+ unqtDot Polygon = text "polygon"+ unqtDot Ellipse = text "ellipse"+ unqtDot Circle = text "circle"+ unqtDot PointShape = text "point"+ unqtDot Egg = text "egg"+ unqtDot Triangle = text "triangle"+ unqtDot PlainText = text "plaintext"+ unqtDot DiamondShape = text "diamond"+ unqtDot Trapezium = text "trapezium"+ unqtDot Parallelogram = text "parallelogram"+ unqtDot House = text "house"+ unqtDot Pentagon = text "pentagon"+ unqtDot Hexagon = text "hexagon"+ unqtDot Septagon = text "septagon"+ unqtDot Octagon = text "octagon"+ unqtDot DoubleCircle = text "doublecircle"+ unqtDot DoubleOctagon = text "doubleoctagon"+ unqtDot TripleOctagon = text "tripleoctagon"+ unqtDot InvTriangle = text "invtriangle"+ unqtDot InvTrapezium = text "invtrapezium"+ unqtDot InvHouse = text "invhouse"+ unqtDot MDiamond = text "Mdiamond"+ unqtDot MSquare = text "Msquare"+ unqtDot MCircle = text "Mcircle"+ unqtDot Note = text "note"+ unqtDot Tab = text "tab"+ unqtDot Folder = text "folder"+ unqtDot Box3D = text "box3d"+ unqtDot Component = text "component"++instance ParseDot Shape where+ parseUnqt+ = oneOf+ [stringRep Box3D "box3d",+ stringReps BoxShape ["box", "rectangle", "rect"],+ stringRep Polygon "polygon", stringRep Ellipse "ellipse",+ stringRep Circle "circle", stringRep PointShape "point",+ stringRep Egg "egg", stringRep Triangle "triangle",+ stringReps PlainText ["plaintext", "none"],+ stringRep DiamondShape "diamond", stringRep Trapezium "trapezium",+ stringRep Parallelogram "parallelogram", stringRep House "house",+ stringRep Pentagon "pentagon", stringRep Hexagon "hexagon",+ stringRep Septagon "septagon", stringRep Octagon "octagon",+ stringRep DoubleCircle "doublecircle",+ stringRep DoubleOctagon "doubleoctagon",+ stringRep TripleOctagon "tripleoctagon",+ stringRep InvTriangle "invtriangle",+ stringRep InvTrapezium "invtrapezium",+ stringRep InvHouse "invhouse", stringRep MDiamond "Mdiamond",+ stringRep MSquare "Msquare", stringRep MCircle "Mcircle",+ stringRep Note "note", stringRep Tab "tab",+ stringRep Folder "folder", stringRep Component "component"]++data SmoothType = NoSmooth+ | AvgDist+ | GraphDist+ | PowerDist+ | RNG+ | Spring+ | TriangleSmooth+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot SmoothType where+ unqtDot NoSmooth = text "none"+ unqtDot AvgDist = text "avg_dist"+ unqtDot GraphDist = text "graph_dist"+ unqtDot PowerDist = text "power_dist"+ unqtDot RNG = text "rng"+ unqtDot Spring = text "spring"+ unqtDot TriangleSmooth = text "triangle"++instance ParseDot SmoothType where+ parseUnqt+ = oneOf+ [stringRep NoSmooth "none", stringRep AvgDist "avg_dist",+ stringRep GraphDist "graph_dist", stringRep PowerDist "power_dist",+ stringRep RNG "rng", stringRep Spring "spring",+ stringRep TriangleSmooth "triangle"]++data StartType = StartStyle STStyle+ | StartSeed Int+ | StartStyleSeed STStyle Int+ deriving (Eq, Ord, Show, Read)++instance PrintDot StartType where+ unqtDot (StartStyle ss) = unqtDot ss+ unqtDot (StartSeed s) = unqtDot s+ unqtDot (StartStyleSeed ss s) = unqtDot ss <> unqtDot s++instance ParseDot StartType where+ parseUnqt+ = oneOf+ [do ss <- parseUnqt+ s <- parseUnqt+ return $ StartStyleSeed ss s,+ liftM StartStyle parseUnqt, liftM StartSeed parseUnqt]++data STStyle = RegularStyle+ | SelfStyle+ | RandomStyle+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot STStyle where+ unqtDot RegularStyle = text "regular"+ unqtDot SelfStyle = text "self"+ unqtDot RandomStyle = text "random"++instance ParseDot STStyle where+ parseUnqt+ = oneOf+ [stringRep RegularStyle "regular", stringRep SelfStyle "self",+ stringRep RandomStyle "random"]++data StyleItem = SItem StyleName [String]+ deriving (Eq, Ord, Show, Read)++instance PrintDot StyleItem where+ unqtDot (SItem nm args)+ | null args = dnm+ | otherwise = dnm <> parens args'+ where dnm = unqtDot nm+ args' = hcat . punctuate comma $ map unqtDot args+ toDot si@(SItem nm args)+ | null args = toDot nm+ | otherwise = doubleQuotes $ unqtDot si+ unqtListToDot = hcat . punctuate comma . map unqtDot+ listToDot [SItem nm []] = toDot nm+ listToDot sis = doubleQuotes $ unqtListToDot sis++instance ParseDot StyleItem where+ parseUnqt+ = do nm <- parseUnqt+ args <- tryParseList' parseArgs+ return $ SItem nm args+ parse+ = quotedParse (liftM2 SItem parseUnqt parseArgs) `onFail`+ liftM (flip SItem []) parse+ parseUnqtList = sepBy1 parseUnqt parseComma+ parseList = quotedParse parseUnqtList `onFail` liftM return parse++parseArgs :: Parse [String]+parseArgs+ = bracketSep (character '(') parseComma (character ')')+ parseStyleName++data StyleName = Dashed+ | Dotted+ | Solid+ | Bold+ | Invisible+ | Filled+ | Diagonals+ | Rounded+ | DD String+ deriving (Eq, Ord, Show, Read)++instance PrintDot StyleName where+ unqtDot Dashed = text "dashed"+ unqtDot Dotted = text "dotted"+ unqtDot Solid = text "solid"+ unqtDot Bold = text "bold"+ unqtDot Invisible = text "invis"+ unqtDot Filled = text "filled"+ unqtDot Diagonals = text "diagonals"+ unqtDot Rounded = text "rounded"+ unqtDot (DD nm) = unqtDot nm+ toDot (DD nm) = toDot nm+ toDot sn = unqtDot sn++instance ParseDot StyleName where+ parseUnqt = liftM checkDD parseStyleName+ parse+ = liftM checkDD $+ quotedParse parseStyleName `onFail`+ do f <- orQuote $ noneOf [quoteChar, '(', ')', ',', ' ', ']']+ r <- many (orQuote $ noneOf [quoteChar, '(', ')', ',', ']'])+ return $ f : r++checkDD :: String -> StyleName+checkDD str+ = case map toLower str of+ "dashed" -> Dashed+ "dotted" -> Dotted+ "solid" -> Solid+ "bold" -> Bold+ "invis" -> Invisible+ "filled" -> Filled+ "diagonals" -> Diagonals+ "rounded" -> Rounded+ _ -> DD str++parseStyleName :: Parse String+parseStyleName+ = do f <- orQuote $ noneOf [quoteChar, '(', ')', ',', ' ']+ r <- many (orQuote $ noneOf [quoteChar, '(', ')', ','])+ return $ f : r++newtype PortPos = PP CompassPoint+ deriving (Eq, Ord, Show, Read)++instance PrintDot PortPos where+ unqtDot (PP cp) = unqtDot cp+ toDot (PP cp) = toDot cp++instance ParseDot PortPos where+ parseUnqt = liftM PP parseUnqt++data CompassPoint = North+ | NorthEast+ | East+ | SouthEast+ | South+ | SouthWest+ | West+ | NorthWest+ | CenterPoint+ | NoCP+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot CompassPoint where+ unqtDot NorthEast = text "ne"+ unqtDot NorthWest = text "nw"+ unqtDot North = text "n"+ unqtDot East = text "e"+ unqtDot SouthEast = text "se"+ unqtDot SouthWest = text "sw"+ unqtDot South = text "s"+ unqtDot West = text "w"+ unqtDot CenterPoint = text "c"+ unqtDot NoCP = text "_"++instance ParseDot CompassPoint where+ parseUnqt+ = oneOf+ [stringRep NorthEast "ne", stringRep NorthWest "nw",+ stringRep North "n", stringRep SouthEast "se",+ stringRep SouthWest "sw", stringRep South "s", stringRep East "e",+ stringRep West "w", stringRep CenterPoint "c", stringRep NoCP "_"]++data ViewPort = VP{wVal :: Double, hVal :: Double, zVal :: Double,+ focus :: Maybe FocusType}+ deriving (Eq, Ord, Show, Read)++instance PrintDot ViewPort where+ unqtDot vp = maybe vs ((<>) (vs <> comma) . unqtDot) $ focus vp+ where vs+ = hcat . punctuate comma $+ map (unqtDot . flip ($) vp) [wVal, hVal, zVal]+ toDot = doubleQuotes . unqtDot++instance ParseDot ViewPort where+ parseUnqt+ = do wv <- parseUnqt+ parseComma+ hv <- parseUnqt+ parseComma+ zv <- parseUnqt+ mf <- optional $ parseComma >> parseUnqt+ return $ VP wv hv zv mf+ parse = quotedParse parseUnqt++data FocusType = XY Point+ | NodeFocus String+ deriving (Eq, Ord, Show, Read)++instance PrintDot FocusType where+ unqtDot (XY p) = unqtDot p+ unqtDot (NodeFocus nm) = unqtDot nm+ toDot (XY p) = toDot p+ toDot (NodeFocus nm) = toDot nm++instance ParseDot FocusType where+ parseUnqt = liftM XY parseUnqt `onFail` liftM NodeFocus parseUnqt+ parse = liftM XY parse `onFail` liftM NodeFocus parse++data VerticalPlacement = VTop+ | VCenter+ | VBottom+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot VerticalPlacement where+ unqtDot VTop = char 't'+ unqtDot VCenter = char 'c'+ unqtDot VBottom = char 'b'++instance ParseDot VerticalPlacement where+ parseUnqt+ = oneOf+ [stringRep VTop "t", stringRep VCenter "c", stringRep VBottom "b"]++data ScaleType = UniformScale+ | NoScale+ | FillWidth+ | FillHeight+ | FillBoth+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot ScaleType where+ unqtDot UniformScale = unqtDot True+ unqtDot NoScale = unqtDot False+ unqtDot FillWidth = text "width"+ unqtDot FillHeight = text "height"+ unqtDot FillBoth = text "both"++instance ParseDot ScaleType where+ parseUnqt+ = oneOf+ [stringRep UniformScale "true", stringRep NoScale "false",+ stringRep FillWidth "width", stringRep FillHeight "height",+ stringRep FillBoth "both"]++data Justification = JLeft+ | JRight+ | JCenter+ deriving (Eq, Ord, Bounded, Enum, Show, Read)++instance PrintDot Justification where+ unqtDot JLeft = char 'l'+ unqtDot JRight = char 'r'+ unqtDot JCenter = char 'c'++instance ParseDot Justification where+ parseUnqt+ = oneOf+ [stringRep JLeft "l", stringRep JRight "r", stringRep JCenter "c"]++data Ratios = AspectRatio Double+ | FillRatio+ | CompressRatio+ | ExpandRatio+ | AutoRatio+ deriving (Eq, Ord, Show, Read)++instance PrintDot Ratios where+ unqtDot (AspectRatio r) = unqtDot r+ unqtDot FillRatio = text "fill"+ unqtDot CompressRatio = text "compress"+ unqtDot ExpandRatio = text "expand"+ unqtDot AutoRatio = text "auto"++instance ParseDot Ratios where+ parseUnqt+ = oneOf+ [liftM AspectRatio parseUnqt, stringRep FillRatio "fill",+ stringRep CompressRatio "compress", stringRep ExpandRatio "expand",+ stringRep AutoRatio "auto"]
@@ -0,0 +1,5 @@+module BadStringLineBreak where++main = print $ "hello" ++ "world+-- any random junk that goes here gets added onto the character count+-- and the quote ends it with some garbage "
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/BadStringLineBreak.hs" 3 27) "Improperly terminated string"
@@ -0,0 +1,3 @@+ParseFailed+ (SrcLoc "tests/examples/BadStringLineBreak.hs" 3 27)+ "Improperly terminated string"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/BadStringLineBreak.hs" 3 27) "Improperly terminated string"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/BadStringLineBreak.hs" 3 27) "Improperly terminated string"
@@ -0,0 +1,8 @@+{-# LANGUAGE BangPatterns #-}+module BangPatterns where++firstnonspace :: Ptr Word8 -> Int -> Int -> IO Int+firstnonspace !ptr !n !m+ | n >= m = return n+ | otherwise = do w <- peekElemOff ptr n+ if isSpaceWord8 w then firstnonspace ptr (n+1) m else return n
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,768 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 1 1 9 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 1 1 1 1+ , SrcSpan "tests/examples/BangPatterns.hs" 2 1 2 1+ , SrcSpan "tests/examples/BangPatterns.hs" 2 1 2 1+ , SrcSpan "tests/examples/BangPatterns.hs" 4 1 4 1+ , SrcSpan "tests/examples/BangPatterns.hs" 5 1 5 1+ , SrcSpan "tests/examples/BangPatterns.hs" 9 1 9 1+ , SrcSpan "tests/examples/BangPatterns.hs" 9 1 9 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 2 1 2 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 2 1 2 7+ , SrcSpan "tests/examples/BangPatterns.hs" 2 21 2 26+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 2 8 2 20+ , srcInfoPoints = []+ }+ "BangPatterns")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 1 1 1 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 1 1 1 13+ , SrcSpan "tests/examples/BangPatterns.hs" 1 27 1 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 1 14 1 26+ , srcInfoPoints = []+ }+ "BangPatterns"+ ]+ ]+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 1 4 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 4 15 4 17 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 1 4 14+ , srcInfoPoints = []+ }+ "firstnonspace"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 18 4 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 4 28 4 30 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 18 4 27+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 18 4 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 18 4 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 18 4 21+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 22 4 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 22 4 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 22 4 27+ , srcInfoPoints = []+ }+ "Word8"))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 31 4 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 4 35 4 37 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 31 4 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 31 4 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 31 4 34+ , srcInfoPoints = []+ }+ "Int")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 38 4 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 4 42 4 44 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 38 4 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 38 4 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 38 4 41+ , srcInfoPoints = []+ }+ "Int")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 45 4 51+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 45 4 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 45 4 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 45 4 47+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 48 4 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 48 4 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 4 48 4 51+ , srcInfoPoints = []+ }+ "Int")))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 1 8 84+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 1 8 84+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 1 5 14+ , srcInfoPoints = []+ }+ "firstnonspace")+ [ PBangPat+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 15 5 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 16 5 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 16 5 19+ , srcInfoPoints = []+ }+ "ptr"))+ , PBangPat+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 20 5 22+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 21 5 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 21 5 22+ , srcInfoPoints = []+ }+ "n"))+ , PBangPat+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 23 5 25+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 24 5 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 5 24 5 25+ , srcInfoPoints = []+ }+ "m"))+ ]+ (GuardedRhss+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 5 8 84+ , srcInfoPoints = []+ }+ [ GuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 5 6 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 6 5 6 6+ , SrcSpan "tests/examples/BangPatterns.hs" 6 17 6 18+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 7 6 13+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 7 6 13+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 7 6 8+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 7 6 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 6 7 6 8+ , srcInfoPoints = []+ }+ "n")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 9 6 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 6 9 6 11+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 6 9 6 11+ , srcInfoPoints = []+ }+ ">=")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 12 6 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 6 12 6 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 6 12 6 13+ , srcInfoPoints = []+ }+ "m"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 19 6 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 19 6 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 19 6 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 6 19 6 25+ , srcInfoPoints = []+ }+ "return")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 26 6 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 6 26 6 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 6 26 6 27+ , srcInfoPoints = []+ }+ "n"))))+ , GuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 5 8 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 7 5 7 6+ , SrcSpan "tests/examples/BangPatterns.hs" 7 17 7 18+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 7 7 16+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 7 7 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 7 7 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 7 7 16+ , srcInfoPoints = []+ }+ "otherwise")))+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 19 8 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 7 19 7 21+ , SrcSpan "tests/examples/BangPatterns.hs" 7 22 7 22+ , SrcSpan "tests/examples/BangPatterns.hs" 8 22 8 22+ , SrcSpan "tests/examples/BangPatterns.hs" 9 1 9 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 22 7 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 7 24 7 26 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 22 7 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 22 7 23+ , srcInfoPoints = []+ }+ "w"))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 7 27 7 44+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 27 7 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 27 7 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 27 7 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 27 7 38+ , srcInfoPoints = []+ }+ "peekElemOff")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 39 7 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 39 7 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 39 7 42+ , srcInfoPoints = []+ }+ "ptr"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 43 7 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 43 7 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 7 43 7 44+ , srcInfoPoints = []+ }+ "n"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 8 22 8 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 8 22 8 24+ , SrcSpan "tests/examples/BangPatterns.hs" 8 40 8 44+ , SrcSpan "tests/examples/BangPatterns.hs" 8 71 8 75+ ]+ }+ (If+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangPatterns.hs" 8 22 8 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 8 22 8 24+ , SrcSpan "tests/examples/BangPatterns.hs" 8 40 8 44+ , SrcSpan "tests/examples/BangPatterns.hs" 8 71 8 75+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 25 8 39+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 25 8 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 25 8 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 25 8 37+ , srcInfoPoints = []+ }+ "isSpaceWord8")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 38 8 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 38 8 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 38 8 39+ , srcInfoPoints = []+ }+ "w"))))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 45 8 70+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 45 8 68+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 45 8 62+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 45 8 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 45 8 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 45 8 58+ , srcInfoPoints = []+ }+ "firstnonspace")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 59 8 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 59 8 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 59 8 62+ , srcInfoPoints = []+ }+ "ptr"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 63 8 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangPatterns.hs" 8 63 8 64+ , SrcSpan "tests/examples/BangPatterns.hs" 8 67 8 68+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 64 8 67+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 64 8 65+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 64 8 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs"+ 8+ 64+ 8+ 65+ , srcInfoPoints = []+ }+ "n")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 65 8 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 65 8 66+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs"+ 8+ 65+ 8+ 66+ , srcInfoPoints = []+ }+ "+")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 66 8 67+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BangPatterns.hs" 8 66 8 67+ , srcInfoPoints = []+ }+ 1+ "1")))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 69 8 70+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 69 8 70+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 69 8 70+ , srcInfoPoints = []+ }+ "m"))))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 76 8 84+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 76 8 82+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 76 8 82+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 76 8 82+ , srcInfoPoints = []+ }+ "return")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 83 8 84+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 83 8 84+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BangPatterns.hs" 8 83 8 84+ , srcInfoPoints = []+ }+ "n")))))+ ])+ ])+ Nothing+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,9 @@+{-# LANGUAGE BangPatterns #-}+module BangPatterns where++firstnonspace :: Ptr Word8 -> Int -> Int -> IO Int+firstnonspace !ptr !n !m+ | n >= m = return n+ | otherwise =+ do w <- peekElemOff ptr n+ if isSpaceWord8 w then firstnonspace ptr (n + 1) m else return n
@@ -0,0 +1,2 @@+{-# LANGUAGE BangPatterns, ViewPatterns #-}+someFun (id -> !arg) = undefined
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,129 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 1 1 3 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangViewPat.hs" 1 1 1 1+ , SrcSpan "tests/examples/BangViewPat.hs" 2 1 2 1+ , SrcSpan "tests/examples/BangViewPat.hs" 2 1 2 1+ , SrcSpan "tests/examples/BangViewPat.hs" 2 1 2 1+ , SrcSpan "tests/examples/BangViewPat.hs" 3 1 3 1+ , SrcSpan "tests/examples/BangViewPat.hs" 3 1 3 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 1 1 1 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangViewPat.hs" 1 1 1 13+ , SrcSpan "tests/examples/BangViewPat.hs" 1 26 1 27+ , SrcSpan "tests/examples/BangViewPat.hs" 1 41 1 44+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 1 14 1 26+ , srcInfoPoints = []+ }+ "BangPatterns"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 1 28 1 40+ , srcInfoPoints = []+ }+ "ViewPatterns"+ ]+ ]+ []+ [ FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 1 2 33+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 1 2 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 1 2 8+ , srcInfoPoints = []+ }+ "someFun")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 9 2 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangViewPat.hs" 2 9 2 10+ , SrcSpan "tests/examples/BangViewPat.hs" 2 20 2 21+ ]+ }+ (PViewPat+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 10 2 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangViewPat.hs" 2 13 2 15 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 10 2 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 10 2 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 10 2 12+ , srcInfoPoints = []+ }+ "id")))+ (PBangPat+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 16 2 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangViewPat.hs" 2 16 2 17 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 17 2 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 17 2 20+ , srcInfoPoints = []+ }+ "arg"))))+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 22 2 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BangViewPat.hs" 2 22 2 23 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 24 2 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 24 2 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BangViewPat.hs" 2 24 2 33+ , srcInfoPoints = []+ }+ "undefined"))))+ Nothing+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,2 @@+{-# LANGUAGE BangPatterns, ViewPatterns #-}+someFun (id -> !arg) = undefined
@@ -0,0 +1,4 @@+-- Missing binary literals extension. Should fail.+f :: Int -> ()+f 0b0 = ()+f _ = ()
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/BinaryLiteralsBad.hs" 3 1) "arity mismatch for 'f'"
@@ -0,0 +1,3 @@+ParseFailed+ (SrcLoc "tests/examples/BinaryLiteralsBad.hs" 3 1)+ "arity mismatch for 'f'"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/BinaryLiteralsBad.hs" 3 1) "arity mismatch for 'f'"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/BinaryLiteralsBad.hs" 3 1) "arity mismatch for 'f'"
@@ -0,0 +1,23 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE MagicHash #-}++import GHC.Types++main = do+ print [ I# 0b0#, I# -0b0#, I# 0b1#, I# -0b1#+ , I# 0b00000000000000000000000000000000000000000000000000000000000000000000000000001#+ , I# -0b00000000000000000000000000000000000000000000000000000000000000000000000000001#+ , I# -0b11001001#, I# -0b11001001#+ , I# -0b11111111#, I# -0b11111111#+ ]+ print [ W# 0b0##, W# 0b1##, W# 0b11001001##, W# 0b11##, W# 0b11111111##+ , W# 0b00000000000000000000000000000000000000000000000000000000000000000000000000001##+ ]++ print [ 0b0, 0b1, 0b10, 0b11, 0b100, 0b101, 0b110, 0b111 :: Integer+ , -0b0, -0b1, -0b10, -0b11, -0b100, -0b101, -0b110, -0b111+ , 0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111+ , -0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111+ ]++ print [ I8# -0B10000000#, I8# 0B1111111# ]
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1539 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 1 1 24 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 1 1 1 1+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 2 1 2 1+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 4 1 4 1+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 4 1 4 1+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 4 1 4 1+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 1 6 1+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 24 1 24 1+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 24 1 24 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 1 1 1 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 1 1 1 13+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 1 29 1 32+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 1 14 1 28+ , srcInfoPoints = []+ }+ "BinaryLiterals"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 2 1 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 2 1 2 13+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 2 24 2 27+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 2 14 2 23+ , srcInfoPoints = []+ }+ "MagicHash"+ ]+ ]+ [ ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 4 1 4 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 4 1 4 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 4 8 4 17+ , srcInfoPoints = []+ }+ "GHC.Types"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ ]+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 1 23 47+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 1 6 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 1 6 5+ , srcInfoPoints = []+ }+ "main"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 6 23 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 6 6 7 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 8 23 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 6 8 6 10+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 5 7 5+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 5 13 5+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 5 17 5+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 5 23 5+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 24 1 24 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 5 12 12+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 5 12 12+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 5 7 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 5 7 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 5 7 10+ , srcInfoPoints = []+ }+ "print")))+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 11 12 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 11 7 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 20 7 21+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 30 7 31+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 39 7 40+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 8 11 8 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 11 9 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 11 10 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 28 10 29+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 11 11 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 28 11 29+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 12 11 12 12+ ]+ }+ [ App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 13 7 20+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 13 7 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 13 7 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 7 13 7 15+ , srcInfoPoints = []+ }+ "I#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 16 7 20+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 16 7 20+ , srcInfoPoints = []+ }+ 0+ "0b0"))+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 22 7 30+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 22 7 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 22 7 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 7 22 7 24+ , srcInfoPoints = []+ }+ "I#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 26 7 30+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 26 7 30+ , srcInfoPoints = []+ }+ 0+ "0b0"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 32 7 39+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 32 7 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 32 7 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 7 32 7 34+ , srcInfoPoints = []+ }+ "I#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 35 7 39+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 35 7 39+ , srcInfoPoints = []+ }+ 1+ "0b1"))+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 41 7 49+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 41 7 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 41 7 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 7 41 7 43+ , srcInfoPoints = []+ }+ "I#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 44 7 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 44 7 45+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 7 44 7 45+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 45 7 49+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 7 45 7 49+ , srcInfoPoints = []+ }+ 1+ "0b1"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 8 13 8 96+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 8 13 8 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 8 13 8 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 8 13 8 15+ , srcInfoPoints = []+ }+ "I#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 8 16 8 96+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 8 16 8 96+ , srcInfoPoints = []+ }+ 1+ "0b00000000000000000000000000000000000000000000000000000000000000000000000000001"))+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 13 9 97+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 13 9 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 13 9 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 9 13 9 15+ , srcInfoPoints = []+ }+ "I#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 16 9 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 16 9 17+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 9 16 9 17+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 17 9 97+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 9 17 9 97+ , srcInfoPoints = []+ }+ 1+ "0b00000000000000000000000000000000000000000000000000000000000000000000000000001"))+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 13 10 28+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 13 10 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 13 10 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 10 13 10 15+ , srcInfoPoints = []+ }+ "I#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 16 10 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 16 10 17+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 10 16 10 17+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 17 10 28+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 17 10 28+ , srcInfoPoints = []+ }+ 201+ "0b11001001"))+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 30 10 45+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 30 10 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 30 10 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 10 30 10 32+ , srcInfoPoints = []+ }+ "I#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 33 10 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 33 10 34+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 10 33 10 34+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 34 10 45+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 10 34 10 45+ , srcInfoPoints = []+ }+ 201+ "0b11001001"))+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 13 11 28+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 13 11 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 13 11 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 11 13 11 15+ , srcInfoPoints = []+ }+ "I#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 16 11 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 16 11 17+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 11 16 11 17+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 17 11 28+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 17 11 28+ , srcInfoPoints = []+ }+ 255+ "0b11111111"))+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 30 11 45+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 30 11 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 30 11 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 11 30 11 32+ , srcInfoPoints = []+ }+ "I#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 33 11 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 33 11 34+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 11 33 11 34+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 34 11 45+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 11 34 11 45+ , srcInfoPoints = []+ }+ 255+ "0b11111111"))+ ]))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 5 15 12+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 5 15 12+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 5 13 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 5 13 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 5 13 10+ , srcInfoPoints = []+ }+ "print")))+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 11 15 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 11 13 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 21 13 22+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 31 13 32+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 48 13 49+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 59 13 60+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 14 11 14 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 15 11 15 12+ ]+ }+ [ App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 13 13 21+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 13 13 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 13 13 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 13 13 13 15+ , srcInfoPoints = []+ }+ "W#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 16 13 21+ , srcInfoPoints = []+ }+ (PrimWord+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 16 13 21+ , srcInfoPoints = []+ }+ 0+ "0b0"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 23 13 31+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 23 13 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 23 13 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 13 23 13 25+ , srcInfoPoints = []+ }+ "W#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 26 13 31+ , srcInfoPoints = []+ }+ (PrimWord+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 26 13 31+ , srcInfoPoints = []+ }+ 1+ "0b1"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 33 13 48+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 33 13 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 33 13 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 13 33 13 35+ , srcInfoPoints = []+ }+ "W#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 36 13 48+ , srcInfoPoints = []+ }+ (PrimWord+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 36 13 48+ , srcInfoPoints = []+ }+ 201+ "0b11001001"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 50 13 59+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 50 13 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 50 13 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 13 50 13 52+ , srcInfoPoints = []+ }+ "W#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 53 13 59+ , srcInfoPoints = []+ }+ (PrimWord+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 53 13 59+ , srcInfoPoints = []+ }+ 3+ "0b11"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 61 13 76+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 61 13 63+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 61 13 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 13 61 13 63+ , srcInfoPoints = []+ }+ "W#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 64 13 76+ , srcInfoPoints = []+ }+ (PrimWord+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 13 64 13 76+ , srcInfoPoints = []+ }+ 255+ "0b11111111"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 14 13 14 97+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 14 13 14 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 14 13 14 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 14 13 14 15+ , srcInfoPoints = []+ }+ "W#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 14 16 14 97+ , srcInfoPoints = []+ }+ (PrimWord+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 14 16 14 97+ , srcInfoPoints = []+ }+ 1+ "0b00000000000000000000000000000000000000000000000000000000000000000000000000001"))+ ]))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 5 21 12+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 5 21 12+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 5 17 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 5 17 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 5 17 10+ , srcInfoPoints = []+ }+ "print")))+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 11 21 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 11 17 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 16 17 17+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 21 17 22+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 27 17 28+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 33 17 34+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 40 17 41+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 47 17 48+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 54 17 55+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 11 18 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 17 18 18+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 23 18 24+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 30 18 31+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 37 18 38+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 45 18 46+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 53 18 54+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 61 18 62+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 19 11 19 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 20 11 20 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 21 11 21 12+ ]+ }+ [ Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 13 17 16+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 13 17 16+ , srcInfoPoints = []+ }+ 0+ "0b0")+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 18 17 21+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 18 17 21+ , srcInfoPoints = []+ }+ 1+ "0b1")+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 23 17 27+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 23 17 27+ , srcInfoPoints = []+ }+ 2+ "0b10")+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 29 17 33+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 29 17 33+ , srcInfoPoints = []+ }+ 3+ "0b11")+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 35 17 40+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 35 17 40+ , srcInfoPoints = []+ }+ 4+ "0b100")+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 42 17 47+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 42 17 47+ , srcInfoPoints = []+ }+ 5+ "0b101")+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 49 17 54+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 49 17 54+ , srcInfoPoints = []+ }+ 6+ "0b110")+ , ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 56 17 72+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 62 17 64 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 56 17 61+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 56 17 61+ , srcInfoPoints = []+ }+ 7+ "0b111"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 65 17 72+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 17 65 17 72+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 17 65 17 72+ , srcInfoPoints = []+ }+ "Integer")))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 13 18 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 13 18 14 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 14 18 17+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 14 18 17+ , srcInfoPoints = []+ }+ 0+ "0b0"))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 19 18 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 19 18 20 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 20 18 23+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 20 18 23+ , srcInfoPoints = []+ }+ 1+ "0b1"))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 25 18 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 25 18 26 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 26 18 30+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 26 18 30+ , srcInfoPoints = []+ }+ 2+ "0b10"))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 32 18 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 32 18 33 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 33 18 37+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 33 18 37+ , srcInfoPoints = []+ }+ 3+ "0b11"))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 39 18 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 39 18 40 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 40 18 45+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 40 18 45+ , srcInfoPoints = []+ }+ 4+ "0b100"))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 47 18 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 47 18 48 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 48 18 53+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 48 18 53+ , srcInfoPoints = []+ }+ 5+ "0b101"))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 55 18 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 55 18 56 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 56 18 61+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 56 18 61+ , srcInfoPoints = []+ }+ 6+ "0b110"))+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 63 18 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 63 18 64 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 64 18 69+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 18 64 18 69+ , srcInfoPoints = []+ }+ 7+ "0b111"))+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 19 13 19 143+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 19 13 19 143+ , srcInfoPoints = []+ }+ 340282366920938463463374607431768211455+ "0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")+ , NegApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 20 13 20 144+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 20 13 20 14 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 20 14 20 144+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 20 14 20 144+ , srcInfoPoints = []+ }+ 340282366920938463463374607431768211455+ "0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"))+ ]))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 5 23 47+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 5 23 47+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 5 23 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 5 23 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 5 23 10+ , srcInfoPoints = []+ }+ "print")))+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 11 23 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 11 23 12+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 29 23 30+ , SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 46 23 47+ ]+ }+ [ InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 13 23 29+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 13 23 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 13 23 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 23 13 23 16+ , srcInfoPoints = []+ }+ "I8#")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 17 23 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 17 23 18+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 23 17 23 18+ , srcInfoPoints = []+ }+ "-")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 18 23 29+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 18 23 29+ , srcInfoPoints = []+ }+ 128+ "0B10000000"))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 31 23 45+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 31 23 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 31 23 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BinaryLiteralsGood.hs" 23 31 23 34+ , srcInfoPoints = []+ }+ "I8#")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 35 23 45+ , srcInfoPoints = []+ }+ (PrimInt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BinaryLiteralsGood.hs" 23 35 23 45+ , srcInfoPoints = []+ }+ 127+ "0B1111111"))+ ]))+ ]))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,10 @@+Roundtrip test failed++AST 1:++Module () Nothing [LanguagePragma () [Ident () "BinaryLiterals"],LanguagePragma () [Ident () "MagicHash"]] [ImportDecl {importAnn = (), importModule = ModuleName () "GHC.Types", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Nothing}] [PatBind () (PVar () (Ident () "main")) (UnGuardedRhs () (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [App () (Con () (UnQual () (Ident () "I#"))) (Lit () (PrimInt () 0 "0b0")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 0 "0b0")),App () (Con () (UnQual () (Ident () "I#"))) (Lit () (PrimInt () 1 "0b1")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 1 "0b1")),App () (Con () (UnQual () (Ident () "I#"))) (Lit () (PrimInt () 1 "0b00000000000000000000000000000000000000000000000000000000000000000000000000001")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 1 "0b00000000000000000000000000000000000000000000000000000000000000000000000000001")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 201 "0b11001001")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 201 "0b11001001")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 255 "0b11111111")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 255 "0b11111111"))])),Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 0 "0b0")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 1 "0b1")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 201 "0b11001001")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 3 "0b11")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 255 "0b11111111")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 1 "0b00000000000000000000000000000000000000000000000000000000000000000000000000001"))])),Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [Lit () (Int () 0 "0b0"),Lit () (Int () 1 "0b1"),Lit () (Int () 2 "0b10"),Lit () (Int () 3 "0b11"),Lit () (Int () 4 "0b100"),Lit () (Int () 5 "0b101"),Lit () (Int () 6 "0b110"),ExpTypeSig () (Lit () (Int () 7 "0b111")) (TyCon () (UnQual () (Ident () "Integer"))),NegApp () (Lit () (Int () 0 "0b0")),NegApp () (Lit () (Int () 1 "0b1")),NegApp () (Lit () (Int () 2 "0b10")),NegApp () (Lit () (Int () 3 "0b11")),NegApp () (Lit () (Int () 4 "0b100")),NegApp () (Lit () (Int () 5 "0b101")),NegApp () (Lit () (Int () 6 "0b110")),NegApp () (Lit () (Int () 7 "0b111")),Lit () (Int () 340282366920938463463374607431768211455 "0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"),NegApp () (Lit () (Int () 340282366920938463463374607431768211455 "0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"))])),Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [InfixApp () (Con () (UnQual () (Ident () "I8#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 128 "0B10000000")),App () (Con () (UnQual () (Ident () "I8#"))) (Lit () (PrimInt () 127 "0B1111111"))]))])) Nothing]++AST 2:++Module () Nothing [LanguagePragma () [Ident () "BinaryLiterals"],LanguagePragma () [Ident () "MagicHash"]] [ImportDecl {importAnn = (), importModule = ModuleName () "GHC.Types", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Nothing}] [PatBind () (PVar () (Ident () "main")) (UnGuardedRhs () (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [App () (Con () (UnQual () (Ident () "I#"))) (Lit () (PrimInt () 0 "0")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 0 "0")),App () (Con () (UnQual () (Ident () "I#"))) (Lit () (PrimInt () 1 "1")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 1 "1")),App () (Con () (UnQual () (Ident () "I#"))) (Lit () (PrimInt () 1 "1")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 1 "1")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 201 "201")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 201 "201")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 255 "255")),InfixApp () (Con () (UnQual () (Ident () "I#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 255 "255"))])),Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 0 "0")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 1 "1")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 201 "201")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 3 "3")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 255 "255")),App () (Con () (UnQual () (Ident () "W#"))) (Lit () (PrimWord () 1 "1"))])),Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [Lit () (Int () 0 "0"),Lit () (Int () 1 "1"),Lit () (Int () 2 "2"),Lit () (Int () 3 "3"),Lit () (Int () 4 "4"),Lit () (Int () 5 "5"),Lit () (Int () 6 "6"),ExpTypeSig () (Lit () (Int () 7 "7")) (TyCon () (UnQual () (Ident () "Integer"))),NegApp () (Lit () (Int () 0 "0")),NegApp () (Lit () (Int () 1 "1")),NegApp () (Lit () (Int () 2 "2")),NegApp () (Lit () (Int () 3 "3")),NegApp () (Lit () (Int () 4 "4")),NegApp () (Lit () (Int () 5 "5")),NegApp () (Lit () (Int () 6 "6")),NegApp () (Lit () (Int () 7 "7")),Lit () (Int () 340282366920938463463374607431768211455 "340282366920938463463374607431768211455"),NegApp () (Lit () (Int () 340282366920938463463374607431768211455 "340282366920938463463374607431768211455"))])),Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (List () [InfixApp () (Con () (UnQual () (Ident () "I8#"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (PrimInt () 128 "128")),App () (Con () (UnQual () (Ident () "I8#"))) (Lit () (PrimInt () 127 "127"))]))])) Nothing]+
@@ -0,0 +1,13 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE MagicHash #-}+import GHC.Types+main+ = do print+ [I# 0#, I# - 0#, I# 1#, I# - 1#, I# 1#, I# - 1#, I# - 201#,+ I# - 201#, I# - 255#, I# - 255#]+ print [W# 0##, W# 1##, W# 201##, W# 3##, W# 255##, W# 1##]+ print+ [0, 1, 2, 3, 4, 5, 6, 7 :: Integer, -0, -1, -2, -3, -4, -5, -6, -7,+ 340282366920938463463374607431768211455,+ -340282366920938463463374607431768211455]+ print [I8# - 128#, I8# 127#]
@@ -0,0 +1,16 @@+{-# LANGUAGE BlockArguments #-}+module BlockArguments where++foo = when (x > 0) do+ print x+ exitFailure++bar = withForeignPtr fptr \ptr -> c_memcpy buf ptr size++baz arg1 arg2 arg3 arg4 = initialValue+ & someFunction arg1 arg2+ >>= traverse \(x, y) -> do+ a <- f x+ b <- g y+ h a b+ >>= anotherFunction arg3 arg4
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1099 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 1 1 17 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 1 1 1 1+ , SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 1+ , SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 1+ , SrcSpan "tests/examples/BlockArguments.hs" 4 1 4 1+ , SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 1+ , SrcSpan "tests/examples/BlockArguments.hs" 10 1 10 1+ , SrcSpan "tests/examples/BlockArguments.hs" 17 1 17 1+ , SrcSpan "tests/examples/BlockArguments.hs" 17 1 17 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 7+ , SrcSpan "tests/examples/BlockArguments.hs" 2 23 2 28+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 2 8 2 22+ , srcInfoPoints = []+ }+ "BlockArguments")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 1 1 1 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 1 1 1 13+ , SrcSpan "tests/examples/BlockArguments.hs" 1 29 1 32+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 1 14 1 28+ , srcInfoPoints = []+ }+ "BlockArguments"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 1 6 14+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 5 6 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 4 5 4 6 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 6 14+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 11+ , srcInfoPoints = []+ }+ "when")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 12 4 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 4 12 4 13+ , SrcSpan "tests/examples/BlockArguments.hs" 4 18 4 19+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 18+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ "x")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 15 4 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 15 4 16+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 15 4 16+ , srcInfoPoints = []+ }+ ">")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 17 4 18+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 17 4 18+ , srcInfoPoints = []+ }+ 0+ "0")))))+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 4 20 6 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 4 20 4 22+ , SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 3+ , SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 3+ , SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 10+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 10+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 8+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 8+ , srcInfoPoints = []+ }+ "print")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 9 5 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 5 9 5 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 5 9 5 10+ , srcInfoPoints = []+ }+ "x"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14+ , srcInfoPoints = []+ }+ "exitFailure")))+ ])))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 56+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 4+ , srcInfoPoints = []+ }+ "bar"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 5 8 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 8 5 8 6 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 56+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 21+ , srcInfoPoints = []+ }+ "withForeignPtr")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 22 8 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 22 8 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 22 8 26+ , srcInfoPoints = []+ }+ "fptr"))))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 27 8 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 8 27 8 28+ , SrcSpan "tests/examples/BlockArguments.hs" 8 32 8 34+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 28 8 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 28 8 31+ , srcInfoPoints = []+ }+ "ptr")+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 56+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 51+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 47+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 43+ , srcInfoPoints = []+ }+ "c_memcpy")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 44 8 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 44 8 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 44 8 47+ , srcInfoPoints = []+ }+ "buf"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 48 8 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 48 8 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 48 8 51+ , srcInfoPoints = []+ }+ "ptr"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 52 8 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 52 8 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 8 52 8 56+ , srcInfoPoints = []+ }+ "size")))))))+ Nothing+ , FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 1 16 32+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 1 16 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 1 10 4+ , srcInfoPoints = []+ }+ "baz")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 5 10 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 5 10 9+ , srcInfoPoints = []+ }+ "arg1")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 10 10 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 10 10 14+ , srcInfoPoints = []+ }+ "arg2")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 15 10 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 15 10 19+ , srcInfoPoints = []+ }+ "arg3")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 20 10 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 20 10 24+ , srcInfoPoints = []+ }+ "arg4")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 25 16 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 10 25 10 26 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 27 16 32+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 27 11 29+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 27 10 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 27 10 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 10 27 10 39+ , srcInfoPoints = []+ }+ "initialValue")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 3 11 4+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 3 11 4+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 3 11 4+ , srcInfoPoints = []+ }+ "&")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 29+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 19+ , srcInfoPoints = []+ }+ "someFunction")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 20 11 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 20 11 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 20 11 24+ , srcInfoPoints = []+ }+ "arg1"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 25 11 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 25 11 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 11 25 11 29+ , srcInfoPoints = []+ }+ "arg2")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 3 12 6+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 3 12 6+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 3 12 6+ , srcInfoPoints = []+ }+ ">>=")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 7 16 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 7 12 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 7 12 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 7 12 15+ , srcInfoPoints = []+ }+ "traverse")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 16 16 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 12 16 12 17+ , SrcSpan "tests/examples/BlockArguments.hs" 12 24 12 26+ ]+ }+ [ PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 17 12 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 12 17 12 18+ , SrcSpan "tests/examples/BlockArguments.hs" 12 19 12 20+ , SrcSpan "tests/examples/BlockArguments.hs" 12 22 12 23+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 18 12 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 18 12 19+ , srcInfoPoints = []+ }+ "x")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 21 12 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 21 12 22+ , srcInfoPoints = []+ }+ "y")+ ]+ ]+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 27 16 32+ , srcInfoPoints = []+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 12 27 15 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 12 27 12 29+ , SrcSpan "tests/examples/BlockArguments.hs" 13 9 13 9+ , SrcSpan "tests/examples/BlockArguments.hs" 14 9 14 9+ , SrcSpan "tests/examples/BlockArguments.hs" 15 9 15 9+ , SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 13 9 13 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 13 11 13 13 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 13 9 13 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 13 9 13 10+ , srcInfoPoints = []+ }+ "a"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 13 14 13 17+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 13 14 13 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 13 14 13 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 13+ 14+ 13+ 15+ , srcInfoPoints = []+ }+ "f")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 13 16 13 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 13 16 13 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 13+ 16+ 13+ 17+ , srcInfoPoints = []+ }+ "x"))))+ , Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 14 9 14 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BlockArguments.hs" 14 11 14 13 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 14 9 14 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 14 9 14 10+ , srcInfoPoints = []+ }+ "b"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 14 14 14 17+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 14 14 14 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 14 14 14 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 14+ 14+ 14+ 15+ , srcInfoPoints = []+ }+ "g")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 14 16 14 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 14 16 14 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 14+ 16+ 14+ 17+ , srcInfoPoints = []+ }+ "y"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 15 9 15 14+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 15 9 15 14+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 15 9 15 12+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 15 9 15 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 15+ 9+ 15+ 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 15+ 9+ 15+ 10+ , srcInfoPoints = []+ }+ "h")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 15 11 15 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 15+ 11+ 15+ 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 15+ 11+ 15+ 12+ , srcInfoPoints = []+ }+ "a"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 15 13 15 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 15 13 15 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs"+ 15+ 13+ 15+ 14+ , srcInfoPoints = []+ }+ "b"))))+ ])+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 6+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 6+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 6+ , srcInfoPoints = []+ }+ ">>=")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 16 7 16 22+ , srcInfoPoints = []+ }+ "anotherFunction")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 23 16 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 16 23 16 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 16 23 16 27+ , srcInfoPoints = []+ }+ "arg3"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 28 16 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BlockArguments.hs" 16 28 16 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/BlockArguments.hs" 16 28 16 32+ , srcInfoPoints = []+ }+ "arg4")))))))))+ Nothing+ ]+ ]+ , []+ )
@@ -0,0 +1,10 @@+Roundtrip test failed++AST 1:++Module () (Just (ModuleHead () (ModuleName () "BlockArguments") Nothing Nothing)) [LanguagePragma () [Ident () "BlockArguments"]] [] [PatBind () (PVar () (Ident () "foo")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "x"))) (QVarOp () (UnQual () (Symbol () ">"))) (Lit () (Int () 0 "0"))))) (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (Var () (UnQual () (Ident () "x")))),Qualifier () (Var () (UnQual () (Ident () "exitFailure")))]))) Nothing,PatBind () (PVar () (Ident () "bar")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fptr")))) (Lambda () [PVar () (Ident () "ptr")] (App () (App () (App () (Var () (UnQual () (Ident () "c_memcpy"))) (Var () (UnQual () (Ident () "buf")))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "size"))))))) Nothing,FunBind () [Match () (Ident () "baz") [PVar () (Ident () "arg1"),PVar () (Ident () "arg2"),PVar () (Ident () "arg3"),PVar () (Ident () "arg4")] (UnGuardedRhs () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "initialValue"))) (QVarOp () (UnQual () (Symbol () "&"))) (App () (App () (Var () (UnQual () (Ident () "someFunction"))) (Var () (UnQual () (Ident () "arg1")))) (Var () (UnQual () (Ident () "arg2"))))) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (Var () (UnQual () (Ident () "traverse"))) (Lambda () [PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "y")]] (InfixApp () (Do () [Generator () (PVar () (Ident () "a")) (App () (Var () (UnQual () (Ident () "f"))) (Var () (UnQual () (Ident () "x")))),Generator () (PVar () (Ident () "b")) (App () (Var () (UnQual () (Ident () "g"))) (Var () (UnQual () (Ident () "y")))),Qualifier () (App () (App () (Var () (UnQual () (Ident () "h"))) (Var () (UnQual () (Ident () "a")))) (Var () (UnQual () (Ident () "b"))))]) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (App () (Var () (UnQual () (Ident () "anotherFunction"))) (Var () (UnQual () (Ident () "arg3")))) (Var () (UnQual () (Ident () "arg4"))))))))) Nothing]]++AST 2:++Module () (Just (ModuleHead () (ModuleName () "BlockArguments") Nothing Nothing)) [LanguagePragma () [Ident () "BlockArguments"]] [] [PatBind () (PVar () (Ident () "foo")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "x"))) (QVarOp () (UnQual () (Symbol () ">"))) (Lit () (Int () 0 "0"))))) (Paren () (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (Var () (UnQual () (Ident () "x")))),Qualifier () (Var () (UnQual () (Ident () "exitFailure")))])))) Nothing,PatBind () (PVar () (Ident () "bar")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fptr")))) (Paren () (Lambda () [PVar () (Ident () "ptr")] (App () (App () (App () (Var () (UnQual () (Ident () "c_memcpy"))) (Var () (UnQual () (Ident () "buf")))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "size")))))))) Nothing,FunBind () [Match () (Ident () "baz") [PVar () (Ident () "arg1"),PVar () (Ident () "arg2"),PVar () (Ident () "arg3"),PVar () (Ident () "arg4")] (UnGuardedRhs () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "initialValue"))) (QVarOp () (UnQual () (Symbol () "&"))) (App () (App () (Var () (UnQual () (Ident () "someFunction"))) (Var () (UnQual () (Ident () "arg1")))) (Var () (UnQual () (Ident () "arg2"))))) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (Var () (UnQual () (Ident () "traverse"))) (Paren () (Lambda () [PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "y")]] (InfixApp () (Do () [Generator () (PVar () (Ident () "a")) (App () (Var () (UnQual () (Ident () "f"))) (Var () (UnQual () (Ident () "x")))),Generator () (PVar () (Ident () "b")) (App () (Var () (UnQual () (Ident () "g"))) (Var () (UnQual () (Ident () "y")))),Qualifier () (App () (App () (Var () (UnQual () (Ident () "h"))) (Var () (UnQual () (Ident () "a")))) (Var () (UnQual () (Ident () "b"))))]) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (App () (Var () (UnQual () (Ident () "anotherFunction"))) (Var () (UnQual () (Ident () "arg3")))) (Var () (UnQual () (Ident () "arg4")))))))))) Nothing]]+
@@ -0,0 +1,15 @@+{-# LANGUAGE BlockArguments #-}+module BlockArguments where+foo+ = when (x > 0)+ (do print x+ exitFailure)+bar = withForeignPtr fptr (\ ptr -> c_memcpy buf ptr size)+baz arg1 arg2 arg3 arg4+ = initialValue & someFunction arg1 arg2 >>=+ traverse+ (\ (x, y) ->+ do a <- f x+ b <- g y+ h a b+ >>= anotherFunction arg3 arg4)
@@ -0,0 +1,1 @@+instance (Bounded a => Bounded [a]) where
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,151 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 1 2 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 1 1 1+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 1 1 1 1+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 1 1 1 1+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 2 1 2 1+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 2 1 2 1+ ]+ }+ Nothing+ []+ []+ [ InstDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 1 2 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 1 1 9+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 1 37 1 42+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 2 1 2 1+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 2 1 2 1+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 2 0 2 0+ ]+ }+ Nothing+ (IParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 10 1 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 10 1 11+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 1 35 1 36+ ]+ }+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 11 1 35+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 11 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 21 1 23 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 11 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 21 1 23 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 11 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 21 1 23 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 11 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 21 1 23 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 11 1 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 11 1 18+ , srcInfoPoints = []+ }+ "Bounded")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 19 1 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 19 1 20+ , srcInfoPoints = []+ }+ "a"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 24 1 35+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 24 1 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 24 1 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 24 1 31+ , srcInfoPoints = []+ }+ "Bounded")))+ (TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 32 1 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 32 1 33+ , SrcSpan "tests/examples/BracketInstanceHead.hs" 1 34 1 35+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 33 1 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/BracketInstanceHead.hs" 1 33 1 34+ , srcInfoPoints = []+ }+ "a"))))))+ (Just [])+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1 @@+instance (Bounded a => Bounded [a]) where
@@ -0,0 +1,2 @@+import Test.QuickCheck+-- prop_susShortest = 2 > 1 ==> 1 /= 2
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,42 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bug.hs" 1 1 3 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bug.hs" 1 1 1 1+ , SrcSpan "tests/examples/Bug.hs" 1 1 1 1+ , SrcSpan "tests/examples/Bug.hs" 1 1 1 1+ , SrcSpan "tests/examples/Bug.hs" 3 1 3 1+ , SrcSpan "tests/examples/Bug.hs" 3 1 3 1+ ]+ }+ Nothing+ []+ [ ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bug.hs" 1 1 1 23+ , srcInfoPoints = [ SrcSpan "tests/examples/Bug.hs" 1 1 1 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bug.hs" 1 8 1 23+ , srcInfoPoints = []+ }+ "Test.QuickCheck"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ ]+ []+ , [ Comment+ False+ (SrcSpan "tests/examples/Bug.hs" 2 1 2 39)+ " prop_susShortest = 2 > 1 ==> 1 /= 2"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1 @@+import Test.QuickCheck
@@ -0,0 +1,4 @@+{-# LANGUAGE PatternSynonyms #-}+module Bundles(Foo(..), Baz(..,Q), Qux(F,..), Tux(Q,..,F)) where++main = main
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,252 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 1 1 1 1+ , SrcSpan "tests/examples/Bundles.hs" 2 1 2 1+ , SrcSpan "tests/examples/Bundles.hs" 2 1 2 1+ , SrcSpan "tests/examples/Bundles.hs" 4 1 4 1+ , SrcSpan "tests/examples/Bundles.hs" 5 1 5 1+ , SrcSpan "tests/examples/Bundles.hs" 5 1 5 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 1 2 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 2 1 2 7+ , SrcSpan "tests/examples/Bundles.hs" 2 60 2 65+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 8 2 15+ , srcInfoPoints = []+ }+ "Bundles")+ Nothing+ (Just+ (ExportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 15 2 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 2 15 2 16+ , SrcSpan "tests/examples/Bundles.hs" 2 23 2 24+ , SrcSpan "tests/examples/Bundles.hs" 2 34 2 35+ , SrcSpan "tests/examples/Bundles.hs" 2 45 2 46+ , SrcSpan "tests/examples/Bundles.hs" 2 58 2 59+ ]+ }+ [ EThingWith+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 16 2 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 2 19 2 20+ , SrcSpan "tests/examples/Bundles.hs" 2 22 2 23+ ]+ }+ (EWildcard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 20 2 22+ , srcInfoPoints = []+ }+ 0)+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 16 2 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 16 2 19+ , srcInfoPoints = []+ }+ "Foo"))+ []+ , EThingWith+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 25 2 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 2 28 2 29+ , SrcSpan "tests/examples/Bundles.hs" 2 31 2 32+ , SrcSpan "tests/examples/Bundles.hs" 2 33 2 34+ ]+ }+ (EWildcard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 29 2 31+ , srcInfoPoints = []+ }+ 0)+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 25 2 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 25 2 28+ , srcInfoPoints = []+ }+ "Baz"))+ [ ConName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 32 2 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 32 2 33+ , srcInfoPoints = []+ }+ "Q")+ ]+ , EThingWith+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 36 2 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 2 39 2 40+ , SrcSpan "tests/examples/Bundles.hs" 2 41 2 42+ , SrcSpan "tests/examples/Bundles.hs" 2 44 2 45+ ]+ }+ (EWildcard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 42 2 44+ , srcInfoPoints = []+ }+ 1)+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 36 2 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 36 2 39+ , srcInfoPoints = []+ }+ "Qux"))+ [ ConName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 40 2 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 40 2 41+ , srcInfoPoints = []+ }+ "F")+ ]+ , EThingWith+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 47 2 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 2 50 2 51+ , SrcSpan "tests/examples/Bundles.hs" 2 52 2 53+ , SrcSpan "tests/examples/Bundles.hs" 2 55 2 56+ , SrcSpan "tests/examples/Bundles.hs" 2 57 2 58+ ]+ }+ (EWildcard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 53 2 55+ , srcInfoPoints = []+ }+ 1)+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 47 2 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 47 2 50+ , srcInfoPoints = []+ }+ "Tux"))+ [ ConName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 51 2 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 51 2 52+ , srcInfoPoints = []+ }+ "Q")+ , ConName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 56 2 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 2 56 2 57+ , srcInfoPoints = []+ }+ "F")+ ]+ ]))))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 1 1 1 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Bundles.hs" 1 1 1 13+ , SrcSpan "tests/examples/Bundles.hs" 1 30 1 33+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 1 14 1 29+ , srcInfoPoints = []+ }+ "PatternSynonyms"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 4 1 4 12+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 4 1 4 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 4 1 4 5+ , srcInfoPoints = []+ }+ "main"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 4 6 4 12+ , srcInfoPoints = [ SrcSpan "tests/examples/Bundles.hs" 4 6 4 7 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 4 8 4 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 4 8 4 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Bundles.hs" 4 8 4 12+ , srcInfoPoints = []+ }+ "main"))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE PatternSynonyms #-}+module Bundles (Foo(..), Baz(.., Q), Qux(F, ..), Tux(Q, .., F))+ where+main = main
@@ -0,0 +1,541 @@+{-# LANGUAGE BangPatterns, ForeignFunctionInterface, CPP #-}++-----------------------------------------------------------------------------+-- |+-- Module : ByteStringUtils+-- Copyright : (c) The University of Glasgow 2001,+-- David Roundy 2003-2005+-- License : GPL (I'm happy to also license this file BSD style but don't+-- want to bother distributing two license files with darcs.+--+-- Maintainer : droundy@abridgegame.org+-- Stability : experimental+-- Portability : portable+--+-- GZIp and MMap IO for ByteStrings, and miscellaneous functions for Data.ByteString+--++module ByteStringUtils (++ unsafeWithInternals,+ unpackPSfromUTF8,++ -- IO with mmap or gzip+ gzReadFilePS,+ mmapFilePS,+ gzWriteFilePS,+ gzWriteFilePSs,++ -- list utilities+ ifHeadThenTail,+ dropSpace,+ breakSpace,+ linesPS,+ unlinesPS,+ hashPS,+ breakFirstPS,+ breakLastPS,+ substrPS,+ readIntPS,+ is_funky,+ fromHex2PS,+ fromPS2Hex,+ betweenLinesPS,+ break_after_nth_newline,+ break_before_nth_newline,+ intercalate+ ) where++import Prelude hiding ( catch )+import qualified Data.ByteString as B+import qualified Data.ByteString.Char8 as BC+import qualified Data.ByteString.Internal as BI+import Data.ByteString (intercalate, uncons)+import Data.ByteString.Internal (fromForeignPtr)++-- #if defined (HAVE_MMAP) || ! defined (HAVE_HASKELL_ZLIB)+import Control.Exception ( catch )+-- #endif+import System.IO+import System.IO.Unsafe ( unsafePerformIO )++import Foreign.Storable ( peekElemOff, peek )+import Foreign.Marshal.Alloc ( free )+import Foreign.Marshal.Array ( mallocArray, peekArray, advancePtr )+import Foreign.C.Types ( CInt )++import Data.Bits ( rotateL )+import Data.Char ( chr, ord, isSpace )+import Data.Word ( Word8 )+import Data.Int ( Int32 )+import Control.Monad ( when )++-- #ifndef HAVE_HASKELL_ZLIB+import Foreign.Ptr ( nullPtr )+import Foreign.ForeignPtr ( ForeignPtr )+-- #endif+import Foreign.Ptr ( plusPtr, Ptr )+import Foreign.ForeignPtr ( withForeignPtr )++-- #ifdef DEBUG_PS+import Foreign.ForeignPtr ( addForeignPtrFinalizer )+import Foreign.Ptr ( FunPtr )+-- #endif++-- #if HAVE_HASKELL_ZLIB+import qualified Data.ByteString.Lazy as BL+import qualified Codec.Compression.GZip as GZ+-- #else+import Foreign.C.String ( CString, withCString )+-- #endif++-- #ifdef HAVE_MMAP+import System.IO.MMap( mmapFileByteString )+import System.Mem( performGC )+import System.Posix.Files( fileSize, getSymbolicLinkStatus )+-- #endif++-- -----------------------------------------------------------------------------+-- obsolete debugging code++-- # ifndef HAVE_HASKELL_ZLIB+debugForeignPtr :: ForeignPtr a -> String -> IO ()+-- #ifdef DEBUG_PS+foreign import ccall unsafe "static fpstring.h debug_alloc" debug_alloc+ :: Ptr a -> CString -> IO ()+foreign import ccall unsafe "static fpstring.h & debug_free" debug_free+ :: FunPtr (Ptr a -> IO ())+debugForeignPtr fp n =+ withCString n $ \cname-> withForeignPtr fp $ \p->+ do debug_alloc p cname+ addForeignPtrFinalizer debug_free fp+-- #else+debugForeignPtr _ _ = return ()+-- #endif+-- #endif++-- -----------------------------------------------------------------------------+-- unsafeWithInternals++-- | Do something with the internals of a PackedString. Beware of+-- altering the contents!+unsafeWithInternals :: B.ByteString -> (Ptr Word8 -> Int -> IO a) -> IO a+unsafeWithInternals ps f+ = case BI.toForeignPtr ps of+ (fp,s,l) -> withForeignPtr fp $ \p -> f (p `plusPtr` s) l++-- | readIntPS skips any whitespace at the beginning of its argument, and+-- reads an Int from the beginning of the PackedString. If there is no+-- integer at the beginning of the string, it returns Nothing, otherwise it+-- just returns the int read, along with a B.ByteString containing the+-- remainder of its input.++readIntPS :: B.ByteString -> Maybe (Int, B.ByteString)+readIntPS = BC.readInt . BC.dropWhile isSpace++-- -----------------------------------------------------------------------------+-- Destructor functions (taking PackedStrings apart)++unpackPSfromUTF8 :: B.ByteString -> String+unpackPSfromUTF8 ps =+ case BI.toForeignPtr ps of+ (_,_, 0) -> ""+ (x,s,l) ->+ unsafePerformIO $ withForeignPtr x $ \p->+ do outbuf <- mallocArray l+ lout <- fromIntegral `fmap`+ utf8_to_ints outbuf (p `plusPtr` s) (fromIntegral l)+ when (lout < 0) $ error "Bad UTF8!"+ str <- (map (chr . fromIntegral)) `fmap` peekArray lout outbuf+ free outbuf+ return str++foreign import ccall unsafe "static fpstring.h utf8_to_ints" utf8_to_ints+ :: Ptr Int -> Ptr Word8 -> CInt -> IO CInt++-- -----------------------------------------------------------------------------+-- List-mimicking functions for PackedStrings++{-# INLINE ifHeadThenTail #-}+ifHeadThenTail :: Word8 -> B.ByteString -> Maybe B.ByteString+ifHeadThenTail c s = case uncons s of+ Just (w, t) | w == c -> Just t+ _ -> Nothing++------------------------------------------------------------------------+-- A reimplementation of Data.ByteString.Char8.dropSpace, but+-- specialised to darcs' need for a 4 way isspace.+--+-- TODO: if it is safe to use the expanded definition of isSpaceWord8+-- provided by Data.ByteString.Char8, then all this can go.++-- A locale-independent isspace(3) so patches are interpreted the same everywhere.+-- ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) == '\r')+isSpaceWord8 :: Word8 -> Bool+isSpaceWord8 w =+ w == 0x20 || -- ' '+ w == 0x09 || -- '\t'+ w == 0x0A || -- '\n'+ w == 0x0D -- '\r'+{-# INLINE isSpaceWord8 #-}++firstnonspace :: Ptr Word8 -> Int -> Int -> IO Int+firstnonspace !ptr !n !m+ | n >= m = return n+ | otherwise = do w <- peekElemOff ptr n+ if isSpaceWord8 w then firstnonspace ptr (n+1) m else return n++firstspace :: Ptr Word8 -> Int -> Int -> IO Int+firstspace !ptr !n !m+ | n >= m = return n+ | otherwise = do w <- peekElemOff ptr n+ if (not . isSpaceWord8) w then firstspace ptr (n+1) m else return n++-- | 'dropSpace' efficiently returns the 'ByteString' argument with+-- white space Chars removed from the front. It is more efficient than+-- calling dropWhile for removing whitespace. I.e.+--+-- > dropWhile isSpace == dropSpace+--+dropSpace :: B.ByteString -> B.ByteString+dropSpace (BI.PS x s l) = BI.inlinePerformIO $ withForeignPtr x $ \p -> do+ i <- firstnonspace (p `plusPtr` s) 0 l+ return $! if i == l then B.empty else BI.PS x (s+i) (l-i)+{-# INLINE dropSpace #-}++-- | 'breakSpace' returns the pair of ByteStrings when the argument is+-- broken at the first whitespace byte. I.e.+--+-- > break isSpace == breakSpace+--+breakSpace :: B.ByteString -> (B.ByteString,B.ByteString)+breakSpace (BI.PS x s l) = BI.inlinePerformIO $ withForeignPtr x $ \p -> do+ i <- firstspace (p `plusPtr` s) 0 l+ return $! case () of {_+ | i == 0 -> (B.empty, BI.PS x s l)+ | i == l -> (BI.PS x s l, B.empty)+ | otherwise -> (BI.PS x s i, BI.PS x (s+i) (l-i))+ }+{-# INLINE breakSpace #-}++------------------------------------------------------------------------++{-# INLINE is_funky #-}+is_funky :: B.ByteString -> Bool+is_funky ps = case BI.toForeignPtr ps of+ (x,s,l) ->+ unsafePerformIO $ withForeignPtr x $ \p->+ (/=0) `fmap` has_funky_char (p `plusPtr` s) (fromIntegral l)++foreign import ccall unsafe "fpstring.h has_funky_char" has_funky_char+ :: Ptr Word8 -> CInt -> IO CInt++------------------------------------------------------------------------++-- ByteString rewrites break (=='x') to breakByte 'x'+-- break ((==) x) = breakChar x+-- break (==x) = breakChar x+--++{-+{-# INLINE breakOnPS #-}+breakOnPS :: Char -> B.ByteString -> (B.ByteString, B.ByteString)+breakOnPS c p = case BC.elemIndex c p of+ Nothing -> (p, BC.empty)+ Just n -> (B.take n p, B.drop n p)+-}++{-# INLINE hashPS #-}+hashPS :: B.ByteString -> Int32+hashPS ps =+ case BI.toForeignPtr ps of+ (x,s,l) ->+ unsafePerformIO $ withForeignPtr x $ \p->+ do hash (p `plusPtr` s) l++hash :: Ptr Word8 -> Int -> IO Int32+hash ptr len = f (0 :: Int32) ptr len+ where f h _ 0 = return h+ f h p n = do x <- peek p+ let !h' = (fromIntegral x) + (rotateL h 8)+ f h' (p `advancePtr` 1) (n-1)++{-# INLINE substrPS #-}+substrPS :: B.ByteString -> B.ByteString -> Maybe Int+substrPS tok str+ | B.null tok = Just 0+ | B.length tok > B.length str = Nothing+ | otherwise = do n <- BC.elemIndex (BC.head tok) str+ let ttok = B.tail tok+ reststr = B.drop (n+1) str+ if ttok == B.take (B.length ttok) reststr+ then Just n+ else ((n+1)+) `fmap` substrPS tok reststr++------------------------------------------------------------------------++-- TODO: replace breakFirstPS and breakLastPS with definitions based on+-- ByteString's break/breakEnd+{-# INLINE breakFirstPS #-}+breakFirstPS :: Char -> B.ByteString -> Maybe (B.ByteString,B.ByteString)+breakFirstPS c p = case BC.elemIndex c p of+ Nothing -> Nothing+ Just n -> Just (B.take n p, B.drop (n+1) p)++{-# INLINE breakLastPS #-}+breakLastPS :: Char -> B.ByteString -> Maybe (B.ByteString,B.ByteString)+breakLastPS c p = case BC.elemIndexEnd c p of+ Nothing -> Nothing+ Just n -> Just (B.take n p, B.drop (n+1) p)++-- TODO: rename+{-# INLINE linesPS #-}+linesPS :: B.ByteString -> [B.ByteString]+linesPS ps+ | B.null ps = [B.empty]+ | otherwise = BC.split '\n' ps++{- QuickCheck property:++import Test.QuickCheck+import qualified Data.ByteString.Char8 as BC+import Data.Char+instance Arbitrary BC.ByteString where+ arbitrary = fmap BC.pack arbitrary+instance Arbitrary Char where+ arbitrary = chr `fmap` choose (32,127)+deepCheck = check (defaultConfig { configMaxTest = 10000})+testLines = deepCheck (\x -> (linesPS x == linesPSOld x))+linesPSOld ps = case BC.elemIndex '\n' ps of+ Nothing -> [ps]+ Just n -> B.take n ps : linesPS (B.drop (n+1) ps) -}++{-| This function acts exactly like the "Prelude" unlines function, or like+"Data.ByteString.Char8" 'unlines', but with one important difference: it will+produce a string which may not end with a newline! That is:++> unlinesPS ["foo", "bar"]++evaluates to \"foo\\nbar\", not \"foo\\nbar\\n\"! This point should hold true for+'linesPS' as well.++TODO: rename this function. -}+unlinesPS :: [B.ByteString] -> B.ByteString+unlinesPS [] = BC.empty+unlinesPS x = BC.init $ BC.unlines x+{-# INLINE unlinesPS #-}+{- QuickCheck property:++testUnlines = deepCheck (\x -> (unlinesPS x == unlinesPSOld x))+unlinesPSOld ss = BC.concat $ intersperse_newlines ss+ where intersperse_newlines (a:b:s) = a : newline : intersperse_newlines (b:s)+ intersperse_newlines s = s+ newline = BC.pack "\n" -}++-- -----------------------------------------------------------------------------+-- gzReadFilePS++-- | Read an entire file, which may or may not be gzip compressed, directly+-- into a 'B.ByteString'.++-- #ifndef HAVE_HASKELL_ZLIB+foreign import ccall unsafe "static zlib.h gzopen" c_gzopen+ :: CString -> CString -> IO (Ptr ())+foreign import ccall unsafe "static zlib.h gzclose" c_gzclose+ :: Ptr () -> IO ()+foreign import ccall unsafe "static zlib.h gzread" c_gzread+ :: Ptr () -> Ptr Word8 -> CInt -> IO CInt+foreign import ccall unsafe "static zlib.h gzwrite" c_gzwrite+ :: Ptr () -> Ptr Word8 -> CInt -> IO CInt+-- #endif++gzReadFilePS :: FilePath -> IO B.ByteString+gzReadFilePS f = do+ h <- openBinaryFile f ReadMode+ header <- B.hGet h 2+ if header /= BC.pack "\31\139"+ then do hClose h+ mmapFilePS f+ else do hSeek h SeekFromEnd (-4)+ len <- hGetLittleEndInt h+ hClose h+-- #ifdef HAVE_HASKELL_ZLIB+ -- Passing the length to GZ.decompressWith means+ -- that BL.toChunks only produces one chunk, which in turn+ -- means that B.concat won't need to copy data.+ -- If the length is wrong this will just affect efficiency, not correctness+ let decompress = GZ.decompressWith GZ.defaultDecompressParams {+ GZ.decompressBufferSize = len+ }+ fmap (B.concat . BL.toChunks . decompress) $+-- #ifdef HAVE_OLD_BYTESTRING+ -- bytestring < 0.9.1 had a bug where it did not know to close handles upon EOF+ -- performance would be better with a newer bytestring and lazy+ -- readFile below -- ratify readFile: comment+ fmap (BL.fromChunks . (:[])) $+ B.readFile f -- ratify readFile: immediately consumed+-- #else+ BL.readFile f -- ratify readFile: immediately consumed by the conversion to a strict bytestring+-- #endif+-- #else+ withCString f $ \fstr-> withCString "rb" $ \rb-> do+ gzf <- c_gzopen fstr rb+ when (gzf == nullPtr) $ fail $ "problem opening file "++f+ fp <- BI.mallocByteString len+ debugForeignPtr fp $ "gzReadFilePS "++f+ lread <- withForeignPtr fp $ \p ->+ c_gzread gzf p (fromIntegral len)+ c_gzclose gzf+ when (fromIntegral lread /= len) $+ fail $ "problem gzreading file "++f+ return $ fromForeignPtr fp 0 len+-- #endif++hGetLittleEndInt :: Handle -> IO Int+hGetLittleEndInt h = do+ b1 <- ord `fmap` hGetChar h+ b2 <- ord `fmap` hGetChar h+ b3 <- ord `fmap` hGetChar h+ b4 <- ord `fmap` hGetChar h+ return $ b1 + 256*b2 + 65536*b3 + 16777216*b4++gzWriteFilePS :: FilePath -> B.ByteString -> IO ()+gzWriteFilePS f ps = gzWriteFilePSs f [ps]++gzWriteFilePSs :: FilePath -> [B.ByteString] -> IO ()+gzWriteFilePSs f pss =+-- #ifdef HAVE_HASKELL_ZLIB+ BL.writeFile f $ GZ.compress $ BL.fromChunks pss+-- #else+ withCString f $ \fstr -> withCString "wb" $ \wb -> do+ gzf <- c_gzopen fstr wb+ when (gzf == nullPtr) $ fail $ "problem gzopening file for write: "++f+ mapM_ (gzWriteToGzf gzf) pss `catch`+ \_ -> fail $ "problem gzwriting file: "++f+ c_gzclose gzf++gzWriteToGzf :: Ptr () -> B.ByteString -> IO ()+gzWriteToGzf gzf ps = case BI.toForeignPtr ps of+ (_,_,0) -> return () -- avoid calling gzwrite with 0 length this would+ -- trouble on some versions of zlib, and is always+ -- unnecessary.+ (x,s,l) -> do+ lw <- withForeignPtr x $ \p -> c_gzwrite gzf (p `plusPtr` s)+ (fromIntegral l)+ when (fromIntegral lw /= l) $ fail $ "problem in gzWriteToGzf"+-- #endif++-- -----------------------------------------------------------------------------+-- mmapFilePS++-- | Like readFilePS, this reads an entire file directly into a+-- 'B.ByteString', but it is even more efficient. It involves directly+-- mapping the file to memory. This has the advantage that the contents of+-- the file never need to be copied. Also, under memory pressure the page+-- may simply be discarded, wile in the case of readFilePS it would need to+-- be written to swap. If you read many small files, mmapFilePS will be+-- less memory-efficient than readFilePS, since each mmapFilePS takes up a+-- separate page of memory. Also, you can run into bus errors if the file+-- is modified. NOTE: as with 'readFilePS', the string representation in+-- the file is assumed to be ISO-8859-1.++mmapFilePS :: FilePath -> IO B.ByteString+-- #ifdef HAVE_MMAP+mmapFilePS f = do+ x <- mmapFileByteString f Nothing+ `catch` (\_ -> do+ size <- fileSize `fmap` getSymbolicLinkStatus f+ if size == 0+ then return B.empty+ else performGC >> mmapFileByteString f Nothing)+ return x+-- #else+mmapFilePS = B.readFile+-- #endif++-- -------------------------------------------------------------------------+-- fromPS2Hex++foreign import ccall unsafe "static fpstring.h conv_to_hex" conv_to_hex+ :: Ptr Word8 -> Ptr Word8 -> CInt -> IO ()++fromPS2Hex :: B.ByteString -> B.ByteString+fromPS2Hex ps = case BI.toForeignPtr ps of+ (x,s,l) ->+ BI.unsafeCreate (2*l) $ \p -> withForeignPtr x $ \f ->+ conv_to_hex p (f `plusPtr` s) $ fromIntegral l++-- -------------------------------------------------------------------------+-- fromHex2PS++foreign import ccall unsafe "static fpstring.h conv_from_hex" conv_from_hex+ :: Ptr Word8 -> Ptr Word8 -> CInt -> IO ()++fromHex2PS :: B.ByteString -> B.ByteString+fromHex2PS ps = case BI.toForeignPtr ps of+ (x,s,l) ->+ BI.unsafeCreate (l `div` 2) $ \p -> withForeignPtr x $ \f ->+ conv_from_hex p (f `plusPtr` s) (fromIntegral $ l `div` 2)++-- -------------------------------------------------------------------------+-- betweenLinesPS++-- | betweenLinesPS returns the B.ByteString between the two lines given,+-- or Nothing if they do not appear.++betweenLinesPS :: B.ByteString -> B.ByteString -> B.ByteString+ -> Maybe (B.ByteString)+betweenLinesPS start end ps+ = case break (start ==) (linesPS ps) of+ (_, _:rest@(bs1:_)) ->+ case BI.toForeignPtr bs1 of+ (ps1,s1,_) ->+ case break (end ==) rest of+ (_, bs2:_) -> case BI.toForeignPtr bs2 of (_,s2,_) -> Just $ fromForeignPtr ps1 s1 (s2 - s1)+ _ -> Nothing+ _ -> Nothing++-- -------------------------------------------------------------------------+-- break_after_nth_newline++break_after_nth_newline :: Int -> B.ByteString+ -> Maybe (B.ByteString, B.ByteString)+break_after_nth_newline 0 the_ps | B.null the_ps = Just (B.empty, B.empty)+break_after_nth_newline n the_ps =+ case BI.toForeignPtr the_ps of+ (fp,the_s,l) ->+ unsafePerformIO $ withForeignPtr fp $ \p ->+ do let findit 0 s | s == end = return $ Just (the_ps, B.empty)+ findit _ s | s == end = return Nothing+ findit 0 s = let left_l = s - the_s+ in return $ Just (fromForeignPtr fp the_s left_l,+ fromForeignPtr fp s (l - left_l))+ findit i s = do w <- peekElemOff p s+ if w == nl then findit (i-1) (s+1)+ else findit i (s+1)+ nl = BI.c2w '\n'+ end = the_s + l+ findit n the_s++-- -------------------------------------------------------------------------+-- break_before_nth_newline++break_before_nth_newline :: Int -> B.ByteString -> (B.ByteString, B.ByteString)+break_before_nth_newline 0 the_ps+ | B.null the_ps = (B.empty, B.empty)+break_before_nth_newline n the_ps =+ case BI.toForeignPtr the_ps of+ (fp,the_s,l) ->+ unsafePerformIO $ withForeignPtr fp $ \p ->+ do let findit _ s | s == end = return (the_ps, B.empty)+ findit i s = do w <- peekElemOff p s+ if w == nl+ then if i == 0+ then let left_l = s - the_s+ in return (fromForeignPtr fp the_s left_l,+ fromForeignPtr fp s (l - left_l))+ else findit (i-1) (s+1)+ else findit i (s+1)+ nl = BI.c2w '\n'+ end = the_s + l+ findit n the_s
@@ -0,0 +1,1 @@+Match
file too large to diff
@@ -0,0 +1,10 @@+Roundtrip test failed++AST 1:++Module () (Just (ModuleHead () (ModuleName () "ByteStringUtils") Nothing (Just (ExportSpecList () [EVar () (UnQual () (Ident () "unsafeWithInternals")),EVar () (UnQual () (Ident () "unpackPSfromUTF8")),EVar () (UnQual () (Ident () "gzReadFilePS")),EVar () (UnQual () (Ident () "mmapFilePS")),EVar () (UnQual () (Ident () "gzWriteFilePS")),EVar () (UnQual () (Ident () "gzWriteFilePSs")),EVar () (UnQual () (Ident () "ifHeadThenTail")),EVar () (UnQual () (Ident () "dropSpace")),EVar () (UnQual () (Ident () "breakSpace")),EVar () (UnQual () (Ident () "linesPS")),EVar () (UnQual () (Ident () "unlinesPS")),EVar () (UnQual () (Ident () "hashPS")),EVar () (UnQual () (Ident () "breakFirstPS")),EVar () (UnQual () (Ident () "breakLastPS")),EVar () (UnQual () (Ident () "substrPS")),EVar () (UnQual () (Ident () "readIntPS")),EVar () (UnQual () (Ident () "is_funky")),EVar () (UnQual () (Ident () "fromHex2PS")),EVar () (UnQual () (Ident () "fromPS2Hex")),EVar () (UnQual () (Ident () "betweenLinesPS")),EVar () (UnQual () (Ident () "break_after_nth_newline")),EVar () (UnQual () (Ident () "break_before_nth_newline")),EVar () (UnQual () (Ident () "intercalate"))])))) [LanguagePragma () [Ident () "BangPatterns",Ident () "ForeignFunctionInterface",Ident () "CPP"]] [ImportDecl {importAnn = (), importModule = ModuleName () "Prelude", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () True [IVar () (Ident () "catch")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "B"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Char8", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "BC"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Internal", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "BI"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "intercalate"),IVar () (Ident () "uncons")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Internal", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "fromForeignPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Control.Exception", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "catch")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.IO", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "System.IO.Unsafe", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "unsafePerformIO")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Storable", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "peekElemOff"),IVar () (Ident () "peek")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Marshal.Alloc", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "free")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Marshal.Array", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "mallocArray"),IVar () (Ident () "peekArray"),IVar () (Ident () "advancePtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.C.Types", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "CInt")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Bits", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "rotateL")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Char", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "chr"),IVar () (Ident () "ord"),IVar () (Ident () "isSpace")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Word", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "Word8")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Int", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "Int32")])},ImportDecl {importAnn = (), importModule = ModuleName () "Control.Monad", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "when")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Ptr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "nullPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.ForeignPtr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "ForeignPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Ptr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "plusPtr"),IAbs () (NoNamespace ()) (Ident () "Ptr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.ForeignPtr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "withForeignPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.ForeignPtr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "addForeignPtrFinalizer")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Ptr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "FunPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Lazy", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "BL"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Codec.Compression.GZip", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "GZ"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.C.String", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "CString"),IVar () (Ident () "withCString")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.IO.MMap", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "mmapFileByteString")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.Mem", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "performGC")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.Posix.Files", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "fileSize"),IVar () (Ident () "getSymbolicLinkStatus")])}] [TypeSig () [Ident () "debugForeignPtr"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "ForeignPtr"))) (TyVar () (Ident () "a"))) (TyFun () (TyCon () (UnQual () (Ident () "String"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h debug_alloc") (Ident () "debug_alloc") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyVar () (Ident () "a"))) (TyFun () (TyCon () (UnQual () (Ident () "CString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h & debug_free") (Ident () "debug_free") (TyApp () (TyCon () (UnQual () (Ident () "FunPtr"))) (TyParen () (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyVar () (Ident () "a"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))))),FunBind () [Match () (Ident () "debugForeignPtr") [PVar () (Ident () "fp"),PVar () (Ident () "n")] (UnGuardedRhs () (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Var () (UnQual () (Ident () "n")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "cname")] (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Qualifier () (App () (App () (Var () (UnQual () (Ident () "debug_alloc"))) (Var () (UnQual () (Ident () "p")))) (Var () (UnQual () (Ident () "cname")))),Qualifier () (App () (App () (Var () (UnQual () (Ident () "addForeignPtrFinalizer"))) (Var () (UnQual () (Ident () "debug_free")))) (Var () (UnQual () (Ident () "fp"))))])))))) Nothing,Match () (Ident () "debugForeignPtr") [PWildCard (),PWildCard ()] (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "return"))) (Con () (Special () (UnitCon ()))))) Nothing],TypeSig () [Ident () "unsafeWithInternals"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyParen () (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyVar () (Ident () "a")))))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyVar () (Ident () "a"))))),FunBind () [Match () (Ident () "unsafeWithInternals") [PVar () (Ident () "ps"),PVar () (Ident () "f")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "fp"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (App () (App () (Var () (UnQual () (Ident () "f"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Var () (UnQual () (Ident () "l"))))))) Nothing])) Nothing],TypeSig () [Ident () "readIntPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (UnQual () (Ident () "Int")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))]))),PatBind () (PVar () (Ident () "readIntPS")) (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BC") (Ident () "readInt"))) (QVarOp () (UnQual () (Symbol () "."))) (App () (Var () (Qual () (ModuleName () "BC") (Ident () "dropWhile"))) (Var () (UnQual () (Ident () "isSpace")))))) Nothing,TypeSig () [Ident () "unpackPSfromUTF8"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (UnQual () (Ident () "String")))),FunBind () [Match () (Ident () "unpackPSfromUTF8") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PWildCard (),PWildCard (),PLit () (Signless ()) (Int () 0 "0")]) (UnGuardedRhs () (Lit () (String () "" ""))) Nothing,Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Generator () (PVar () (Ident () "outbuf")) (App () (Var () (UnQual () (Ident () "mallocArray"))) (Var () (UnQual () (Ident () "l")))),Generator () (PVar () (Ident () "lout")) (InfixApp () (Var () (UnQual () (Ident () "fromIntegral"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (App () (Var () (UnQual () (Ident () "utf8_to_ints"))) (Var () (UnQual () (Ident () "outbuf")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l"))))))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "lout"))) (QVarOp () (UnQual () (Symbol () "<"))) (Lit () (Int () 0 "0"))))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Var () (UnQual () (Ident () "error"))) (Lit () (String () "Bad UTF8!" "Bad UTF8!")))),Generator () (PVar () (Ident () "str")) (InfixApp () (Paren () (App () (Var () (UnQual () (Ident () "map"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "chr"))) (QVarOp () (UnQual () (Symbol () "."))) (Var () (UnQual () (Ident () "fromIntegral"))))))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (Var () (UnQual () (Ident () "peekArray"))) (Var () (UnQual () (Ident () "lout")))) (Var () (UnQual () (Ident () "outbuf"))))),Qualifier () (App () (Var () (UnQual () (Ident () "free"))) (Var () (UnQual () (Ident () "outbuf")))),Qualifier () (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "str"))))]))))) Nothing])) Nothing],ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h utf8_to_ints") (Ident () "utf8_to_ints") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Int")))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt"))))))),InlineSig () True Nothing (UnQual () (Ident () "ifHeadThenTail")),TypeSig () [Ident () "ifHeadThenTail"] (TyFun () (TyCon () (UnQual () (Ident () "Word8"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))))),FunBind () [Match () (Ident () "ifHeadThenTail") [PVar () (Ident () "c"),PVar () (Ident () "s")] (UnGuardedRhs () (Case () (App () (Var () (UnQual () (Ident () "uncons"))) (Var () (UnQual () (Ident () "s")))) [Alt () (PApp () (UnQual () (Ident () "Just")) [PTuple () Boxed [PVar () (Ident () "w"),PVar () (Ident () "t")]]) (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "c"))))] (App () (Con () (UnQual () (Ident () "Just"))) (Var () (UnQual () (Ident () "t"))))]) Nothing,Alt () (PWildCard ()) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing])) Nothing],TypeSig () [Ident () "isSpaceWord8"] (TyFun () (TyCon () (UnQual () (Ident () "Word8"))) (TyCon () (UnQual () (Ident () "Bool")))),FunBind () [Match () (Ident () "isSpaceWord8") [PVar () (Ident () "w")] (UnGuardedRhs () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 32 "0x20"))) (QVarOp () (UnQual () (Symbol () "||"))) (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 9 "0x09"))) (QVarOp () (UnQual () (Symbol () "||"))) (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 10 "0x0A"))) (QVarOp () (UnQual () (Symbol () "||"))) (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 13 "0x0D"))))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "isSpaceWord8")),TypeSig () [Ident () "firstnonspace"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int"))))))),FunBind () [Match () (Ident () "firstnonspace") [PBangPat () (PVar () (Ident () "ptr")),PBangPat () (PVar () (Ident () "n")),PBangPat () (PVar () (Ident () "m"))] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () ">="))) (Var () (UnQual () (Ident () "m"))))] (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "n")))),Qualifier () (If () (App () (Var () (UnQual () (Ident () "isSpaceWord8"))) (Var () (UnQual () (Ident () "w")))) (App () (App () (App () (Var () (UnQual () (Ident () "firstnonspace"))) (Var () (UnQual () (Ident () "ptr")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "m")))) (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))))])]) Nothing],TypeSig () [Ident () "firstspace"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int"))))))),FunBind () [Match () (Ident () "firstspace") [PBangPat () (PVar () (Ident () "ptr")),PBangPat () (PVar () (Ident () "n")),PBangPat () (PVar () (Ident () "m"))] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () ">="))) (Var () (UnQual () (Ident () "m"))))] (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "n")))),Qualifier () (If () (App () (Paren () (InfixApp () (Var () (UnQual () (Ident () "not"))) (QVarOp () (UnQual () (Symbol () "."))) (Var () (UnQual () (Ident () "isSpaceWord8"))))) (Var () (UnQual () (Ident () "w")))) (App () (App () (App () (Var () (UnQual () (Ident () "firstspace"))) (Var () (UnQual () (Ident () "ptr")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "m")))) (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))))])]) Nothing],TypeSig () [Ident () "dropSpace"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "dropSpace") [PParen () (PApp () (Qual () (ModuleName () "BI") (Ident () "PS")) [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")])] (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BI") (Ident () "inlinePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Generator () (PVar () (Ident () "i")) (App () (App () (App () (Var () (UnQual () (Ident () "firstnonspace"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Lit () (Int () 0 "0"))) (Var () (UnQual () (Ident () "l")))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$!"))) (If () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "l")))) (Var () (Qual () (ModuleName () "B") (Ident () "empty"))) (App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "i")))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "i"))))))))]))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "dropSpace")),TypeSig () [Ident () "breakSpace"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])),FunBind () [Match () (Ident () "breakSpace") [PParen () (PApp () (Qual () (ModuleName () "BI") (Ident () "PS")) [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")])] (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BI") (Ident () "inlinePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Generator () (PVar () (Ident () "i")) (App () (App () (App () (Var () (UnQual () (Ident () "firstspace"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Lit () (Int () 0 "0"))) (Var () (UnQual () (Ident () "l")))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$!"))) (Case () (Con () (Special () (UnitCon ()))) [Alt () (PWildCard ()) (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 0 "0")))] (Tuple () Boxed [Var () (Qual () (ModuleName () "B") (Ident () "empty")),App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Var () (UnQual () (Ident () "s")))) (Var () (UnQual () (Ident () "l")))]),GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "l"))))] (Tuple () Boxed [App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Var () (UnQual () (Ident () "s")))) (Var () (UnQual () (Ident () "l"))),Var () (Qual () (ModuleName () "B") (Ident () "empty"))]),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Tuple () Boxed [App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Var () (UnQual () (Ident () "s")))) (Var () (UnQual () (Ident () "i"))),App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "i")))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "i")))))])]) Nothing]))]))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "breakSpace")),InlineSig () True Nothing (UnQual () (Ident () "is_funky")),TypeSig () [Ident () "is_funky"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (UnQual () (Ident () "Bool")))),FunBind () [Match () (Ident () "is_funky") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (InfixApp () (RightSection () (QVarOp () (UnQual () (Symbol () "/="))) (Lit () (Int () 0 "0"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (Var () (UnQual () (Ident () "has_funky_char"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l"))))))))))) Nothing])) Nothing],ForImp () (CCall ()) (Just (PlayRisky ())) (Just "fpstring.h has_funky_char") (Ident () "has_funky_char") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt")))))),InlineSig () True Nothing (UnQual () (Ident () "hashPS")),TypeSig () [Ident () "hashPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (UnQual () (Ident () "Int32")))),FunBind () [Match () (Ident () "hashPS") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Qualifier () (App () (App () (Var () (UnQual () (Ident () "hash"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Var () (UnQual () (Ident () "l"))))]))))) Nothing])) Nothing],TypeSig () [Ident () "hash"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int32")))))),FunBind () [Match () (Ident () "hash") [PVar () (Ident () "ptr"),PVar () (Ident () "len")] (UnGuardedRhs () (App () (App () (App () (Var () (UnQual () (Ident () "f"))) (Paren () (ExpTypeSig () (Lit () (Int () 0 "0")) (TyCon () (UnQual () (Ident () "Int32")))))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "len"))))) (Just (BDecls () [FunBind () [Match () (Ident () "f") [PVar () (Ident () "h"),PWildCard (),PLit () (Signless ()) (Int () 0 "0")] (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "h"))))) Nothing,Match () (Ident () "f") [PVar () (Ident () "h"),PVar () (Ident () "p"),PVar () (Ident () "n")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "x")) (App () (Var () (UnQual () (Ident () "peek"))) (Var () (UnQual () (Ident () "p")))),LetStmt () (BDecls () [PatBind () (PBangPat () (PVar () (Ident () "h'"))) (UnGuardedRhs () (InfixApp () (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "x"))))) (QVarOp () (UnQual () (Symbol () "+"))) (Paren () (App () (App () (Var () (UnQual () (Ident () "rotateL"))) (Var () (UnQual () (Ident () "h")))) (Lit () (Int () 8 "8")))))) Nothing]),Qualifier () (App () (App () (App () (Var () (UnQual () (Ident () "f"))) (Var () (UnQual () (Ident () "h'")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "advancePtr"))) (Lit () (Int () 1 "1"))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (Int () 1 "1")))))])) Nothing]]))],InlineSig () True Nothing (UnQual () (Ident () "substrPS")),TypeSig () [Ident () "substrPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyCon () (UnQual () (Ident () "Int")))))),FunBind () [Match () (Ident () "substrPS") [PVar () (Ident () "tok"),PVar () (Ident () "str")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "tok"))))] (App () (Con () (UnQual () (Ident () "Just"))) (Lit () (Int () 0 "0"))),GuardedRhs () [Qualifier () (InfixApp () (App () (Var () (Qual () (ModuleName () "B") (Ident () "length"))) (Var () (UnQual () (Ident () "tok")))) (QVarOp () (UnQual () (Symbol () ">"))) (App () (Var () (Qual () (ModuleName () "B") (Ident () "length"))) (Var () (UnQual () (Ident () "str")))))] (Con () (UnQual () (Ident () "Nothing"))),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Do () [Generator () (PVar () (Ident () "n")) (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "elemIndex"))) (Paren () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "head"))) (Var () (UnQual () (Ident () "tok")))))) (Var () (UnQual () (Ident () "str")))),LetStmt () (BDecls () [PatBind () (PVar () (Ident () "ttok")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "B") (Ident () "tail"))) (Var () (UnQual () (Ident () "tok"))))) Nothing,PatBind () (PVar () (Ident () "reststr")) (UnGuardedRhs () (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "drop"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "str"))))) Nothing]),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "ttok"))) (QVarOp () (UnQual () (Symbol () "=="))) (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "take"))) (Paren () (App () (Var () (Qual () (ModuleName () "B") (Ident () "length"))) (Var () (UnQual () (Ident () "ttok")))))) (Var () (UnQual () (Ident () "reststr"))))) (App () (Con () (UnQual () (Ident () "Just"))) (Var () (UnQual () (Ident () "n")))) (InfixApp () (LeftSection () (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1")))) (QVarOp () (UnQual () (Symbol () "+")))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (Var () (UnQual () (Ident () "substrPS"))) (Var () (UnQual () (Ident () "tok")))) (Var () (UnQual () (Ident () "reststr"))))))])]) Nothing],InlineSig () True Nothing (UnQual () (Ident () "breakFirstPS")),TypeSig () [Ident () "breakFirstPS"] (TyFun () (TyCon () (UnQual () (Ident () "Char"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])))),FunBind () [Match () (Ident () "breakFirstPS") [PVar () (Ident () "c"),PVar () (Ident () "p")] (UnGuardedRhs () (Case () (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "elemIndex"))) (Var () (UnQual () (Ident () "c")))) (Var () (UnQual () (Ident () "p")))) [Alt () (PApp () (UnQual () (Ident () "Nothing")) []) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing,Alt () (PApp () (UnQual () (Ident () "Just")) [PVar () (Ident () "n")]) (UnGuardedRhs () (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "take"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "p"))),App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "drop"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "p")))]))) Nothing])) Nothing],InlineSig () True Nothing (UnQual () (Ident () "breakLastPS")),TypeSig () [Ident () "breakLastPS"] (TyFun () (TyCon () (UnQual () (Ident () "Char"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])))),FunBind () [Match () (Ident () "breakLastPS") [PVar () (Ident () "c"),PVar () (Ident () "p")] (UnGuardedRhs () (Case () (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "elemIndexEnd"))) (Var () (UnQual () (Ident () "c")))) (Var () (UnQual () (Ident () "p")))) [Alt () (PApp () (UnQual () (Ident () "Nothing")) []) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing,Alt () (PApp () (UnQual () (Ident () "Just")) [PVar () (Ident () "n")]) (UnGuardedRhs () (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "take"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "p"))),App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "drop"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "p")))]))) Nothing])) Nothing],InlineSig () True Nothing (UnQual () (Ident () "linesPS")),TypeSig () [Ident () "linesPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyList () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))))),FunBind () [Match () (Ident () "linesPS") [PVar () (Ident () "ps")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "ps"))))] (List () [Var () (Qual () (ModuleName () "B") (Ident () "empty"))]),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "split"))) (Lit () (Char () '\n' "\\n"))) (Var () (UnQual () (Ident () "ps"))))]) Nothing],TypeSig () [Ident () "unlinesPS"] (TyFun () (TyList () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "unlinesPS") [PList () []] (UnGuardedRhs () (Var () (Qual () (ModuleName () "BC") (Ident () "empty")))) Nothing,Match () (Ident () "unlinesPS") [PVar () (Ident () "x")] (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BC") (Ident () "init"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Var () (Qual () (ModuleName () "BC") (Ident () "unlines"))) (Var () (UnQual () (Ident () "x")))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "unlinesPS")),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzopen") (Ident () "c_gzopen") (TyFun () (TyCon () (UnQual () (Ident () "CString"))) (TyFun () (TyCon () (UnQual () (Ident () "CString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyParen () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzclose") (Ident () "c_gzclose") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzread") (Ident () "c_gzread") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt"))))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzwrite") (Ident () "c_gzwrite") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt"))))))),TypeSig () [Ident () "gzReadFilePS"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))))),FunBind () [Match () (Ident () "gzReadFilePS") [PVar () (Ident () "f")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "h")) (App () (App () (Var () (UnQual () (Ident () "openBinaryFile"))) (Var () (UnQual () (Ident () "f")))) (Con () (UnQual () (Ident () "ReadMode")))),Generator () (PVar () (Ident () "header")) (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "hGet"))) (Var () (UnQual () (Ident () "h")))) (Lit () (Int () 2 "2"))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "header"))) (QVarOp () (UnQual () (Symbol () "/="))) (App () (Var () (Qual () (ModuleName () "BC") (Ident () "pack"))) (Lit () (String () "\US\139" "\\31\\139")))) (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "hClose"))) (Var () (UnQual () (Ident () "h")))),Qualifier () (App () (Var () (UnQual () (Ident () "mmapFilePS"))) (Var () (UnQual () (Ident () "f"))))]) (Do () [Qualifier () (App () (App () (App () (Var () (UnQual () (Ident () "hSeek"))) (Var () (UnQual () (Ident () "h")))) (Con () (UnQual () (Ident () "SeekFromEnd")))) (Paren () (NegApp () (Lit () (Int () 4 "4"))))),Generator () (PVar () (Ident () "len")) (App () (Var () (UnQual () (Ident () "hGetLittleEndInt"))) (Var () (UnQual () (Ident () "h")))),Qualifier () (App () (Var () (UnQual () (Ident () "hClose"))) (Var () (UnQual () (Ident () "h")))),LetStmt () (BDecls () [PatBind () (PVar () (Ident () "decompress")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "GZ") (Ident () "decompressWith"))) (RecUpdate () (Var () (Qual () (ModuleName () "GZ") (Ident () "defaultDecompressParams"))) [FieldUpdate () (Qual () (ModuleName () "GZ") (Ident () "decompressBufferSize")) (Var () (UnQual () (Ident () "len")))]))) Nothing]),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "fmap"))) (Paren () (InfixApp () (Var () (Qual () (ModuleName () "B") (Ident () "concat"))) (QVarOp () (UnQual () (Symbol () "."))) (InfixApp () (Var () (Qual () (ModuleName () "BL") (Ident () "toChunks"))) (QVarOp () (UnQual () (Symbol () "."))) (Var () (UnQual () (Ident () "decompress"))))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "fmap"))) (Paren () (InfixApp () (Var () (Qual () (ModuleName () "BL") (Ident () "fromChunks"))) (QVarOp () (UnQual () (Symbol () "."))) (RightSection () (QConOp () (Special () (Cons ()))) (List () []))))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "readFile"))) (Var () (UnQual () (Ident () "f")))) (Var () (Qual () (ModuleName () "BL") (Ident () "readFile")))) (Var () (UnQual () (Ident () "f")))))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Var () (UnQual () (Ident () "f")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "fstr")] (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Lit () (String () "rb" "rb"))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "rb")] (Do () [Generator () (PVar () (Ident () "gzf")) (App () (App () (Var () (UnQual () (Ident () "c_gzopen"))) (Var () (UnQual () (Ident () "fstr")))) (Var () (UnQual () (Ident () "rb")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "gzf"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nullPtr")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem opening file " "problem opening file ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f")))))),Generator () (PVar () (Ident () "fp")) (App () (Var () (Qual () (ModuleName () "BI") (Ident () "mallocByteString"))) (Var () (UnQual () (Ident () "len")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "debugForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "gzReadFilePS " "gzReadFilePS ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f"))))),Generator () (PVar () (Ident () "lread")) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (App () (App () (App () (Var () (UnQual () (Ident () "c_gzread"))) (Var () (UnQual () (Ident () "gzf")))) (Var () (UnQual () (Ident () "p")))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "len")))))))),Qualifier () (App () (Var () (UnQual () (Ident () "c_gzclose"))) (Var () (UnQual () (Ident () "gzf")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "lread")))) (QVarOp () (UnQual () (Symbol () "/="))) (Var () (UnQual () (Ident () "len")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem gzreading file " "problem gzreading file ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f")))))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Lit () (Int () 0 "0"))) (Var () (UnQual () (Ident () "len")))))])))))]))])) Nothing],TypeSig () [Ident () "hGetLittleEndInt"] (TyFun () (TyCon () (UnQual () (Ident () "Handle"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int"))))),FunBind () [Match () (Ident () "hGetLittleEndInt") [PVar () (Ident () "h")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "b1")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Generator () (PVar () (Ident () "b2")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Generator () (PVar () (Ident () "b3")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Generator () (PVar () (Ident () "b4")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "b1"))) (QVarOp () (UnQual () (Symbol () "+"))) (InfixApp () (Lit () (Int () 256 "256")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "b2"))))) (QVarOp () (UnQual () (Symbol () "+"))) (InfixApp () (Lit () (Int () 65536 "65536")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "b3"))))) (QVarOp () (UnQual () (Symbol () "+"))) (InfixApp () (Lit () (Int () 16777216 "16777216")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "b4"))))))])) Nothing],TypeSig () [Ident () "gzWriteFilePS"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),FunBind () [Match () (Ident () "gzWriteFilePS") [PVar () (Ident () "f"),PVar () (Ident () "ps")] (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "gzWriteFilePSs"))) (Var () (UnQual () (Ident () "f")))) (List () [Var () (UnQual () (Ident () "ps"))]))) Nothing],TypeSig () [Ident () "gzWriteFilePSs"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyFun () (TyList () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),FunBind () [Match () (Ident () "gzWriteFilePSs") [PVar () (Ident () "f"),PVar () (Ident () "pss")] (UnGuardedRhs () (InfixApp () (App () (Var () (Qual () (ModuleName () "BL") (Ident () "writeFile"))) (Var () (UnQual () (Ident () "f")))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (Qual () (ModuleName () "GZ") (Ident () "compress"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (App () (App () (Var () (Qual () (ModuleName () "BL") (Ident () "fromChunks"))) (Var () (UnQual () (Ident () "pss")))) (Var () (UnQual () (Ident () "withCString")))) (Var () (UnQual () (Ident () "f")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "fstr")] (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Lit () (String () "wb" "wb"))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "wb")] (Do () [Generator () (PVar () (Ident () "gzf")) (App () (App () (Var () (UnQual () (Ident () "c_gzopen"))) (Var () (UnQual () (Ident () "fstr")))) (Var () (UnQual () (Ident () "wb")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "gzf"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nullPtr")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem gzopening file for write: " "problem gzopening file for write: ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f")))))),Qualifier () (InfixApp () (App () (App () (Var () (UnQual () (Ident () "mapM_"))) (Paren () (App () (Var () (UnQual () (Ident () "gzWriteToGzf"))) (Var () (UnQual () (Ident () "gzf")))))) (Var () (UnQual () (Ident () "pss")))) (QVarOp () (UnQual () (Ident () "catch"))) (Lambda () [PWildCard ()] (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem gzwriting file: " "problem gzwriting file: ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f"))))))),Qualifier () (App () (Var () (UnQual () (Ident () "c_gzclose"))) (Var () (UnQual () (Ident () "gzf"))))])))))))) Nothing],TypeSig () [Ident () "gzWriteToGzf"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),FunBind () [Match () (Ident () "gzWriteToGzf") [PVar () (Ident () "gzf"),PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PWildCard (),PWildCard (),PLit () (Signless ()) (Int () 0 "0")]) (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "return"))) (Con () (Special () (UnitCon ()))))) Nothing,Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "lw")) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (App () (App () (App () (Var () (UnQual () (Ident () "c_gzwrite"))) (Var () (UnQual () (Ident () "gzf")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l")))))))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "lw")))) (QVarOp () (UnQual () (Symbol () "/="))) (Var () (UnQual () (Ident () "l")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (Lit () (String () "problem in gzWriteToGzf" "problem in gzWriteToGzf"))))])) Nothing])) Nothing],TypeSig () [Ident () "mmapFilePS"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))))),FunBind () [Match () (Ident () "mmapFilePS") [PVar () (Ident () "f")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "x")) (InfixApp () (App () (App () (Var () (UnQual () (Ident () "mmapFileByteString"))) (Var () (UnQual () (Ident () "f")))) (Con () (UnQual () (Ident () "Nothing")))) (QVarOp () (UnQual () (Ident () "catch"))) (Paren () (Lambda () [PWildCard ()] (Do () [Generator () (PVar () (Ident () "size")) (InfixApp () (Var () (UnQual () (Ident () "fileSize"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "getSymbolicLinkStatus"))) (Var () (UnQual () (Ident () "f"))))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "size"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 0 "0"))) (App () (Var () (UnQual () (Ident () "return"))) (Var () (Qual () (ModuleName () "B") (Ident () "empty")))) (InfixApp () (Var () (UnQual () (Ident () "performGC"))) (QVarOp () (UnQual () (Symbol () ">>"))) (App () (App () (Var () (UnQual () (Ident () "mmapFileByteString"))) (Var () (UnQual () (Ident () "f")))) (Con () (UnQual () (Ident () "Nothing"))))))])))),Qualifier () (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "x"))))])) Nothing],PatBind () (PVar () (Ident () "mmapFilePS")) (UnGuardedRhs () (Var () (Qual () (ModuleName () "B") (Ident () "readFile")))) Nothing,ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h conv_to_hex") (Ident () "conv_to_hex") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))))),TypeSig () [Ident () "fromPS2Hex"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "fromPS2Hex") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "unsafeCreate"))) (Paren () (InfixApp () (Lit () (Int () 2 "2")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "l")))))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "f")] (InfixApp () (App () (App () (Var () (UnQual () (Ident () "conv_to_hex"))) (Var () (UnQual () (Ident () "p")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "f"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l")))))))))) Nothing])) Nothing],ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h conv_from_hex") (Ident () "conv_from_hex") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))))),TypeSig () [Ident () "fromHex2PS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "fromHex2PS") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "unsafeCreate"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Ident () "div"))) (Lit () (Int () 2 "2"))))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "f")] (App () (App () (App () (Var () (UnQual () (Ident () "conv_from_hex"))) (Var () (UnQual () (Ident () "p")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "f"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "fromIntegral"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Ident () "div"))) (Lit () (Int () 2 "2"))))))))))) Nothing])) Nothing],TypeSig () [Ident () "betweenLinesPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyParen () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))))))),FunBind () [Match () (Ident () "betweenLinesPS") [PVar () (Ident () "start"),PVar () (Ident () "end"),PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (App () (Var () (UnQual () (Ident () "break"))) (LeftSection () (Var () (UnQual () (Ident () "start"))) (QVarOp () (UnQual () (Symbol () "=="))))) (Paren () (App () (Var () (UnQual () (Ident () "linesPS"))) (Var () (UnQual () (Ident () "ps")))))) [Alt () (PTuple () Boxed [PWildCard (),PInfixApp () (PWildCard ()) (Special () (Cons ())) (PAsPat () (Ident () "rest") (PParen () (PInfixApp () (PVar () (Ident () "bs1")) (Special () (Cons ())) (PWildCard ()))))]) (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "bs1")))) [Alt () (PTuple () Boxed [PVar () (Ident () "ps1"),PVar () (Ident () "s1"),PWildCard ()]) (UnGuardedRhs () (Case () (App () (App () (Var () (UnQual () (Ident () "break"))) (LeftSection () (Var () (UnQual () (Ident () "end"))) (QVarOp () (UnQual () (Symbol () "=="))))) (Var () (UnQual () (Ident () "rest")))) [Alt () (PTuple () Boxed [PWildCard (),PInfixApp () (PVar () (Ident () "bs2")) (Special () (Cons ())) (PWildCard ())]) (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "bs2")))) [Alt () (PTuple () Boxed [PWildCard (),PVar () (Ident () "s2"),PWildCard ()]) (UnGuardedRhs () (InfixApp () (Con () (UnQual () (Ident () "Just"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "ps1")))) (Var () (UnQual () (Ident () "s1")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s2"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "s1")))))))) Nothing])) Nothing,Alt () (PWildCard ()) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing])) Nothing])) Nothing,Alt () (PWildCard ()) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing])) Nothing],TypeSig () [Ident () "break_after_nth_newline"] (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])))),FunBind () [Match () (Ident () "break_after_nth_newline") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "the_ps")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "the_ps"))))] (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [Var () (Qual () (ModuleName () "B") (Ident () "empty")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))]))]) Nothing,Match () (Ident () "break_after_nth_newline") [PVar () (Ident () "n"),PVar () (Ident () "the_ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "the_ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "fp"),PVar () (Ident () "the_s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [LetStmt () (BDecls () [FunBind () [Match () (Ident () "findit") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "s")] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "end"))))] (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [Var () (UnQual () (Ident () "the_ps")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))])))]) Nothing,Match () (Ident () "findit") [PWildCard (),PVar () (Ident () "s")] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "end"))))] (App () (Var () (UnQual () (Ident () "return"))) (Con () (UnQual () (Ident () "Nothing"))))]) Nothing,Match () (Ident () "findit") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "s")] (UnGuardedRhs () (Let () (BDecls () [PatBind () (PVar () (Ident () "left_l")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "the_s"))))) Nothing]) (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "the_s")))) (Var () (UnQual () (Ident () "left_l"))),App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "s")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "left_l")))))]))))) Nothing,Match () (Ident () "findit") [PVar () (Ident () "i"),PVar () (Ident () "s")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "p")))) (Var () (UnQual () (Ident () "s")))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nl")))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (Int () 1 "1"))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "i")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))))])) Nothing],PatBind () (PVar () (Ident () "nl")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "c2w"))) (Lit () (Char () '\n' "\\n")))) Nothing,PatBind () (PVar () (Ident () "end")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "the_s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "l"))))) Nothing]),Qualifier () (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "the_s"))))]))))) Nothing])) Nothing],TypeSig () [Ident () "break_before_nth_newline"] (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))]))),FunBind () [Match () (Ident () "break_before_nth_newline") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "the_ps")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "the_ps"))))] (Tuple () Boxed [Var () (Qual () (ModuleName () "B") (Ident () "empty")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))])]) Nothing,Match () (Ident () "break_before_nth_newline") [PVar () (Ident () "n"),PVar () (Ident () "the_ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "the_ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "fp"),PVar () (Ident () "the_s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [LetStmt () (BDecls () [FunBind () [Match () (Ident () "findit") [PWildCard (),PVar () (Ident () "s")] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "end"))))] (App () (Var () (UnQual () (Ident () "return"))) (Tuple () Boxed [Var () (UnQual () (Ident () "the_ps")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))]))]) Nothing,Match () (Ident () "findit") [PVar () (Ident () "i"),PVar () (Ident () "s")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "p")))) (Var () (UnQual () (Ident () "s")))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nl")))) (If () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 0 "0"))) (Let () (BDecls () [PatBind () (PVar () (Ident () "left_l")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "the_s"))))) Nothing]) (App () (Var () (UnQual () (Ident () "return"))) (Tuple () Boxed [App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "the_s")))) (Var () (UnQual () (Ident () "left_l"))),App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "s")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "left_l")))))]))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (Int () 1 "1"))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1")))))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "i")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))))])) Nothing],PatBind () (PVar () (Ident () "nl")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "c2w"))) (Lit () (Char () '\n' "\\n")))) Nothing,PatBind () (PVar () (Ident () "end")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "the_s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "l"))))) Nothing]),Qualifier () (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "the_s"))))]))))) Nothing])) Nothing]]++AST 2:++Module () (Just (ModuleHead () (ModuleName () "ByteStringUtils") Nothing (Just (ExportSpecList () [EVar () (UnQual () (Ident () "unsafeWithInternals")),EVar () (UnQual () (Ident () "unpackPSfromUTF8")),EVar () (UnQual () (Ident () "gzReadFilePS")),EVar () (UnQual () (Ident () "mmapFilePS")),EVar () (UnQual () (Ident () "gzWriteFilePS")),EVar () (UnQual () (Ident () "gzWriteFilePSs")),EVar () (UnQual () (Ident () "ifHeadThenTail")),EVar () (UnQual () (Ident () "dropSpace")),EVar () (UnQual () (Ident () "breakSpace")),EVar () (UnQual () (Ident () "linesPS")),EVar () (UnQual () (Ident () "unlinesPS")),EVar () (UnQual () (Ident () "hashPS")),EVar () (UnQual () (Ident () "breakFirstPS")),EVar () (UnQual () (Ident () "breakLastPS")),EVar () (UnQual () (Ident () "substrPS")),EVar () (UnQual () (Ident () "readIntPS")),EVar () (UnQual () (Ident () "is_funky")),EVar () (UnQual () (Ident () "fromHex2PS")),EVar () (UnQual () (Ident () "fromPS2Hex")),EVar () (UnQual () (Ident () "betweenLinesPS")),EVar () (UnQual () (Ident () "break_after_nth_newline")),EVar () (UnQual () (Ident () "break_before_nth_newline")),EVar () (UnQual () (Ident () "intercalate"))])))) [LanguagePragma () [Ident () "BangPatterns",Ident () "ForeignFunctionInterface",Ident () "CPP"]] [ImportDecl {importAnn = (), importModule = ModuleName () "Prelude", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () True [IVar () (Ident () "catch")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "B"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Char8", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "BC"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Internal", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "BI"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "intercalate"),IVar () (Ident () "uncons")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Internal", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "fromForeignPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Control.Exception", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "catch")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.IO", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "System.IO.Unsafe", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "unsafePerformIO")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Storable", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "peekElemOff"),IVar () (Ident () "peek")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Marshal.Alloc", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "free")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Marshal.Array", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "mallocArray"),IVar () (Ident () "peekArray"),IVar () (Ident () "advancePtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.C.Types", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "CInt")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Bits", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "rotateL")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Char", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "chr"),IVar () (Ident () "ord"),IVar () (Ident () "isSpace")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Word", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "Word8")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.Int", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "Int32")])},ImportDecl {importAnn = (), importModule = ModuleName () "Control.Monad", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "when")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Ptr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "nullPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.ForeignPtr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "ForeignPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Ptr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "plusPtr"),IAbs () (NoNamespace ()) (Ident () "Ptr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.ForeignPtr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "withForeignPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.ForeignPtr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "addForeignPtrFinalizer")])},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.Ptr", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "FunPtr")])},ImportDecl {importAnn = (), importModule = ModuleName () "Data.ByteString.Lazy", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "BL"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Codec.Compression.GZip", importQualified = True, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Just (ModuleName () "GZ"), importSpecs = Nothing},ImportDecl {importAnn = (), importModule = ModuleName () "Foreign.C.String", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IAbs () (NoNamespace ()) (Ident () "CString"),IVar () (Ident () "withCString")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.IO.MMap", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "mmapFileByteString")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.Mem", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "performGC")])},ImportDecl {importAnn = (), importModule = ModuleName () "System.Posix.Files", importQualified = False, importSrc = False, importSafe = False, importPkg = Nothing, importAs = Nothing, importSpecs = Just (ImportSpecList () False [IVar () (Ident () "fileSize"),IVar () (Ident () "getSymbolicLinkStatus")])}] [TypeSig () [Ident () "debugForeignPtr"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "ForeignPtr"))) (TyVar () (Ident () "a"))) (TyFun () (TyCon () (UnQual () (Ident () "String"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h debug_alloc") (Ident () "debug_alloc") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyVar () (Ident () "a"))) (TyFun () (TyCon () (UnQual () (Ident () "CString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h & debug_free") (Ident () "debug_free") (TyApp () (TyCon () (UnQual () (Ident () "FunPtr"))) (TyParen () (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyVar () (Ident () "a"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))))),FunBind () [Match () (Ident () "debugForeignPtr") [PVar () (Ident () "fp"),PVar () (Ident () "n")] (UnGuardedRhs () (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Var () (UnQual () (Ident () "n")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "cname")] (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Qualifier () (App () (App () (Var () (UnQual () (Ident () "debug_alloc"))) (Var () (UnQual () (Ident () "p")))) (Var () (UnQual () (Ident () "cname")))),Qualifier () (App () (App () (Var () (UnQual () (Ident () "addForeignPtrFinalizer"))) (Var () (UnQual () (Ident () "debug_free")))) (Var () (UnQual () (Ident () "fp"))))])))))) Nothing,Match () (Ident () "debugForeignPtr") [PWildCard (),PWildCard ()] (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "return"))) (Con () (Special () (UnitCon ()))))) Nothing],TypeSig () [Ident () "unsafeWithInternals"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyParen () (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyVar () (Ident () "a")))))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyVar () (Ident () "a"))))),FunBind () [Match () (Ident () "unsafeWithInternals") [PVar () (Ident () "ps"),PVar () (Ident () "f")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "fp"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (App () (App () (Var () (UnQual () (Ident () "f"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Var () (UnQual () (Ident () "l"))))))) Nothing])) Nothing],TypeSig () [Ident () "readIntPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (UnQual () (Ident () "Int")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))]))),PatBind () (PVar () (Ident () "readIntPS")) (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BC") (Ident () "readInt"))) (QVarOp () (UnQual () (Symbol () "."))) (App () (Var () (Qual () (ModuleName () "BC") (Ident () "dropWhile"))) (Var () (UnQual () (Ident () "isSpace")))))) Nothing,TypeSig () [Ident () "unpackPSfromUTF8"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (UnQual () (Ident () "String")))),FunBind () [Match () (Ident () "unpackPSfromUTF8") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PWildCard (),PWildCard (),PLit () (Signless ()) (Int () 0 "0")]) (UnGuardedRhs () (Lit () (String () "" ""))) Nothing,Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Generator () (PVar () (Ident () "outbuf")) (App () (Var () (UnQual () (Ident () "mallocArray"))) (Var () (UnQual () (Ident () "l")))),Generator () (PVar () (Ident () "lout")) (InfixApp () (Var () (UnQual () (Ident () "fromIntegral"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (App () (Var () (UnQual () (Ident () "utf8_to_ints"))) (Var () (UnQual () (Ident () "outbuf")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l"))))))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "lout"))) (QVarOp () (UnQual () (Symbol () "<"))) (Lit () (Int () 0 "0"))))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Var () (UnQual () (Ident () "error"))) (Lit () (String () "Bad UTF8!" "Bad UTF8!")))),Generator () (PVar () (Ident () "str")) (InfixApp () (Paren () (App () (Var () (UnQual () (Ident () "map"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "chr"))) (QVarOp () (UnQual () (Symbol () "."))) (Var () (UnQual () (Ident () "fromIntegral"))))))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (Var () (UnQual () (Ident () "peekArray"))) (Var () (UnQual () (Ident () "lout")))) (Var () (UnQual () (Ident () "outbuf"))))),Qualifier () (App () (Var () (UnQual () (Ident () "free"))) (Var () (UnQual () (Ident () "outbuf")))),Qualifier () (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "str"))))]))))) Nothing])) Nothing],ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h utf8_to_ints") (Ident () "utf8_to_ints") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Int")))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt"))))))),InlineSig () True Nothing (UnQual () (Ident () "ifHeadThenTail")),TypeSig () [Ident () "ifHeadThenTail"] (TyFun () (TyCon () (UnQual () (Ident () "Word8"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))))),FunBind () [Match () (Ident () "ifHeadThenTail") [PVar () (Ident () "c"),PVar () (Ident () "s")] (UnGuardedRhs () (Case () (App () (Var () (UnQual () (Ident () "uncons"))) (Var () (UnQual () (Ident () "s")))) [Alt () (PApp () (UnQual () (Ident () "Just")) [PTuple () Boxed [PVar () (Ident () "w"),PVar () (Ident () "t")]]) (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "c"))))] (App () (Con () (UnQual () (Ident () "Just"))) (Var () (UnQual () (Ident () "t"))))]) Nothing,Alt () (PWildCard ()) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing])) Nothing],TypeSig () [Ident () "isSpaceWord8"] (TyFun () (TyCon () (UnQual () (Ident () "Word8"))) (TyCon () (UnQual () (Ident () "Bool")))),FunBind () [Match () (Ident () "isSpaceWord8") [PVar () (Ident () "w")] (UnGuardedRhs () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 32 "32"))) (QVarOp () (UnQual () (Symbol () "||"))) (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 9 "9"))) (QVarOp () (UnQual () (Symbol () "||"))) (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 10 "10"))) (QVarOp () (UnQual () (Symbol () "||"))) (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 13 "13"))))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "isSpaceWord8")),TypeSig () [Ident () "firstnonspace"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int"))))))),FunBind () [Match () (Ident () "firstnonspace") [PBangPat () (PVar () (Ident () "ptr")),PBangPat () (PVar () (Ident () "n")),PBangPat () (PVar () (Ident () "m"))] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () ">="))) (Var () (UnQual () (Ident () "m"))))] (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "n")))),Qualifier () (If () (App () (Var () (UnQual () (Ident () "isSpaceWord8"))) (Var () (UnQual () (Ident () "w")))) (App () (App () (App () (Var () (UnQual () (Ident () "firstnonspace"))) (Var () (UnQual () (Ident () "ptr")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "m")))) (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))))])]) Nothing],TypeSig () [Ident () "firstspace"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int"))))))),FunBind () [Match () (Ident () "firstspace") [PBangPat () (PVar () (Ident () "ptr")),PBangPat () (PVar () (Ident () "n")),PBangPat () (PVar () (Ident () "m"))] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () ">="))) (Var () (UnQual () (Ident () "m"))))] (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "n")))),Qualifier () (If () (App () (Paren () (InfixApp () (Var () (UnQual () (Ident () "not"))) (QVarOp () (UnQual () (Symbol () "."))) (Var () (UnQual () (Ident () "isSpaceWord8"))))) (Var () (UnQual () (Ident () "w")))) (App () (App () (App () (Var () (UnQual () (Ident () "firstspace"))) (Var () (UnQual () (Ident () "ptr")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "m")))) (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "n")))))])]) Nothing],TypeSig () [Ident () "dropSpace"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "dropSpace") [PParen () (PApp () (Qual () (ModuleName () "BI") (Ident () "PS")) [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")])] (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BI") (Ident () "inlinePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Generator () (PVar () (Ident () "i")) (App () (App () (App () (Var () (UnQual () (Ident () "firstnonspace"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Lit () (Int () 0 "0"))) (Var () (UnQual () (Ident () "l")))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$!"))) (If () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "l")))) (Var () (Qual () (ModuleName () "B") (Ident () "empty"))) (App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "i")))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "i"))))))))]))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "dropSpace")),TypeSig () [Ident () "breakSpace"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])),FunBind () [Match () (Ident () "breakSpace") [PParen () (PApp () (Qual () (ModuleName () "BI") (Ident () "PS")) [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")])] (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BI") (Ident () "inlinePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Generator () (PVar () (Ident () "i")) (App () (App () (App () (Var () (UnQual () (Ident () "firstspace"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Lit () (Int () 0 "0"))) (Var () (UnQual () (Ident () "l")))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$!"))) (Case () (Con () (Special () (UnitCon ()))) [Alt () (PWildCard ()) (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 0 "0")))] (Tuple () Boxed [Var () (Qual () (ModuleName () "B") (Ident () "empty")),App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Var () (UnQual () (Ident () "s")))) (Var () (UnQual () (Ident () "l")))]),GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "l"))))] (Tuple () Boxed [App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Var () (UnQual () (Ident () "s")))) (Var () (UnQual () (Ident () "l"))),Var () (Qual () (ModuleName () "B") (Ident () "empty"))]),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Tuple () Boxed [App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Var () (UnQual () (Ident () "s")))) (Var () (UnQual () (Ident () "i"))),App () (App () (App () (Con () (Qual () (ModuleName () "BI") (Ident () "PS"))) (Var () (UnQual () (Ident () "x")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "i")))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "i")))))])]) Nothing]))]))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "breakSpace")),InlineSig () True Nothing (UnQual () (Ident () "is_funky")),TypeSig () [Ident () "is_funky"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (UnQual () (Ident () "Bool")))),FunBind () [Match () (Ident () "is_funky") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (InfixApp () (RightSection () (QVarOp () (UnQual () (Symbol () "/="))) (Lit () (Int () 0 "0"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (Var () (UnQual () (Ident () "has_funky_char"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l"))))))))))) Nothing])) Nothing],ForImp () (CCall ()) (Just (PlayRisky ())) (Just "fpstring.h has_funky_char") (Ident () "has_funky_char") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt")))))),InlineSig () True Nothing (UnQual () (Ident () "hashPS")),TypeSig () [Ident () "hashPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (UnQual () (Ident () "Int32")))),FunBind () [Match () (Ident () "hashPS") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [Qualifier () (App () (App () (Var () (UnQual () (Ident () "hash"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Var () (UnQual () (Ident () "l"))))]))))) Nothing])) Nothing],TypeSig () [Ident () "hash"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int32")))))),FunBind () [Match () (Ident () "hash") [PVar () (Ident () "ptr"),PVar () (Ident () "len")] (UnGuardedRhs () (App () (App () (App () (Var () (UnQual () (Ident () "f"))) (Paren () (ExpTypeSig () (Lit () (Int () 0 "0")) (TyCon () (UnQual () (Ident () "Int32")))))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "len"))))) (Just (BDecls () [FunBind () [Match () (Ident () "f") [PVar () (Ident () "h"),PWildCard (),PLit () (Signless ()) (Int () 0 "0")] (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "h"))))) Nothing,Match () (Ident () "f") [PVar () (Ident () "h"),PVar () (Ident () "p"),PVar () (Ident () "n")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "x")) (App () (Var () (UnQual () (Ident () "peek"))) (Var () (UnQual () (Ident () "p")))),LetStmt () (BDecls () [PatBind () (PBangPat () (PVar () (Ident () "h'"))) (UnGuardedRhs () (InfixApp () (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "x"))))) (QVarOp () (UnQual () (Symbol () "+"))) (Paren () (App () (App () (Var () (UnQual () (Ident () "rotateL"))) (Var () (UnQual () (Ident () "h")))) (Lit () (Int () 8 "8")))))) Nothing]),Qualifier () (App () (App () (App () (Var () (UnQual () (Ident () "f"))) (Var () (UnQual () (Ident () "h'")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "advancePtr"))) (Lit () (Int () 1 "1"))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (Int () 1 "1")))))])) Nothing]]))],InlineSig () True Nothing (UnQual () (Ident () "substrPS")),TypeSig () [Ident () "substrPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyCon () (UnQual () (Ident () "Int")))))),FunBind () [Match () (Ident () "substrPS") [PVar () (Ident () "tok"),PVar () (Ident () "str")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "tok"))))] (App () (Con () (UnQual () (Ident () "Just"))) (Lit () (Int () 0 "0"))),GuardedRhs () [Qualifier () (InfixApp () (App () (Var () (Qual () (ModuleName () "B") (Ident () "length"))) (Var () (UnQual () (Ident () "tok")))) (QVarOp () (UnQual () (Symbol () ">"))) (App () (Var () (Qual () (ModuleName () "B") (Ident () "length"))) (Var () (UnQual () (Ident () "str")))))] (Con () (UnQual () (Ident () "Nothing"))),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (Do () [Generator () (PVar () (Ident () "n")) (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "elemIndex"))) (Paren () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "head"))) (Var () (UnQual () (Ident () "tok")))))) (Var () (UnQual () (Ident () "str")))),LetStmt () (BDecls () [PatBind () (PVar () (Ident () "ttok")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "B") (Ident () "tail"))) (Var () (UnQual () (Ident () "tok"))))) Nothing,PatBind () (PVar () (Ident () "reststr")) (UnGuardedRhs () (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "drop"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "str"))))) Nothing]),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "ttok"))) (QVarOp () (UnQual () (Symbol () "=="))) (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "take"))) (Paren () (App () (Var () (Qual () (ModuleName () "B") (Ident () "length"))) (Var () (UnQual () (Ident () "ttok")))))) (Var () (UnQual () (Ident () "reststr"))))) (App () (Con () (UnQual () (Ident () "Just"))) (Var () (UnQual () (Ident () "n")))) (InfixApp () (LeftSection () (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1")))) (QVarOp () (UnQual () (Symbol () "+")))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (App () (Var () (UnQual () (Ident () "substrPS"))) (Var () (UnQual () (Ident () "tok")))) (Var () (UnQual () (Ident () "reststr"))))))])]) Nothing],InlineSig () True Nothing (UnQual () (Ident () "breakFirstPS")),TypeSig () [Ident () "breakFirstPS"] (TyFun () (TyCon () (UnQual () (Ident () "Char"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])))),FunBind () [Match () (Ident () "breakFirstPS") [PVar () (Ident () "c"),PVar () (Ident () "p")] (UnGuardedRhs () (Case () (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "elemIndex"))) (Var () (UnQual () (Ident () "c")))) (Var () (UnQual () (Ident () "p")))) [Alt () (PApp () (UnQual () (Ident () "Nothing")) []) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing,Alt () (PApp () (UnQual () (Ident () "Just")) [PVar () (Ident () "n")]) (UnGuardedRhs () (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "take"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "p"))),App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "drop"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "p")))]))) Nothing])) Nothing],InlineSig () True Nothing (UnQual () (Ident () "breakLastPS")),TypeSig () [Ident () "breakLastPS"] (TyFun () (TyCon () (UnQual () (Ident () "Char"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])))),FunBind () [Match () (Ident () "breakLastPS") [PVar () (Ident () "c"),PVar () (Ident () "p")] (UnGuardedRhs () (Case () (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "elemIndexEnd"))) (Var () (UnQual () (Ident () "c")))) (Var () (UnQual () (Ident () "p")))) [Alt () (PApp () (UnQual () (Ident () "Nothing")) []) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing,Alt () (PApp () (UnQual () (Ident () "Just")) [PVar () (Ident () "n")]) (UnGuardedRhs () (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "take"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "p"))),App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "drop"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "n"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (Var () (UnQual () (Ident () "p")))]))) Nothing])) Nothing],InlineSig () True Nothing (UnQual () (Ident () "linesPS")),TypeSig () [Ident () "linesPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyList () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))))),FunBind () [Match () (Ident () "linesPS") [PVar () (Ident () "ps")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "ps"))))] (List () [Var () (Qual () (ModuleName () "B") (Ident () "empty"))]),GuardedRhs () [Qualifier () (Var () (UnQual () (Ident () "otherwise")))] (App () (App () (Var () (Qual () (ModuleName () "BC") (Ident () "split"))) (Lit () (Char () '\n' "\\n"))) (Var () (UnQual () (Ident () "ps"))))]) Nothing],TypeSig () [Ident () "unlinesPS"] (TyFun () (TyList () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "unlinesPS") [PList () []] (UnGuardedRhs () (Var () (Qual () (ModuleName () "BC") (Ident () "empty")))) Nothing,Match () (Ident () "unlinesPS") [PVar () (Ident () "x")] (UnGuardedRhs () (InfixApp () (Var () (Qual () (ModuleName () "BC") (Ident () "init"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Var () (Qual () (ModuleName () "BC") (Ident () "unlines"))) (Var () (UnQual () (Ident () "x")))))) Nothing],InlineSig () True Nothing (UnQual () (Ident () "unlinesPS")),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzopen") (Ident () "c_gzopen") (TyFun () (TyCon () (UnQual () (Ident () "CString"))) (TyFun () (TyCon () (UnQual () (Ident () "CString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyParen () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzclose") (Ident () "c_gzclose") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzread") (Ident () "c_gzread") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt"))))))),ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static zlib.h gzwrite") (Ident () "c_gzwrite") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "CInt"))))))),TypeSig () [Ident () "gzReadFilePS"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))))),FunBind () [Match () (Ident () "gzReadFilePS") [PVar () (Ident () "f")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "h")) (App () (App () (Var () (UnQual () (Ident () "openBinaryFile"))) (Var () (UnQual () (Ident () "f")))) (Con () (UnQual () (Ident () "ReadMode")))),Generator () (PVar () (Ident () "header")) (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "hGet"))) (Var () (UnQual () (Ident () "h")))) (Lit () (Int () 2 "2"))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "header"))) (QVarOp () (UnQual () (Symbol () "/="))) (App () (Var () (Qual () (ModuleName () "BC") (Ident () "pack"))) (Lit () (String () "\US\139" "\\US\\139")))) (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "hClose"))) (Var () (UnQual () (Ident () "h")))),Qualifier () (App () (Var () (UnQual () (Ident () "mmapFilePS"))) (Var () (UnQual () (Ident () "f"))))]) (Do () [Qualifier () (App () (App () (App () (Var () (UnQual () (Ident () "hSeek"))) (Var () (UnQual () (Ident () "h")))) (Con () (UnQual () (Ident () "SeekFromEnd")))) (Paren () (NegApp () (Lit () (Int () 4 "4"))))),Generator () (PVar () (Ident () "len")) (App () (Var () (UnQual () (Ident () "hGetLittleEndInt"))) (Var () (UnQual () (Ident () "h")))),Qualifier () (App () (Var () (UnQual () (Ident () "hClose"))) (Var () (UnQual () (Ident () "h")))),LetStmt () (BDecls () [PatBind () (PVar () (Ident () "decompress")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "GZ") (Ident () "decompressWith"))) (RecUpdate () (Var () (Qual () (ModuleName () "GZ") (Ident () "defaultDecompressParams"))) [FieldUpdate () (Qual () (ModuleName () "GZ") (Ident () "decompressBufferSize")) (Var () (UnQual () (Ident () "len")))]))) Nothing]),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "fmap"))) (Paren () (InfixApp () (Var () (Qual () (ModuleName () "B") (Ident () "concat"))) (QVarOp () (UnQual () (Symbol () "."))) (InfixApp () (Var () (Qual () (ModuleName () "BL") (Ident () "toChunks"))) (QVarOp () (UnQual () (Symbol () "."))) (Var () (UnQual () (Ident () "decompress"))))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "fmap"))) (Paren () (InfixApp () (Var () (Qual () (ModuleName () "BL") (Ident () "fromChunks"))) (QVarOp () (UnQual () (Symbol () "."))) (RightSection () (QConOp () (Special () (Cons ()))) (List () []))))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (App () (App () (Var () (Qual () (ModuleName () "B") (Ident () "readFile"))) (Var () (UnQual () (Ident () "f")))) (Var () (Qual () (ModuleName () "BL") (Ident () "readFile")))) (Var () (UnQual () (Ident () "f")))))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Var () (UnQual () (Ident () "f")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "fstr")] (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Lit () (String () "rb" "rb"))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "rb")] (Do () [Generator () (PVar () (Ident () "gzf")) (App () (App () (Var () (UnQual () (Ident () "c_gzopen"))) (Var () (UnQual () (Ident () "fstr")))) (Var () (UnQual () (Ident () "rb")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "gzf"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nullPtr")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem opening file " "problem opening file ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f")))))),Generator () (PVar () (Ident () "fp")) (App () (Var () (Qual () (ModuleName () "BI") (Ident () "mallocByteString"))) (Var () (UnQual () (Ident () "len")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "debugForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "gzReadFilePS " "gzReadFilePS ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f"))))),Generator () (PVar () (Ident () "lread")) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (App () (App () (App () (Var () (UnQual () (Ident () "c_gzread"))) (Var () (UnQual () (Ident () "gzf")))) (Var () (UnQual () (Ident () "p")))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "len")))))))),Qualifier () (App () (Var () (UnQual () (Ident () "c_gzclose"))) (Var () (UnQual () (Ident () "gzf")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "lread")))) (QVarOp () (UnQual () (Symbol () "/="))) (Var () (UnQual () (Ident () "len")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem gzreading file " "problem gzreading file ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f")))))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Lit () (Int () 0 "0"))) (Var () (UnQual () (Ident () "len")))))])))))]))])) Nothing],TypeSig () [Ident () "hGetLittleEndInt"] (TyFun () (TyCon () (UnQual () (Ident () "Handle"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (UnQual () (Ident () "Int"))))),FunBind () [Match () (Ident () "hGetLittleEndInt") [PVar () (Ident () "h")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "b1")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Generator () (PVar () (Ident () "b2")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Generator () (PVar () (Ident () "b3")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Generator () (PVar () (Ident () "b4")) (InfixApp () (Var () (UnQual () (Ident () "ord"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "hGetChar"))) (Var () (UnQual () (Ident () "h"))))),Qualifier () (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "b1"))) (QVarOp () (UnQual () (Symbol () "+"))) (InfixApp () (Lit () (Int () 256 "256")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "b2"))))) (QVarOp () (UnQual () (Symbol () "+"))) (InfixApp () (Lit () (Int () 65536 "65536")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "b3"))))) (QVarOp () (UnQual () (Symbol () "+"))) (InfixApp () (Lit () (Int () 16777216 "16777216")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "b4"))))))])) Nothing],TypeSig () [Ident () "gzWriteFilePS"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),FunBind () [Match () (Ident () "gzWriteFilePS") [PVar () (Ident () "f"),PVar () (Ident () "ps")] (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "gzWriteFilePSs"))) (Var () (UnQual () (Ident () "f")))) (List () [Var () (UnQual () (Ident () "ps"))]))) Nothing],TypeSig () [Ident () "gzWriteFilePSs"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyFun () (TyList () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),FunBind () [Match () (Ident () "gzWriteFilePSs") [PVar () (Ident () "f"),PVar () (Ident () "pss")] (UnGuardedRhs () (InfixApp () (App () (Var () (Qual () (ModuleName () "BL") (Ident () "writeFile"))) (Var () (UnQual () (Ident () "f")))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (Qual () (ModuleName () "GZ") (Ident () "compress"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (App () (App () (Var () (Qual () (ModuleName () "BL") (Ident () "fromChunks"))) (Var () (UnQual () (Ident () "pss")))) (Var () (UnQual () (Ident () "withCString")))) (Var () (UnQual () (Ident () "f")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "fstr")] (InfixApp () (App () (Var () (UnQual () (Ident () "withCString"))) (Lit () (String () "wb" "wb"))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "wb")] (Do () [Generator () (PVar () (Ident () "gzf")) (App () (App () (Var () (UnQual () (Ident () "c_gzopen"))) (Var () (UnQual () (Ident () "fstr")))) (Var () (UnQual () (Ident () "wb")))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "gzf"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nullPtr")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem gzopening file for write: " "problem gzopening file for write: ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f")))))),Qualifier () (InfixApp () (App () (App () (Var () (UnQual () (Ident () "mapM_"))) (Paren () (App () (Var () (UnQual () (Ident () "gzWriteToGzf"))) (Var () (UnQual () (Ident () "gzf")))))) (Var () (UnQual () (Ident () "pss")))) (QVarOp () (UnQual () (Ident () "catch"))) (Lambda () [PWildCard ()] (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Lit () (String () "problem gzwriting file: " "problem gzwriting file: ")) (QVarOp () (UnQual () (Symbol () "++"))) (Var () (UnQual () (Ident () "f"))))))),Qualifier () (App () (Var () (UnQual () (Ident () "c_gzclose"))) (Var () (UnQual () (Ident () "gzf"))))])))))))) Nothing],TypeSig () [Ident () "gzWriteToGzf"] (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (Special () (UnitCon ())))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ())))))),FunBind () [Match () (Ident () "gzWriteToGzf") [PVar () (Ident () "gzf"),PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PWildCard (),PWildCard (),PLit () (Signless ()) (Int () 0 "0")]) (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "return"))) (Con () (Special () (UnitCon ()))))) Nothing,Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "lw")) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (App () (App () (App () (Var () (UnQual () (Ident () "c_gzwrite"))) (Var () (UnQual () (Ident () "gzf")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "p"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l")))))))),Qualifier () (InfixApp () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "lw")))) (QVarOp () (UnQual () (Symbol () "/="))) (Var () (UnQual () (Ident () "l")))))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "fail"))) (QVarOp () (UnQual () (Symbol () "$"))) (Lit () (String () "problem in gzWriteToGzf" "problem in gzWriteToGzf"))))])) Nothing])) Nothing],TypeSig () [Ident () "mmapFilePS"] (TyFun () (TyCon () (UnQual () (Ident () "FilePath"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))))),FunBind () [Match () (Ident () "mmapFilePS") [PVar () (Ident () "f")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "x")) (InfixApp () (App () (App () (Var () (UnQual () (Ident () "mmapFileByteString"))) (Var () (UnQual () (Ident () "f")))) (Con () (UnQual () (Ident () "Nothing")))) (QVarOp () (UnQual () (Ident () "catch"))) (Paren () (Lambda () [PWildCard ()] (Do () [Generator () (PVar () (Ident () "size")) (InfixApp () (Var () (UnQual () (Ident () "fileSize"))) (QVarOp () (UnQual () (Ident () "fmap"))) (App () (Var () (UnQual () (Ident () "getSymbolicLinkStatus"))) (Var () (UnQual () (Ident () "f"))))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "size"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 0 "0"))) (App () (Var () (UnQual () (Ident () "return"))) (Var () (Qual () (ModuleName () "B") (Ident () "empty")))) (InfixApp () (Var () (UnQual () (Ident () "performGC"))) (QVarOp () (UnQual () (Symbol () ">>"))) (App () (App () (Var () (UnQual () (Ident () "mmapFileByteString"))) (Var () (UnQual () (Ident () "f")))) (Con () (UnQual () (Ident () "Nothing"))))))])))),Qualifier () (App () (Var () (UnQual () (Ident () "return"))) (Var () (UnQual () (Ident () "x"))))])) Nothing],PatBind () (PVar () (Ident () "mmapFilePS")) (UnGuardedRhs () (Var () (Qual () (ModuleName () "B") (Ident () "readFile")))) Nothing,ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h conv_to_hex") (Ident () "conv_to_hex") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))))),TypeSig () [Ident () "fromPS2Hex"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "fromPS2Hex") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "unsafeCreate"))) (Paren () (InfixApp () (Lit () (Int () 2 "2")) (QVarOp () (UnQual () (Symbol () "*"))) (Var () (UnQual () (Ident () "l")))))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "f")] (InfixApp () (App () (App () (Var () (UnQual () (Ident () "conv_to_hex"))) (Var () (UnQual () (Ident () "p")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "f"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Var () (UnQual () (Ident () "fromIntegral"))) (Var () (UnQual () (Ident () "l")))))))))) Nothing])) Nothing],ForImp () (CCall ()) (Just (PlayRisky ())) (Just "static fpstring.h conv_from_hex") (Ident () "conv_from_hex") (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyApp () (TyCon () (UnQual () (Ident () "Ptr"))) (TyCon () (UnQual () (Ident () "Word8")))) (TyFun () (TyCon () (UnQual () (Ident () "CInt"))) (TyApp () (TyCon () (UnQual () (Ident () "IO"))) (TyCon () (Special () (UnitCon ()))))))),TypeSig () [Ident () "fromHex2PS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))),FunBind () [Match () (Ident () "fromHex2PS") [PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "unsafeCreate"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Ident () "div"))) (Lit () (Int () 2 "2"))))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "x")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "f")] (App () (App () (App () (Var () (UnQual () (Ident () "conv_from_hex"))) (Var () (UnQual () (Ident () "p")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "f"))) (QVarOp () (UnQual () (Ident () "plusPtr"))) (Var () (UnQual () (Ident () "s")))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "fromIntegral"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Ident () "div"))) (Lit () (Int () 2 "2"))))))))))) Nothing])) Nothing],TypeSig () [Ident () "betweenLinesPS"] (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyParen () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")))))))),FunBind () [Match () (Ident () "betweenLinesPS") [PVar () (Ident () "start"),PVar () (Ident () "end"),PVar () (Ident () "ps")] (UnGuardedRhs () (Case () (App () (App () (Var () (UnQual () (Ident () "break"))) (LeftSection () (Var () (UnQual () (Ident () "start"))) (QVarOp () (UnQual () (Symbol () "=="))))) (Paren () (App () (Var () (UnQual () (Ident () "linesPS"))) (Var () (UnQual () (Ident () "ps")))))) [Alt () (PTuple () Boxed [PWildCard (),PInfixApp () (PWildCard ()) (Special () (Cons ())) (PAsPat () (Ident () "rest") (PParen () (PInfixApp () (PVar () (Ident () "bs1")) (Special () (Cons ())) (PWildCard ()))))]) (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "bs1")))) [Alt () (PTuple () Boxed [PVar () (Ident () "ps1"),PVar () (Ident () "s1"),PWildCard ()]) (UnGuardedRhs () (Case () (App () (App () (Var () (UnQual () (Ident () "break"))) (LeftSection () (Var () (UnQual () (Ident () "end"))) (QVarOp () (UnQual () (Symbol () "=="))))) (Var () (UnQual () (Ident () "rest")))) [Alt () (PTuple () Boxed [PWildCard (),PInfixApp () (PVar () (Ident () "bs2")) (Special () (Cons ())) (PWildCard ())]) (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "bs2")))) [Alt () (PTuple () Boxed [PWildCard (),PVar () (Ident () "s2"),PWildCard ()]) (UnGuardedRhs () (InfixApp () (Con () (UnQual () (Ident () "Just"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "ps1")))) (Var () (UnQual () (Ident () "s1")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s2"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "s1")))))))) Nothing])) Nothing,Alt () (PWildCard ()) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing])) Nothing])) Nothing,Alt () (PWildCard ()) (UnGuardedRhs () (Con () (UnQual () (Ident () "Nothing")))) Nothing])) Nothing],TypeSig () [Ident () "break_after_nth_newline"] (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyApp () (TyCon () (UnQual () (Ident () "Maybe"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))])))),FunBind () [Match () (Ident () "break_after_nth_newline") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "the_ps")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "the_ps"))))] (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [Var () (Qual () (ModuleName () "B") (Ident () "empty")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))]))]) Nothing,Match () (Ident () "break_after_nth_newline") [PVar () (Ident () "n"),PVar () (Ident () "the_ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "the_ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "fp"),PVar () (Ident () "the_s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [LetStmt () (BDecls () [FunBind () [Match () (Ident () "findit") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "s")] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "end"))))] (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [Var () (UnQual () (Ident () "the_ps")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))])))]) Nothing,Match () (Ident () "findit") [PWildCard (),PVar () (Ident () "s")] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "end"))))] (App () (Var () (UnQual () (Ident () "return"))) (Con () (UnQual () (Ident () "Nothing"))))]) Nothing,Match () (Ident () "findit") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "s")] (UnGuardedRhs () (Let () (BDecls () [PatBind () (PVar () (Ident () "left_l")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "the_s"))))) Nothing]) (InfixApp () (Var () (UnQual () (Ident () "return"))) (QVarOp () (UnQual () (Symbol () "$"))) (App () (Con () (UnQual () (Ident () "Just"))) (Tuple () Boxed [App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "the_s")))) (Var () (UnQual () (Ident () "left_l"))),App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "s")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "left_l")))))]))))) Nothing,Match () (Ident () "findit") [PVar () (Ident () "i"),PVar () (Ident () "s")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "p")))) (Var () (UnQual () (Ident () "s")))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nl")))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (Int () 1 "1"))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "i")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))))])) Nothing],PatBind () (PVar () (Ident () "nl")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "c2w"))) (Lit () (Char () '\n' "\\n")))) Nothing,PatBind () (PVar () (Ident () "end")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "the_s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "l"))))) Nothing]),Qualifier () (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "the_s"))))]))))) Nothing])) Nothing],TypeSig () [Ident () "break_before_nth_newline"] (TyFun () (TyCon () (UnQual () (Ident () "Int"))) (TyFun () (TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))) (TyTuple () Boxed [TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString")),TyCon () (Qual () (ModuleName () "B") (Ident () "ByteString"))]))),FunBind () [Match () (Ident () "break_before_nth_newline") [PLit () (Signless ()) (Int () 0 "0"),PVar () (Ident () "the_ps")] (GuardedRhss () [GuardedRhs () [Qualifier () (App () (Var () (Qual () (ModuleName () "B") (Ident () "null"))) (Var () (UnQual () (Ident () "the_ps"))))] (Tuple () Boxed [Var () (Qual () (ModuleName () "B") (Ident () "empty")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))])]) Nothing,Match () (Ident () "break_before_nth_newline") [PVar () (Ident () "n"),PVar () (Ident () "the_ps")] (UnGuardedRhs () (Case () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "toForeignPtr"))) (Var () (UnQual () (Ident () "the_ps")))) [Alt () (PTuple () Boxed [PVar () (Ident () "fp"),PVar () (Ident () "the_s"),PVar () (Ident () "l")]) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "unsafePerformIO"))) (QVarOp () (UnQual () (Symbol () "$"))) (InfixApp () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (QVarOp () (UnQual () (Symbol () "$"))) (Lambda () [PVar () (Ident () "p")] (Do () [LetStmt () (BDecls () [FunBind () [Match () (Ident () "findit") [PWildCard (),PVar () (Ident () "s")] (GuardedRhss () [GuardedRhs () [Qualifier () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "end"))))] (App () (Var () (UnQual () (Ident () "return"))) (Tuple () Boxed [Var () (UnQual () (Ident () "the_ps")),Var () (Qual () (ModuleName () "B") (Ident () "empty"))]))]) Nothing,Match () (Ident () "findit") [PVar () (Ident () "i"),PVar () (Ident () "s")] (UnGuardedRhs () (Do () [Generator () (PVar () (Ident () "w")) (App () (App () (Var () (UnQual () (Ident () "peekElemOff"))) (Var () (UnQual () (Ident () "p")))) (Var () (UnQual () (Ident () "s")))),Qualifier () (If () (InfixApp () (Var () (UnQual () (Ident () "w"))) (QVarOp () (UnQual () (Symbol () "=="))) (Var () (UnQual () (Ident () "nl")))) (If () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "=="))) (Lit () (Int () 0 "0"))) (Let () (BDecls () [PatBind () (PVar () (Ident () "left_l")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "the_s"))))) Nothing]) (App () (Var () (UnQual () (Ident () "return"))) (Tuple () Boxed [App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "the_s")))) (Var () (UnQual () (Ident () "left_l"))),App () (App () (App () (Var () (UnQual () (Ident () "fromForeignPtr"))) (Var () (UnQual () (Ident () "fp")))) (Var () (UnQual () (Ident () "s")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "l"))) (QVarOp () (UnQual () (Symbol () "-"))) (Var () (UnQual () (Ident () "left_l")))))]))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "i"))) (QVarOp () (UnQual () (Symbol () "-"))) (Lit () (Int () 1 "1"))))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1")))))) (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "i")))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Lit () (Int () 1 "1"))))))])) Nothing],PatBind () (PVar () (Ident () "nl")) (UnGuardedRhs () (App () (Var () (Qual () (ModuleName () "BI") (Ident () "c2w"))) (Lit () (Char () '\n' "\\n")))) Nothing,PatBind () (PVar () (Ident () "end")) (UnGuardedRhs () (InfixApp () (Var () (UnQual () (Ident () "the_s"))) (QVarOp () (UnQual () (Symbol () "+"))) (Var () (UnQual () (Ident () "l"))))) Nothing]),Qualifier () (App () (App () (Var () (UnQual () (Ident () "findit"))) (Var () (UnQual () (Ident () "n")))) (Var () (UnQual () (Ident () "the_s"))))]))))) Nothing])) Nothing]]+
@@ -0,0 +1,384 @@+{-# LANGUAGE BangPatterns, ForeignFunctionInterface, CPP #-}+module ByteStringUtils+ (unsafeWithInternals, unpackPSfromUTF8, gzReadFilePS, mmapFilePS,+ gzWriteFilePS, gzWriteFilePSs, ifHeadThenTail, dropSpace,+ breakSpace, linesPS, unlinesPS, hashPS, breakFirstPS, breakLastPS,+ substrPS, readIntPS, is_funky, fromHex2PS, fromPS2Hex,+ betweenLinesPS, break_after_nth_newline, break_before_nth_newline,+ intercalate)+ where+import Prelude hiding (catch)+import qualified Data.ByteString as B+import qualified Data.ByteString.Char8 as BC+import qualified Data.ByteString.Internal as BI+import Data.ByteString (intercalate, uncons)+import Data.ByteString.Internal (fromForeignPtr)+import Control.Exception (catch)+import System.IO+import System.IO.Unsafe (unsafePerformIO)+import Foreign.Storable (peekElemOff, peek)+import Foreign.Marshal.Alloc (free)+import Foreign.Marshal.Array (mallocArray, peekArray, advancePtr)+import Foreign.C.Types (CInt)+import Data.Bits (rotateL)+import Data.Char (chr, ord, isSpace)+import Data.Word (Word8)+import Data.Int (Int32)+import Control.Monad (when)+import Foreign.Ptr (nullPtr)+import Foreign.ForeignPtr (ForeignPtr)+import Foreign.Ptr (plusPtr, Ptr)+import Foreign.ForeignPtr (withForeignPtr)+import Foreign.ForeignPtr (addForeignPtrFinalizer)+import Foreign.Ptr (FunPtr)+import qualified Data.ByteString.Lazy as BL+import qualified Codec.Compression.GZip as GZ+import Foreign.C.String (CString, withCString)+import System.IO.MMap (mmapFileByteString)+import System.Mem (performGC)+import System.Posix.Files (fileSize, getSymbolicLinkStatus)++debugForeignPtr :: ForeignPtr a -> String -> IO ()++foreign import ccall unsafe "static fpstring.h debug_alloc"+ debug_alloc :: Ptr a -> CString -> IO ()++foreign import ccall unsafe "static fpstring.h & debug_free"+ debug_free :: FunPtr (Ptr a -> IO ())+debugForeignPtr fp n+ = withCString n $+ \ cname ->+ withForeignPtr fp $+ \ p ->+ do debug_alloc p cname+ addForeignPtrFinalizer debug_free fp+debugForeignPtr _ _ = return ()++unsafeWithInternals ::+ B.ByteString -> (Ptr Word8 -> Int -> IO a) -> IO a+unsafeWithInternals ps f+ = case BI.toForeignPtr ps of+ (fp, s, l) -> withForeignPtr fp $ \ p -> f (p `plusPtr` s) l++readIntPS :: B.ByteString -> Maybe (Int, B.ByteString)+readIntPS = BC.readInt . BC.dropWhile isSpace++unpackPSfromUTF8 :: B.ByteString -> String+unpackPSfromUTF8 ps+ = case BI.toForeignPtr ps of+ (_, _, 0) -> ""+ (x, s, l) -> unsafePerformIO $+ withForeignPtr x $+ \ p ->+ do outbuf <- mallocArray l+ lout <- fromIntegral `fmap`+ utf8_to_ints outbuf (p `plusPtr` s) (fromIntegral l)+ when (lout < 0) $ error "Bad UTF8!"+ str <- (map (chr . fromIntegral)) `fmap` peekArray lout outbuf+ free outbuf+ return str++foreign import ccall unsafe "static fpstring.h utf8_to_ints"+ utf8_to_ints :: Ptr Int -> Ptr Word8 -> CInt -> IO CInt++{-# INLINE ifHeadThenTail #-}++ifHeadThenTail :: Word8 -> B.ByteString -> Maybe B.ByteString+ifHeadThenTail c s+ = case uncons s of+ Just (w, t) | w == c -> Just t+ _ -> Nothing++isSpaceWord8 :: Word8 -> Bool+isSpaceWord8 w = w == 32 || w == 9 || w == 10 || w == 13++{-# INLINE isSpaceWord8 #-}++firstnonspace :: Ptr Word8 -> Int -> Int -> IO Int+firstnonspace !ptr !n !m+ | n >= m = return n+ | otherwise =+ do w <- peekElemOff ptr n+ if isSpaceWord8 w then firstnonspace ptr (n + 1) m else return n++firstspace :: Ptr Word8 -> Int -> Int -> IO Int+firstspace !ptr !n !m+ | n >= m = return n+ | otherwise =+ do w <- peekElemOff ptr n+ if (not . isSpaceWord8) w then firstspace ptr (n + 1) m else+ return n++dropSpace :: B.ByteString -> B.ByteString+dropSpace (BI.PS x s l)+ = BI.inlinePerformIO $+ withForeignPtr x $+ \ p ->+ do i <- firstnonspace (p `plusPtr` s) 0 l+ return $! if i == l then B.empty else BI.PS x (s + i) (l - i)++{-# INLINE dropSpace #-}++breakSpace :: B.ByteString -> (B.ByteString, B.ByteString)+breakSpace (BI.PS x s l)+ = BI.inlinePerformIO $+ withForeignPtr x $+ \ p ->+ do i <- firstspace (p `plusPtr` s) 0 l+ return $!+ case () of+ _ | i == 0 -> (B.empty, BI.PS x s l)+ | i == l -> (BI.PS x s l, B.empty)+ | otherwise -> (BI.PS x s i, BI.PS x (s + i) (l - i))++{-# INLINE breakSpace #-}++{-# INLINE is_funky #-}++is_funky :: B.ByteString -> Bool+is_funky ps+ = case BI.toForeignPtr ps of+ (x, s, l) -> unsafePerformIO $+ withForeignPtr x $+ \ p ->+ (/= 0) `fmap` has_funky_char (p `plusPtr` s) (fromIntegral l)++foreign import ccall unsafe "fpstring.h has_funky_char"+ has_funky_char :: Ptr Word8 -> CInt -> IO CInt++{-# INLINE hashPS #-}++hashPS :: B.ByteString -> Int32+hashPS ps+ = case BI.toForeignPtr ps of+ (x, s, l) -> unsafePerformIO $+ withForeignPtr x $ \ p -> do hash (p `plusPtr` s) l++hash :: Ptr Word8 -> Int -> IO Int32+hash ptr len = f (0 :: Int32) ptr len+ where f h _ 0 = return h+ f h p n+ = do x <- peek p+ let !h' = (fromIntegral x) + (rotateL h 8)+ f h' (p `advancePtr` 1) (n - 1)++{-# INLINE substrPS #-}++substrPS :: B.ByteString -> B.ByteString -> Maybe Int+substrPS tok str+ | B.null tok = Just 0+ | B.length tok > B.length str = Nothing+ | otherwise =+ do n <- BC.elemIndex (BC.head tok) str+ let ttok = B.tail tok+ reststr = B.drop (n + 1) str+ if ttok == B.take (B.length ttok) reststr then Just n else+ ((n + 1) +) `fmap` substrPS tok reststr++{-# INLINE breakFirstPS #-}++breakFirstPS ::+ Char -> B.ByteString -> Maybe (B.ByteString, B.ByteString)+breakFirstPS c p+ = case BC.elemIndex c p of+ Nothing -> Nothing+ Just n -> Just (B.take n p, B.drop (n + 1) p)++{-# INLINE breakLastPS #-}++breakLastPS ::+ Char -> B.ByteString -> Maybe (B.ByteString, B.ByteString)+breakLastPS c p+ = case BC.elemIndexEnd c p of+ Nothing -> Nothing+ Just n -> Just (B.take n p, B.drop (n + 1) p)++{-# INLINE linesPS #-}++linesPS :: B.ByteString -> [B.ByteString]+linesPS ps+ | B.null ps = [B.empty]+ | otherwise = BC.split '\n' ps++unlinesPS :: [B.ByteString] -> B.ByteString+unlinesPS [] = BC.empty+unlinesPS x = BC.init $ BC.unlines x++{-# INLINE unlinesPS #-}++foreign import ccall unsafe "static zlib.h gzopen" c_gzopen ::+ CString -> CString -> IO (Ptr ())++foreign import ccall unsafe "static zlib.h gzclose" c_gzclose ::+ Ptr () -> IO ()++foreign import ccall unsafe "static zlib.h gzread" c_gzread ::+ Ptr () -> Ptr Word8 -> CInt -> IO CInt++foreign import ccall unsafe "static zlib.h gzwrite" c_gzwrite ::+ Ptr () -> Ptr Word8 -> CInt -> IO CInt++gzReadFilePS :: FilePath -> IO B.ByteString+gzReadFilePS f+ = do h <- openBinaryFile f ReadMode+ header <- B.hGet h 2+ if header /= BC.pack "\US\139" then+ do hClose h+ mmapFilePS f+ else+ do hSeek h SeekFromEnd (-4)+ len <- hGetLittleEndInt h+ hClose h+ let decompress+ = GZ.decompressWith+ GZ.defaultDecompressParams{GZ.decompressBufferSize = len}+ fmap (B.concat . BL.toChunks . decompress) $+ fmap (BL.fromChunks . (: [])) $ B.readFile f BL.readFile f+ withCString f $+ \ fstr ->+ withCString "rb" $+ \ rb ->+ do gzf <- c_gzopen fstr rb+ when (gzf == nullPtr) $ fail $ "problem opening file " ++ f+ fp <- BI.mallocByteString len+ debugForeignPtr fp $ "gzReadFilePS " ++ f+ lread <- withForeignPtr fp $+ \ p -> c_gzread gzf p (fromIntegral len)+ c_gzclose gzf+ when (fromIntegral lread /= len) $+ fail $ "problem gzreading file " ++ f+ return $ fromForeignPtr fp 0 len++hGetLittleEndInt :: Handle -> IO Int+hGetLittleEndInt h+ = do b1 <- ord `fmap` hGetChar h+ b2 <- ord `fmap` hGetChar h+ b3 <- ord `fmap` hGetChar h+ b4 <- ord `fmap` hGetChar h+ return $ b1 + 256 * b2 + 65536 * b3 + 16777216 * b4++gzWriteFilePS :: FilePath -> B.ByteString -> IO ()+gzWriteFilePS f ps = gzWriteFilePSs f [ps]++gzWriteFilePSs :: FilePath -> [B.ByteString] -> IO ()+gzWriteFilePSs f pss+ = BL.writeFile f $+ GZ.compress $+ BL.fromChunks pss withCString f $+ \ fstr ->+ withCString "wb" $+ \ wb ->+ do gzf <- c_gzopen fstr wb+ when (gzf == nullPtr) $+ fail $ "problem gzopening file for write: " ++ f+ mapM_ (gzWriteToGzf gzf) pss `catch`+ \ _ -> fail $ "problem gzwriting file: " ++ f+ c_gzclose gzf++gzWriteToGzf :: Ptr () -> B.ByteString -> IO ()+gzWriteToGzf gzf ps+ = case BI.toForeignPtr ps of+ (_, _, 0) -> return ()+ (x, s, l) -> do lw <- withForeignPtr x $+ \ p -> c_gzwrite gzf (p `plusPtr` s) (fromIntegral l)+ when (fromIntegral lw /= l) $ fail $ "problem in gzWriteToGzf"++mmapFilePS :: FilePath -> IO B.ByteString+mmapFilePS f+ = do x <- mmapFileByteString f Nothing `catch`+ (\ _ ->+ do size <- fileSize `fmap` getSymbolicLinkStatus f+ if size == 0 then return B.empty else+ performGC >> mmapFileByteString f Nothing)+ return x+mmapFilePS = B.readFile++foreign import ccall unsafe "static fpstring.h conv_to_hex"+ conv_to_hex :: Ptr Word8 -> Ptr Word8 -> CInt -> IO ()++fromPS2Hex :: B.ByteString -> B.ByteString+fromPS2Hex ps+ = case BI.toForeignPtr ps of+ (x, s, l) -> BI.unsafeCreate (2 * l) $+ \ p ->+ withForeignPtr x $+ \ f -> conv_to_hex p (f `plusPtr` s) $ fromIntegral l++foreign import ccall unsafe "static fpstring.h conv_from_hex"+ conv_from_hex :: Ptr Word8 -> Ptr Word8 -> CInt -> IO ()++fromHex2PS :: B.ByteString -> B.ByteString+fromHex2PS ps+ = case BI.toForeignPtr ps of+ (x, s, l) -> BI.unsafeCreate (l `div` 2) $+ \ p ->+ withForeignPtr x $+ \ f -> conv_from_hex p (f `plusPtr` s) (fromIntegral $ l `div` 2)++betweenLinesPS ::+ B.ByteString ->+ B.ByteString -> B.ByteString -> Maybe (B.ByteString)+betweenLinesPS start end ps+ = case break (start ==) (linesPS ps) of+ (_, _ : rest@(bs1 : _)) -> case BI.toForeignPtr bs1 of+ (ps1, s1, _) -> case break (end ==) rest of+ (_, bs2 : _) -> case BI.toForeignPtr bs2+ of+ (_, s2, _) -> Just $+ fromForeignPtr+ ps1+ s1+ (s2+ -+ s1)+ _ -> Nothing+ _ -> Nothing++break_after_nth_newline ::+ Int -> B.ByteString -> Maybe (B.ByteString, B.ByteString)+break_after_nth_newline 0 the_ps+ | B.null the_ps = Just (B.empty, B.empty)+break_after_nth_newline n the_ps+ = case BI.toForeignPtr the_ps of+ (fp, the_s, l) -> unsafePerformIO $+ withForeignPtr fp $+ \ p ->+ do let findit 0 s | s == end = return $ Just (the_ps, B.empty)+ findit _ s | s == end = return Nothing+ findit 0 s+ = let left_l = s - the_s in+ return $+ Just+ (fromForeignPtr fp the_s left_l,+ fromForeignPtr fp s (l - left_l))+ findit i s+ = do w <- peekElemOff p s+ if w == nl then findit (i - 1) (s + 1) else+ findit i (s + 1)+ nl = BI.c2w '\n'+ end = the_s + l+ findit n the_s++break_before_nth_newline ::+ Int -> B.ByteString -> (B.ByteString, B.ByteString)+break_before_nth_newline 0 the_ps+ | B.null the_ps = (B.empty, B.empty)+break_before_nth_newline n the_ps+ = case BI.toForeignPtr the_ps of+ (fp, the_s, l) -> unsafePerformIO $+ withForeignPtr fp $+ \ p ->+ do let findit _ s | s == end = return (the_ps, B.empty)+ findit i s+ = do w <- peekElemOff p s+ if w == nl then+ if i == 0 then+ let left_l = s - the_s in+ return+ (fromForeignPtr fp the_s left_l,+ fromForeignPtr fp s (l - left_l))+ else findit (i - 1) (s + 1)+ else findit i (s + 1)+ nl = BI.c2w '\n'+ end = the_s + l+ findit n the_s
@@ -0,0 +1,3 @@+{-# LANGUAGE CApiFFI #-}+foo = capi+
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,72 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 1 1 4 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CApiFFI.hs" 1 1 1 1+ , SrcSpan "tests/examples/CApiFFI.hs" 2 1 2 1+ , SrcSpan "tests/examples/CApiFFI.hs" 2 1 2 1+ , SrcSpan "tests/examples/CApiFFI.hs" 2 1 2 1+ , SrcSpan "tests/examples/CApiFFI.hs" 4 1 4 1+ , SrcSpan "tests/examples/CApiFFI.hs" 4 1 4 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 1 1 1 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CApiFFI.hs" 1 1 1 13+ , SrcSpan "tests/examples/CApiFFI.hs" 1 22 1 25+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 1 14 1 21+ , srcInfoPoints = []+ }+ "CApiFFI"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 2 1 2 11+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 2 1 2 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 2 1 2 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 2 5 2 11+ , srcInfoPoints = [ SrcSpan "tests/examples/CApiFFI.hs" 2 5 2 6 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 2 7 2 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 2 7 2 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CApiFFI.hs" 2 7 2 11+ , srcInfoPoints = []+ }+ "capi"))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,2 @@+{-# LANGUAGE CApiFFI #-}+foo = capi
@@ -0,0 +1,2 @@+#line 1 "Main.hs"+#line 2 "Main.hs"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/CStyleLinePragmas.hs" 1 1) "Parse error: #"
@@ -0,0 +1,2 @@+ParseFailed+ (SrcLoc "tests/examples/CStyleLinePragmas.hs" 1 1) "Parse error: #"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/CStyleLinePragmas.hs" 1 1) "Parse error: #"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/CStyleLinePragmas.hs" 1 1) "Parse error: #"
@@ -0,0 +1,2 @@+f :: Ord (i Int) => i Int -> i Int+f = undefined
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,228 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 1 3 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 1 1 1+ , SrcSpan "tests/examples/ClassContext.hs" 1 1 1 1+ , SrcSpan "tests/examples/ClassContext.hs" 1 1 1 1+ , SrcSpan "tests/examples/ClassContext.hs" 2 1 2 1+ , SrcSpan "tests/examples/ClassContext.hs" 3 1 3 1+ , SrcSpan "tests/examples/ClassContext.hs" 3 1 3 1+ ]+ }+ Nothing+ []+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 1 1 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 3 1 5 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 1 1 2+ , srcInfoPoints = []+ }+ "f"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 6 1 35+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 6 1 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 18 1 20 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 6 1 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 18 1 20 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 6 1 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 18 1 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 6 1 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 18 1 20 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 6 1 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 6 1 9+ , srcInfoPoints = []+ }+ "Ord")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 10 1 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 10 1 11+ , SrcSpan "tests/examples/ClassContext.hs" 1 16 1 17+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 11 1 16+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassContext.hs" 1 11 1 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassContext.hs" 1 11 1 12+ , srcInfoPoints = []+ }+ "i"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassContext.hs" 1 13 1 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassContext.hs" 1 13 1 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassContext.hs" 1 13 1 16+ , srcInfoPoints = []+ }+ "Int")))))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 21 1 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 1 27 1 29 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 21 1 26+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 21 1 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 21 1 22+ , srcInfoPoints = []+ }+ "i"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 23 1 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 23 1 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 23 1 26+ , srcInfoPoints = []+ }+ "Int"))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 30 1 35+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 30 1 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 30 1 31+ , srcInfoPoints = []+ }+ "i"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 32 1 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 32 1 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 1 32 1 35+ , srcInfoPoints = []+ }+ "Int"))))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 2 1 2 14+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 2 1 2 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 2 1 2 2+ , srcInfoPoints = []+ }+ "f"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 2 3 2 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassContext.hs" 2 3 2 4 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 2 5 2 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 2 5 2 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassContext.hs" 2 5 2 14+ , srcInfoPoints = []+ }+ "undefined"))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,2 @@+f :: Ord (i Int) => i Int -> i Int+f = undefined
@@ -0,0 +1,6 @@++class C1 a where+ toString :: a -> String++t1 :: String+t1 = "Hello"
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,204 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 1 7 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 1 2 1+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 1 2 1+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 1 2 1+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 1 5 1+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 1 6 1+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 7 1 7 1+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 7 1 7 1+ ]+ }+ Nothing+ []+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 1 3 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 1 2 6+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 12 2 17+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 5 3 5+ , SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 1 5 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 7 2 11+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 7 2 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 7 2 9+ , srcInfoPoints = []+ }+ "C1"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 10 2 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 2 10 2 11+ , srcInfoPoints = []+ }+ "a")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 5 3 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 14 3 16 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 5 3 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 14 3 16 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 5 3 13+ , srcInfoPoints = []+ }+ "toString"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 17 3 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 19 3 21 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 17 3 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 17 3 18+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 22 3 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 22 3 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 3 22 3 28+ , srcInfoPoints = []+ }+ "String")))))+ ])+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 1 5 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 4 5 6 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 1 5 3+ , srcInfoPoints = []+ }+ "t1"+ ]+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 7 5 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 7 5 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 5 7 5 13+ , srcInfoPoints = []+ }+ "String")))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 1 6 13+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 1 6 3+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 1 6 3+ , srcInfoPoints = []+ }+ "t1"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 4 6 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 4 6 5 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 6 6 13+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassDeclSrcSpan.hs" 6 6 6 13+ , srcInfoPoints = []+ }+ "Hello"+ "Hello")))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+class C1 a where+ toString :: a -> String++t1 :: String+t1 = "Hello"
@@ -0,0 +1,17 @@+module ClassInstType where++class Dir d where+ localDir :: d -> IO FilePath++instance Dir Directory where+ localDir (Local f) = return f++ localDir (Darcs {url=url,darcsVersion=Patch patch,subDirectory=subDir}) = do+ tmp <- createTempDir 0 "haskelld"+ darcsOut <- runDarcsCommand tmp "get" ["--lazy","--to-match","hash "++ patch,url,"fs"]+ print darcsOut+ let (ExitSuccess,"",out) = darcsOut+ print out+ return $ tmp </> "fs" </> subDir++type URL = String
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1420 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 1 1 18 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 1 1 1 1+ , SrcSpan "tests/examples/ClassInstType.hs" 1 1 1 1+ , SrcSpan "tests/examples/ClassInstType.hs" 3 1 3 1+ , SrcSpan "tests/examples/ClassInstType.hs" 6 1 6 1+ , SrcSpan "tests/examples/ClassInstType.hs" 17 1 17 1+ , SrcSpan "tests/examples/ClassInstType.hs" 18 1 18 1+ , SrcSpan "tests/examples/ClassInstType.hs" 18 1 18 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 1 1 1 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 1 1 1 7+ , SrcSpan "tests/examples/ClassInstType.hs" 1 22 1 27+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 1 8 1 21+ , srcInfoPoints = []+ }+ "ClassInstType")+ Nothing+ Nothing))+ []+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 3 1 4 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 3 1 3 6+ , SrcSpan "tests/examples/ClassInstType.hs" 3 13 3 18+ , SrcSpan "tests/examples/ClassInstType.hs" 4 3 4 3+ , SrcSpan "tests/examples/ClassInstType.hs" 6 1 6 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 3 7 3 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 3 7 3 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 3 7 3 10+ , srcInfoPoints = []+ }+ "Dir"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 3 11 3 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 3 11 3 12+ , srcInfoPoints = []+ }+ "d")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 3 4 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 4 12 4 14 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 3 4 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 4 12 4 14 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 3 4 11+ , srcInfoPoints = []+ }+ "localDir"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 15 4 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 4 17 4 19 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 15 4 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 15 4 16+ , srcInfoPoints = []+ }+ "d"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 20 4 31+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 20 4 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 4 20 4 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 4 20 4 22+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 4 23 4 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 4 23 4 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 4 23 4 31+ , srcInfoPoints = []+ }+ "FilePath"))))))+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 1 17 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 6 1 6 9+ , SrcSpan "tests/examples/ClassInstType.hs" 6 24 6 29+ , SrcSpan "tests/examples/ClassInstType.hs" 7 3 7 3+ , SrcSpan "tests/examples/ClassInstType.hs" 9 3 9 3+ , SrcSpan "tests/examples/ClassInstType.hs" 17 1 17 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 10 6 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 10 6 23+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 10 6 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 10 6 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 10 6 13+ , srcInfoPoints = []+ }+ "Dir")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 14 6 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 14 6 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 6 14 6 23+ , srcInfoPoints = []+ }+ "Directory")))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 3 15 37+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 3 15 37+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 3 7 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 3 7 11+ , srcInfoPoints = []+ }+ "localDir")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 12 7 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 7 12 7 13+ , SrcSpan "tests/examples/ClassInstType.hs" 7 20 7 21+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 13 7 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 13 7 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 13 7 18+ , srcInfoPoints = []+ }+ "Local"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 19 7 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 19 7 20+ , srcInfoPoints = []+ }+ "f")+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 22 7 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 7 22 7 23 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 7 24 7 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 24 7 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 24 7 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 24 7 30+ , srcInfoPoints = []+ }+ "return")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 31 7 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 31 7 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 7 31 7 32+ , srcInfoPoints = []+ }+ "f")))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 9 3 15 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 9 3 9 11+ , srcInfoPoints = []+ }+ "localDir")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 9 12 9 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 9 12 9 13+ , SrcSpan "tests/examples/ClassInstType.hs" 9 73 9 74+ ]+ }+ (PRec+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 9 13 9 73+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 9 19 9 20+ , SrcSpan "tests/examples/ClassInstType.hs" 9 27 9 28+ , SrcSpan "tests/examples/ClassInstType.hs" 9 52 9 53+ , SrcSpan "tests/examples/ClassInstType.hs" 9 72 9 73+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 13 9 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 13 9 18+ , srcInfoPoints = []+ }+ "Darcs"))+ [ PFieldPat+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 20 9 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 9 23 9 24 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 20 9 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 20 9 23+ , srcInfoPoints = []+ }+ "url"))+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 24 9 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 24 9 27+ , srcInfoPoints = []+ }+ "url"))+ , PFieldPat+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 28 9 52+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 9 40 9 41 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 28 9 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 28 9 40+ , srcInfoPoints = []+ }+ "darcsVersion"))+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 41 9 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 41 9 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 9 41 9 46+ , srcInfoPoints = []+ }+ "Patch"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 47 9 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 9 47 9 52+ , srcInfoPoints = []+ }+ "patch")+ ])+ , PFieldPat+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 53 9 72+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 9 65 9 66 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 53 9 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 53 9 65+ , srcInfoPoints = []+ }+ "subDirectory"))+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 66 9 72+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 66 9 72+ , srcInfoPoints = []+ }+ "subDir"))+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 75 15 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 9 75 9 76 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 9 77 15 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 9 77 9 79+ , SrcSpan "tests/examples/ClassInstType.hs" 10 5 10 5+ , SrcSpan "tests/examples/ClassInstType.hs" 11 5 11 5+ , SrcSpan "tests/examples/ClassInstType.hs" 12 5 12 5+ , SrcSpan "tests/examples/ClassInstType.hs" 13 5 13 5+ , SrcSpan "tests/examples/ClassInstType.hs" 14 5 14 5+ , SrcSpan "tests/examples/ClassInstType.hs" 15 5 15 5+ , SrcSpan "tests/examples/ClassInstType.hs" 17 1 17 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 10 5 10 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 10 9 10 11 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 10 5 10 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 10 5 10 8+ , srcInfoPoints = []+ }+ "tmp"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 10 12 10 38+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 10 12 10 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 10 12 10 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 10 12 10 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 10+ 12+ 10+ 25+ , srcInfoPoints = []+ }+ "createTempDir")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 10 26 10 27+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 10 26 10 27+ , srcInfoPoints = []+ }+ 0+ "0")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 10 28 10 38+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 10 28 10 38+ , srcInfoPoints = []+ }+ "haskelld"+ "haskelld")))+ , Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 11 5 11 91+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 11 14 11 16 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 11 5 11 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 11 5 11 13+ , srcInfoPoints = []+ }+ "darcsOut"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 11 17 11 91+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 11 17 11 42+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 17 11 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 17 11 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 17+ 11+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 17+ 11+ 32+ , srcInfoPoints = []+ }+ "runDarcsCommand")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 33 11 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 33+ 11+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 33+ 11+ 36+ , srcInfoPoints = []+ }+ "tmp"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 37 11 42+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 37 11 42+ , srcInfoPoints = []+ }+ "get"+ "get")))+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 11 43 11 91+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ClassInstType.hs" 11 43 11 44+ , SrcSpan+ "tests/examples/ClassInstType.hs" 11 52 11 53+ , SrcSpan+ "tests/examples/ClassInstType.hs" 11 65 11 66+ , SrcSpan+ "tests/examples/ClassInstType.hs" 11 81 11 82+ , SrcSpan+ "tests/examples/ClassInstType.hs" 11 85 11 86+ , SrcSpan+ "tests/examples/ClassInstType.hs" 11 90 11 91+ ]+ }+ [ Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 44 11 52+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 44 11 52+ , srcInfoPoints = []+ }+ "--lazy"+ "--lazy")+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 53 11 65+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 53 11 65+ , srcInfoPoints = []+ }+ "--to-match"+ "--to-match")+ , InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 66 11 81+ , srcInfoPoints = []+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 66 11 73+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 66+ 11+ 73+ , srcInfoPoints = []+ }+ "hash "+ "hash "))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 73 11 75+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 73+ 11+ 75+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 73+ 11+ 75+ , srcInfoPoints = []+ }+ "++")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 76 11 81+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 76+ 11+ 81+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 76+ 11+ 81+ , srcInfoPoints = []+ }+ "patch")))+ , Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 82 11 85+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 82 11 85+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 11+ 82+ 11+ 85+ , srcInfoPoints = []+ }+ "url"))+ , Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 86 11 90+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 11 86 11 90+ , srcInfoPoints = []+ }+ "fs"+ "fs")+ ]))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 12 5 12 19+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 12 5 12 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 12 5 12 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 12 5 12 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 12 5 12 10+ , srcInfoPoints = []+ }+ "print")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 12 11 12 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 12 11 12 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 12 11 12 19+ , srcInfoPoints = []+ }+ "darcsOut"))))+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 13 5 13 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 13 5 13 8 ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 13 9 13 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 13 9 13 9+ , SrcSpan "tests/examples/ClassInstType.hs" 14 5 14 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 13 9 13 40+ , srcInfoPoints = []+ }+ (PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 13 9 13 29+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ClassInstType.hs" 13 9 13 10+ , SrcSpan+ "tests/examples/ClassInstType.hs" 13 21 13 22+ , SrcSpan+ "tests/examples/ClassInstType.hs" 13 24 13 25+ , SrcSpan+ "tests/examples/ClassInstType.hs" 13 28 13 29+ ]+ }+ Boxed+ [ PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 10+ 13+ 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 10+ 13+ 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 10+ 13+ 21+ , srcInfoPoints = []+ }+ "ExitSuccess"))+ []+ , PLit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 22+ 13+ 24+ , srcInfoPoints = []+ }+ (Signless+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 22+ 13+ 24+ , srcInfoPoints = []+ })+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 22+ 13+ 24+ , srcInfoPoints = []+ }+ ""+ "")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 25+ 13+ 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 25+ 13+ 28+ , srcInfoPoints = []+ }+ "out")+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 13 30 13 40+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ClassInstType.hs" 13 30 13 31+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 13 32 13 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 32+ 13+ 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 13+ 32+ 13+ 40+ , srcInfoPoints = []+ }+ "darcsOut"))))+ Nothing+ ])+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 14 5 14 14+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 14 5 14 14+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 14 5 14 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 14 5 14 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 14 5 14 10+ , srcInfoPoints = []+ }+ "print")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 14 11 14 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 14 11 14 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 14 11 14 14+ , srcInfoPoints = []+ }+ "out"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 15 5 15 37+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 15 5 15 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 15 5 15 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 5 15 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 5 15 11+ , srcInfoPoints = []+ }+ "return")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 15 12 15 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 12 15 13+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 12 15 13+ , srcInfoPoints = []+ }+ "$")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 15 14 15 37+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 14 15 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 14 15 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 15+ 14+ 15+ 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 15+ 14+ 15+ 17+ , srcInfoPoints = []+ }+ "tmp")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 18 15 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 15+ 18+ 15+ 21+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 15+ 18+ 15+ 21+ , srcInfoPoints = []+ }+ "</>")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 22 15 26+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 15+ 22+ 15+ 26+ , srcInfoPoints = []+ }+ "fs"+ "fs")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 27 15 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 27 15 30+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 15+ 27+ 15+ 30+ , srcInfoPoints = []+ }+ "</>")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 31 15 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs" 15 31 15 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ClassInstType.hs"+ 15+ 31+ 15+ 37+ , srcInfoPoints = []+ }+ "subDir")))))+ ]))+ Nothing+ ])+ ])+ , TypeDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 17 1 17 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClassInstType.hs" 17 1 17 5+ , SrcSpan "tests/examples/ClassInstType.hs" 17 10 17 11+ ]+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 17 6 17 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ClassInstType.hs" 17 6 17 9+ , srcInfoPoints = []+ }+ "URL"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 17 12 17 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 17 12 17 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClassInstType.hs" 17 12 17 18+ , srcInfoPoints = []+ }+ "String")))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,19 @@+module ClassInstType where++class Dir d where+ localDir :: d -> IO FilePath++instance Dir Directory where+ localDir (Local f) = return f+ localDir+ (Darcs{url = url, darcsVersion = Patch patch,+ subDirectory = subDir})+ = do tmp <- createTempDir 0 "haskelld"+ darcsOut <- runDarcsCommand tmp "get"+ ["--lazy", "--to-match", "hash " ++ patch, url, "fs"]+ print darcsOut+ let (ExitSuccess, "", out) = darcsOut+ print out+ return $ tmp </> "fs" </> subDir++type URL = String
@@ -0,0 +1,8 @@+{-# LANGUAGE TypeFamilies, DataKinds #-}++module ClosedTypeFamily where++type family Eq x y where+ Eq x x = True+ Eq x y = False+
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,293 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 1 9 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 1 1 1+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 3 1 3 1+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 3 1 3 1+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 1 5 1+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 9 1 9 1+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 9 1 9 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 3 1 3 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClosedTypeFamily.hs" 3 1 3 7+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 3 25 3 30+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 3 8 3 24+ , srcInfoPoints = []+ }+ "ClosedTypeFamily")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 1 1 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 1 1 13+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 26 1 27+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 38 1 41+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 14 1 26+ , srcInfoPoints = []+ }+ "TypeFamilies"+ , Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 1 28 1 37+ , srcInfoPoints = []+ }+ "DataKinds"+ ]+ ]+ []+ [ ClosedTypeFamDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 1 5 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 1 5 5+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 6 5 12+ , SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 20 5 25+ ]+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 13 5 19+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 13 5 17+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 13 5 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 13 5 15+ , srcInfoPoints = []+ }+ "Eq"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 16 5 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 16 5 17+ , srcInfoPoints = []+ }+ "x")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ "y")))+ Nothing+ Nothing+ [ TypeEqn+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 3 6 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 10 6 11 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 3 6 9+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 3 6 7+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 3 6 5+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 3 6 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 3 6 5+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 6 6 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 6 6 7+ , srcInfoPoints = []+ }+ "x")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 8 6 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 8 6 9+ , srcInfoPoints = []+ }+ "x")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 12 6 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 12 6 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 6 12 6 16+ , srcInfoPoints = []+ }+ "True")))+ , TypeEqn+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 3 7 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 10 7 11 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 3 7 9+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 3 7 7+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 3 7 5+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 3 7 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 3 7 5+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 6 7 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 6 7 7+ , srcInfoPoints = []+ }+ "x")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 8 7 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 8 7 9+ , srcInfoPoints = []+ }+ "y")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 12 7 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 12 7 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ClosedTypeFamily.hs" 7 12 7 17+ , srcInfoPoints = []+ }+ "False")))+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,6 @@+{-# LANGUAGE TypeFamilies, DataKinds #-}+module ClosedTypeFamily where++type family Eq x y where+ Eq x x = True+ Eq x y = False
@@ -0,0 +1,6 @@+module Completesig03A where++data A = A | B++{-# COMPLETE A #-}+
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,123 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 1 1 7 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Completesig03A.hs" 1 1 1 1+ , SrcSpan "tests/examples/Completesig03A.hs" 1 1 1 1+ , SrcSpan "tests/examples/Completesig03A.hs" 3 1 3 1+ , SrcSpan "tests/examples/Completesig03A.hs" 5 1 5 1+ , SrcSpan "tests/examples/Completesig03A.hs" 7 1 7 1+ , SrcSpan "tests/examples/Completesig03A.hs" 7 1 7 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 1 1 1 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Completesig03A.hs" 1 1 1 7+ , SrcSpan "tests/examples/Completesig03A.hs" 1 23 1 28+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 1 8 1 22+ , srcInfoPoints = []+ }+ "Completesig03A")+ Nothing+ Nothing))+ []+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 3 1 3 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Completesig03A.hs" 3 8 3 9+ , SrcSpan "tests/examples/Completesig03A.hs" 3 12 3 13+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 3 1 3 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 3 6 3 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 3 6 3 7+ , srcInfoPoints = []+ }+ "A"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Completesig03A.hs" 3 10 3 11+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Completesig03A.hs" 3 10 3 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Completesig03A.hs" 3 10 3 11+ , srcInfoPoints = []+ }+ "A")+ [])+ , QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Completesig03A.hs" 3 14 3 15+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Completesig03A.hs" 3 14 3 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Completesig03A.hs" 3 14 3 15+ , srcInfoPoints = []+ }+ "B")+ [])+ ]+ []+ , CompletePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Completesig03A.hs" 5 1 5 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Completesig03A.hs" 5 1 5 13+ , SrcSpan "tests/examples/Completesig03A.hs" 5 16 5 19+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Completesig03A.hs" 5 14 5 15+ , srcInfoPoints = []+ }+ "A"+ ]+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,6 @@+module Completesig03A where++data A = A+ | B++{-# COMPLETE A #-}
@@ -0,0 +1,10 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}+class Foo a where++data Bar a+type Bazable a b = (Bar a ~ Maybe b)++baz :: Bazable a b => a -> a+baz = id
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,493 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 1 1 11 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 1 1 1 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 2 1 2 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 3 1 3 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 4 1 4 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 4 1 4 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 4 1 4 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 6 1 6 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 7 1 7 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 9 1 9 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 10 1 10 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 11 1 11 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 11 1 11 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 1 1 1 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 1 1 1 13+ , SrcSpan "tests/examples/ConstraintKinds.hs" 1 27 1 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 1 14 1 26+ , srcInfoPoints = []+ }+ "TypeFamilies"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 2 1 2 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 2 1 2 13+ , SrcSpan "tests/examples/ConstraintKinds.hs" 2 30 2 33+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 2 14 2 29+ , srcInfoPoints = []+ }+ "ConstraintKinds"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 3 1 3 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 3 1 3 13+ , SrcSpan "tests/examples/ConstraintKinds.hs" 3 36 3 39+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 3 14 3 35+ , srcInfoPoints = []+ }+ "MultiParamTypeClasses"+ ]+ ]+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ConstraintKinds.hs" 4 1 6 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 4 1 4 6+ , SrcSpan "tests/examples/ConstraintKinds.hs" 4 13 4 18+ , SrcSpan "tests/examples/ConstraintKinds.hs" 6 1 6 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 6 1 6 1+ , SrcSpan "tests/examples/ConstraintKinds.hs" 6 0 6 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 4 7 4 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 4 7 4 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 4 7 4 10+ , srcInfoPoints = []+ }+ "Foo"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 4 11 4 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 4 11 4 12+ , srcInfoPoints = []+ }+ "a")))+ []+ (Just [])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ConstraintKinds.hs" 6 1 6 5+ , srcInfoPoints = []+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ConstraintKinds.hs" 6 1 6 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 6 6 6 11+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ConstraintKinds.hs" 6 6 6 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ConstraintKinds.hs" 6 6 6 9+ , srcInfoPoints = []+ }+ "Bar"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 6 10 6 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 6 10 6 11+ , srcInfoPoints = []+ }+ "a")))+ []+ []+ , TypeDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 1 7 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 7 1 7 5+ , SrcSpan "tests/examples/ConstraintKinds.hs" 7 18 7 19+ ]+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 6 7 17+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 6 7 15+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 6 7 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 6 7 13+ , srcInfoPoints = []+ }+ "Bazable"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ "a")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 16 7 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 16 7 17+ , srcInfoPoints = []+ }+ "b")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 20 7 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 7 20 7 21+ , SrcSpan "tests/examples/ConstraintKinds.hs" 7 36 7 37+ ]+ }+ (TyEquals+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 21 7 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 7 27 7 28 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 21 7 26+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 21 7 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 21 7 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 21 7 24+ , srcInfoPoints = []+ }+ "Bar")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 25 7 26+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 29 7 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 29 7 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 29 7 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 29 7 34+ , srcInfoPoints = []+ }+ "Maybe")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 35 7 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 7 35 7 36+ , srcInfoPoints = []+ }+ "b")))))+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 1 9 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 9 5 9 7 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ConstraintKinds.hs" 9 1 9 4+ , srcInfoPoints = []+ }+ "baz"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 29+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 9 20 9 22 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 9 20 9 22 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 9 20 9 22 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 9 20 9 22 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 9 20 9 22 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 8 9 15+ , srcInfoPoints = []+ }+ "Bazable")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 16 9 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 16 9 17+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 18 9 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 18 9 19+ , srcInfoPoints = []+ }+ "b"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 23 9 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 9 25 9 27 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 23 9 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 23 9 24+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 28 9 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 9 28 9 29+ , srcInfoPoints = []+ }+ "a"))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 10 1 10 9+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 10 1 10 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 10 1 10 4+ , srcInfoPoints = []+ }+ "baz"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 10 5 10 9+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds.hs" 10 5 10 6 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 10 7 10 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 10 7 10 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds.hs" 10 7 10 9+ , srcInfoPoints = []+ }+ "id"))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,12 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}++class Foo a where++data Bar a++type Bazable a b = (Bar a ~ Maybe b)++baz :: Bazable a b => a -> a+baz = id
@@ -0,0 +1,6 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE RankNTypes #-}++data Dict p where+ Dict :: p => Dict p
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,216 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 1 1 7 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 1 1 1 1+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 2 1 2 1+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 3 1 3 1+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 5 1 5 1+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 5 1 5 1+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 5 1 5 1+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 7 1 7 1+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 7 1 7 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 1 1 1 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 1 1 1 13+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 1 30 1 33+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 1 14 1 29+ , srcInfoPoints = []+ }+ "ConstraintKinds"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 2 1 2 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 2 1 2 13+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 2 20 2 23+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 2 14 2 19+ , srcInfoPoints = []+ }+ "GADTs"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 3 1 3 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 3 1 3 13+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 3 25 3 28+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 3 14 3 24+ , srcInfoPoints = []+ }+ "RankNTypes"+ ]+ ]+ []+ [ GDataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 1 7 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 13 5 18+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 6 5 6 5+ , SrcSpan "tests/examples/ConstraintKinds2.hs" 7 1 7 0+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 1 5 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 6 5 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 6 5 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 6 5 10+ , srcInfoPoints = []+ }+ "Dict"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 11 5 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 5 11 5 12+ , srcInfoPoints = []+ }+ "p")))+ Nothing+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 5 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 10 6 12 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 5 6 9+ , srcInfoPoints = []+ }+ "Dict")+ Nothing+ Nothing+ Nothing+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 13 6 24+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 13 6 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 15 6 17 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 13 6 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 15 6 17 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 13 6 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 15 6 17 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 13 6 14+ , srcInfoPoints = []+ }+ "p")))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 18 6 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 18 6 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 18 6 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 18 6 22+ , srcInfoPoints = []+ }+ "Dict")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 23 6 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds2.hs" 6 23 6 24+ , srcInfoPoints = []+ }+ "p"))))+ ]+ []+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,6 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE RankNTypes #-}++data Dict p where+ Dict :: p => Dict p
@@ -0,0 +1,7 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}++class Foo c a where++ bar :: (c a) => a -> a+
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,246 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 1 1 8 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 1 1 1 1+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 2 1 2 1+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 4 1 4 1+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 4 1 4 1+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 4 1 4 1+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 8 1 8 1+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 8 1 8 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 1 1 1 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 1 1 1 13+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 1 30 1 33+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 1 14 1 29+ , srcInfoPoints = []+ }+ "ConstraintKinds"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 2 1 2 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 2 1 2 13+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 2 36 2 39+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 2 14 2 35+ , srcInfoPoints = []+ }+ "MultiParamTypeClasses"+ ]+ ]+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 1 6 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 1 4 6+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 4 15 4 20+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 6 3 6 3+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 8 1 8 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 7 4 14+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 7 4 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 7 4 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 7 4 10+ , srcInfoPoints = []+ }+ "Foo"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 11 4 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 11 4 12+ , srcInfoPoints = []+ }+ "c")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ "a")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 3 6 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 7 6 9 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 3 6 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 7 6 9 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 3 6 6+ , srcInfoPoints = []+ }+ "bar"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 10 6 25+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 10 6 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 10 6 11+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 6 14 6 15+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 6 16 6 18+ ]+ }+ (ParenA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 10 6 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 10 6 11+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 6 14 6 15+ , SrcSpan "tests/examples/ConstraintKinds3.hs" 6 16 6 18+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 11 6 14+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 11 6 14+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstraintKinds3.hs" 6 11 6 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstraintKinds3.hs" 6 11 6 12+ , srcInfoPoints = []+ }+ "c"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstraintKinds3.hs" 6 13 6 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstraintKinds3.hs" 6 13 6 14+ , srcInfoPoints = []+ }+ "a")))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 19 6 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 21 6 23 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 19 6 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 19 6 20+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 24 6 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstraintKinds3.hs" 6 24 6 25+ , srcInfoPoints = []+ }+ "a")))))+ ])+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}++class Foo c a where+ bar :: (c a) => a -> a
@@ -0,0 +1,5 @@+{-# LANGUAGE TypeOperators, MultiParamTypeClasses #-}++ins :: (:=>) b h => b :- h++data (:><:) a b = (:><:) a b
@@ -0,0 +1,6 @@+{-# LANGUAGE TypeOperators, MultiParamTypeClasses #-}++ins :: (:=>) b h => b :- h++data :><: a b = :><: a b+
@@ -0,0 +1,354 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 1 1 1 1+ , SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 1 3 1+ , SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 1 3 1+ , SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 1 3 1+ , SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 1 5 1+ , SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 6 1 6 1+ , SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 6 1 6 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 1 1 1 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 1 1 1 13+ , SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 1 27 1 28+ , SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 1 51 1 54+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 1 14 1 27+ , srcInfoPoints = []+ }+ "TypeOperators"+ , Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 1 29 1 50+ , srcInfoPoints = []+ }+ "MultiParamTypeClasses"+ ]+ ]+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 1 3 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 5 3 7+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 1 3 4+ , srcInfoPoints = []+ }+ "ins"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 27+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 20+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 18 3 20+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 20+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 18 3 20+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 20+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 18 3 20+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 20+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 18 3 20+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 20+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 18 3 20+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 13+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 8 3 9+ , SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs"+ 3+ 9+ 3+ 12+ , SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs"+ 3+ 12+ 3+ 13+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs"+ 3+ 9+ 3+ 12+ , srcInfoPoints = []+ }+ ":=>")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 14 3 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 14 3 15+ , srcInfoPoints = []+ }+ "b")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 16 3 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 3 16 3 17+ , srcInfoPoints = []+ }+ "h"))))))+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 21 3 27+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 21 3 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 21 3 22+ , srcInfoPoints = []+ }+ "b"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 23 3 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 23 3 25+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 23 3 25+ , srcInfoPoints = []+ }+ ":-")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 26 3 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 3 26 3 27+ , srcInfoPoints = []+ }+ "h"))))+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 1 5 29+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 5 17 5 18+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 1 5 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 6 5 16+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 6 5 14+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 6 5 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 6 5 7+ , SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 7 5 11+ , SrcSpan+ "tests/examples/ConstructorAndClassOperators.hs" 5 11 5 12+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 7 5 11+ , srcInfoPoints = []+ }+ ":><:"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 13 5 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 13 5 14+ , srcInfoPoints = []+ }+ "a")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 15 5 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 15 5 16+ , srcInfoPoints = []+ }+ "b")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 19 5 29+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 19 5 29+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 20 5 24+ , srcInfoPoints = []+ }+ ":><:")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 26 5 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 26 5 27+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 28 5 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ConstructorAndClassOperators.hs" 5 28 5 29+ , srcInfoPoints = []+ }+ "b")+ ])+ ]+ []+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+{-# LANGUAGE TypeOperators, MultiParamTypeClasses #-}++ins :: (:=>) b h => b :- h++data (:><:) a b = (:><:) a b
@@ -0,0 +1,5 @@+{-# LANGUAGE ConstraintKinds #-}+module ContextOrdering where++foo :: (x m a) => Int+foo = 5
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,208 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ContextOrdering.hs" 1 1 1 1+ , SrcSpan "tests/examples/ContextOrdering.hs" 2 1 2 1+ , SrcSpan "tests/examples/ContextOrdering.hs" 2 1 2 1+ , SrcSpan "tests/examples/ContextOrdering.hs" 4 1 4 1+ , SrcSpan "tests/examples/ContextOrdering.hs" 5 1 5 1+ , SrcSpan "tests/examples/ContextOrdering.hs" 6 1 6 1+ , SrcSpan "tests/examples/ContextOrdering.hs" 6 1 6 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 2 1 2 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ContextOrdering.hs" 2 1 2 7+ , SrcSpan "tests/examples/ContextOrdering.hs" 2 24 2 29+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 2 8 2 23+ , srcInfoPoints = []+ }+ "ContextOrdering")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 1 1 1 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ContextOrdering.hs" 1 1 1 13+ , SrcSpan "tests/examples/ContextOrdering.hs" 1 30 1 33+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 1 14 1 29+ , srcInfoPoints = []+ }+ "ConstraintKinds"+ ]+ ]+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 1 4 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ContextOrdering.hs" 4 5 4 7 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ "foo"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 8 4 22+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 8 4 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ContextOrdering.hs" 4 8 4 9+ , SrcSpan "tests/examples/ContextOrdering.hs" 4 14 4 15+ , SrcSpan "tests/examples/ContextOrdering.hs" 4 16 4 18+ ]+ }+ (ParenA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 8 4 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ContextOrdering.hs" 4 8 4 9+ , SrcSpan "tests/examples/ContextOrdering.hs" 4 14 4 15+ , SrcSpan "tests/examples/ContextOrdering.hs" 4 16 4 18+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 9 4 14+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 9 4 14+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 9 4 14+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 9 4 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ "x"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 11 4 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 11 4 12+ , srcInfoPoints = []+ }+ "m")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ "a")))))))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ContextOrdering.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ "Int"))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 5 1 5 8+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 5 1 5 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 5 1 5 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 5 5 5 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ContextOrdering.hs" 5 5 5 6 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 5 7 5 8+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ContextOrdering.hs" 5 7 5 8+ , srcInfoPoints = []+ }+ 5+ "5")))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+{-# LANGUAGE ConstraintKinds #-}+module ContextOrdering where++foo :: (x m a) => Int+foo = 5
@@ -0,0 +1,6 @@+-- is not ok+instance ( Eq h) => Eq h++-- is ok+instance ( Eq h, Eq h) => Eq h+
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,268 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 1 7 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CxtWhitespace.hs" 2 1 2 1+ , SrcSpan "tests/examples/CxtWhitespace.hs" 2 1 2 1+ , SrcSpan "tests/examples/CxtWhitespace.hs" 2 1 2 1+ , SrcSpan "tests/examples/CxtWhitespace.hs" 5 1 5 1+ , SrcSpan "tests/examples/CxtWhitespace.hs" 7 1 7 1+ , SrcSpan "tests/examples/CxtWhitespace.hs" 7 1 7 1+ ]+ }+ Nothing+ []+ []+ [ InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 1 2 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CxtWhitespace.hs" 2 1 2 9 ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 10 2 25+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 10 2 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CxtWhitespace.hs" 2 10 2 11+ , SrcSpan "tests/examples/CxtWhitespace.hs" 2 16 2 17+ , SrcSpan "tests/examples/CxtWhitespace.hs" 2 18 2 20+ ]+ }+ (ParenA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 10 2 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CxtWhitespace.hs" 2 10 2 11+ , SrcSpan "tests/examples/CxtWhitespace.hs" 2 16 2 17+ , SrcSpan "tests/examples/CxtWhitespace.hs" 2 18 2 20+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 12 2 16+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 12 2 16+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 12 2 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 2 12 2 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 2 12 2 14+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 15 2 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 2 15 2 16+ , srcInfoPoints = []+ }+ "h")))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 21 2 25+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 21 2 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 21 2 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 21 2 23+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 24 2 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 2 24 2 25+ , srcInfoPoints = []+ }+ "h"))))+ Nothing+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 1 5 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CxtWhitespace.hs" 5 1 5 9 ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 10 5 31+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 10 5 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/CxtWhitespace.hs" 5 10 5 11+ , SrcSpan "tests/examples/CxtWhitespace.hs" 5 16 5 17+ , SrcSpan "tests/examples/CxtWhitespace.hs" 5 22 5 23+ , SrcSpan "tests/examples/CxtWhitespace.hs" 5 24 5 26+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 12 5 16+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 12 5 16+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 12 5 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 5 12 5 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 5 12 5 14+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 15 5 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 5 15 5 16+ , srcInfoPoints = []+ }+ "h")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 18 5 22+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 18 5 22+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 18 5 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 5 18 5 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 5 18 5 20+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 21 5 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/CxtWhitespace.hs" 5 21 5 22+ , srcInfoPoints = []+ }+ "h")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 27 5 31+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 27 5 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 27 5 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 27 5 29+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 30 5 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/CxtWhitespace.hs" 5 30 5 31+ , srcInfoPoints = []+ }+ "h"))))+ Nothing+ ]+ , [ Comment+ False+ (SrcSpan "tests/examples/CxtWhitespace.hs" 1 1 1 13)+ " is not ok"+ , Comment+ False (SrcSpan "tests/examples/CxtWhitespace.hs" 4 1 4 9) " is ok"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,3 @@+instance (Eq h) => Eq h++instance (Eq h, Eq h) => Eq h
@@ -0,0 +1,4 @@+{-# LANGUAGE TypeOperators #-}+module DataHeadParen where++data (a1 :< a2) = Foo
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,129 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataHeadParen.hs" 1 1 1 1+ , SrcSpan "tests/examples/DataHeadParen.hs" 2 1 2 1+ , SrcSpan "tests/examples/DataHeadParen.hs" 2 1 2 1+ , SrcSpan "tests/examples/DataHeadParen.hs" 4 1 4 1+ , SrcSpan "tests/examples/DataHeadParen.hs" 5 1 5 1+ , SrcSpan "tests/examples/DataHeadParen.hs" 5 1 5 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 2 1 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataHeadParen.hs" 2 1 2 7+ , SrcSpan "tests/examples/DataHeadParen.hs" 2 22 2 27+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 2 8 2 21+ , srcInfoPoints = []+ }+ "DataHeadParen")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 1 1 1 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataHeadParen.hs" 1 1 1 13+ , SrcSpan "tests/examples/DataHeadParen.hs" 1 28 1 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 1 14 1 27+ , srcInfoPoints = []+ }+ "TypeOperators"+ ]+ ]+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 1 4 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataHeadParen.hs" 4 18 4 19 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 1 4 5+ , srcInfoPoints = []+ })+ Nothing+ (DHParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 6 4 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataHeadParen.hs" 4 6 4 7+ , SrcSpan "tests/examples/DataHeadParen.hs" 4 15 4 16+ ]+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 7 4 15+ , srcInfoPoints = []+ }+ (DHInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 7 4 15+ , srcInfoPoints = []+ }+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 7 4 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 7 4 9+ , srcInfoPoints = []+ }+ "a1"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 10 4 12+ , srcInfoPoints = []+ }+ ":<"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 13 4 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 13 4 15+ , srcInfoPoints = []+ }+ "a2"))))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 20 4 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 20 4 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataHeadParen.hs" 4 20 4 23+ , srcInfoPoints = []+ }+ "Foo")+ [])+ ]+ []+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE TypeOperators #-}+module DataHeadParen where++data (a1 :< a2) = Foo
@@ -0,0 +1,34 @@+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE PolyKinds #-}++class C1 (a :: Bool {- 1 -}) where+ c :: proxy a -> Int++class C2 (a :: [ * ])++data Baz = Baz+data Foo = Foo++class C3 (a :: [(Baz, Foo)])++class C4 (a :: ( * ))+++class C5 (a :: App foo baz)++class C6 (a :: (parens))++data X (a :: [*])++x1 = undefined :: X '[Int]+x2 = undefined :: X '[Int, Double]++data Y (a :: (*, Bool))++y1 = undefined :: Y '(Double, True)+y2 = undefined :: Y '(Double, 'False {-comment-})+++z1 = undefined :: X [ a -> b, X '[] ]+z2 = undefined :: Y (a -> b, True)
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1523 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 1 1 35 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 1 1 1 1+ , SrcSpan "tests/examples/DataKinds.hs" 2 1 2 1+ , SrcSpan "tests/examples/DataKinds.hs" 3 1 3 1+ , SrcSpan "tests/examples/DataKinds.hs" 5 1 5 1+ , SrcSpan "tests/examples/DataKinds.hs" 5 1 5 1+ , SrcSpan "tests/examples/DataKinds.hs" 5 1 5 1+ , SrcSpan "tests/examples/DataKinds.hs" 8 1 8 1+ , SrcSpan "tests/examples/DataKinds.hs" 10 1 10 1+ , SrcSpan "tests/examples/DataKinds.hs" 11 1 11 1+ , SrcSpan "tests/examples/DataKinds.hs" 13 1 13 1+ , SrcSpan "tests/examples/DataKinds.hs" 15 1 15 1+ , SrcSpan "tests/examples/DataKinds.hs" 18 1 18 1+ , SrcSpan "tests/examples/DataKinds.hs" 20 1 20 1+ , SrcSpan "tests/examples/DataKinds.hs" 22 1 22 1+ , SrcSpan "tests/examples/DataKinds.hs" 24 1 24 1+ , SrcSpan "tests/examples/DataKinds.hs" 25 1 25 1+ , SrcSpan "tests/examples/DataKinds.hs" 27 1 27 1+ , SrcSpan "tests/examples/DataKinds.hs" 29 1 29 1+ , SrcSpan "tests/examples/DataKinds.hs" 30 1 30 1+ , SrcSpan "tests/examples/DataKinds.hs" 33 1 33 1+ , SrcSpan "tests/examples/DataKinds.hs" 34 1 34 1+ , SrcSpan "tests/examples/DataKinds.hs" 35 1 35 1+ , SrcSpan "tests/examples/DataKinds.hs" 35 1 35 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 1 1 1 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 1 1 1 13+ , SrcSpan "tests/examples/DataKinds.hs" 1 29 1 32+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 1 14 1 28+ , srcInfoPoints = []+ }+ "KindSignatures"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 2 1 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 2 1 2 13+ , SrcSpan "tests/examples/DataKinds.hs" 2 24 2 27+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 2 14 2 23+ , srcInfoPoints = []+ }+ "DataKinds"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 3 1 3 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 3 1 3 13+ , SrcSpan "tests/examples/DataKinds.hs" 3 24 3 27+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 3 14 3 23+ , srcInfoPoints = []+ }+ "PolyKinds"+ ]+ ]+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 1 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 5 1 5 6+ , SrcSpan "tests/examples/DataKinds.hs" 5 30 5 35+ , SrcSpan "tests/examples/DataKinds.hs" 6 5 6 5+ , SrcSpan "tests/examples/DataKinds.hs" 8 1 8 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 7 5 29+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 7 5 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 7 5 9+ , srcInfoPoints = []+ }+ "C1"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 10 5 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 5 10 5 11+ , SrcSpan "tests/examples/DataKinds.hs" 5 13 5 15+ , SrcSpan "tests/examples/DataKinds.hs" 5 28 5 29+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 11 5 12+ , srcInfoPoints = []+ }+ "a")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 16 5 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 16 5 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 5 16 5 20+ , srcInfoPoints = []+ }+ "Bool")))))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 5 6 24+ , srcInfoPoints = [ SrcSpan "tests/examples/DataKinds.hs" 6 7 6 9 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 5 6 24+ , srcInfoPoints = [ SrcSpan "tests/examples/DataKinds.hs" 6 7 6 9 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 5 6 6+ , srcInfoPoints = []+ }+ "c"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 10 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 6 18 6 20 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 10 6 17+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 10 6 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 10 6 15+ , srcInfoPoints = []+ }+ "proxy"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 16 6 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 16 6 17+ , srcInfoPoints = []+ }+ "a")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 21 6 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 21 6 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 6 21 6 24+ , srcInfoPoints = []+ }+ "Int")))))+ ])+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 1 8 22+ , srcInfoPoints = [ SrcSpan "tests/examples/DataKinds.hs" 8 1 8 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 7 8 22+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 7 8 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 7 8 9+ , srcInfoPoints = []+ }+ "C2"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 10 8 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 8 10 8 11+ , SrcSpan "tests/examples/DataKinds.hs" 8 13 8 15+ , SrcSpan "tests/examples/DataKinds.hs" 8 21 8 22+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 11 8 12+ , srcInfoPoints = []+ }+ "a")+ (TyList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 16 8 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 8 16 8 17+ , SrcSpan "tests/examples/DataKinds.hs" 8 20 8 21+ ]+ }+ (TyStar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 8 18 8 19+ , srcInfoPoints = []+ }))))+ []+ Nothing+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 10 1 10 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 10 10 10 11 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 10 1 10 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 10 6 10 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 10 6 10 9+ , srcInfoPoints = []+ }+ "Baz"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 10 12 10 15+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 10 12 10 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 10 12 10 15+ , srcInfoPoints = []+ }+ "Baz")+ [])+ ]+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 11 1 11 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 11 10 11 11 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 11 1 11 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 11 6 11 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 11 6 11 9+ , srcInfoPoints = []+ }+ "Foo"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 11 12 11 15+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 11 12 11 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 11 12 11 15+ , srcInfoPoints = []+ }+ "Foo")+ [])+ ]+ []+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 1 13 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 13 1 13 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 7 13 29+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 7 13 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 7 13 9+ , srcInfoPoints = []+ }+ "C3"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 10 13 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 13 10 13 11+ , SrcSpan "tests/examples/DataKinds.hs" 13 13 13 15+ , SrcSpan "tests/examples/DataKinds.hs" 13 28 13 29+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 11 13 12+ , srcInfoPoints = []+ }+ "a")+ (TyList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 16 13 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 13 16 13 17+ , SrcSpan "tests/examples/DataKinds.hs" 13 27 13 28+ ]+ }+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 17 13 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 13 17 13 18+ , SrcSpan "tests/examples/DataKinds.hs" 13 21 13 22+ , SrcSpan "tests/examples/DataKinds.hs" 13 26 13 27+ ]+ }+ Boxed+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 18 13 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 18 13 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 18 13 21+ , srcInfoPoints = []+ }+ "Baz"))+ , TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 23 13 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 23 13 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 13 23 13 26+ , srcInfoPoints = []+ }+ "Foo"))+ ]))))+ []+ Nothing+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 1 15 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 15 1 15 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 7 15 22+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 7 15 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 7 15 9+ , srcInfoPoints = []+ }+ "C4"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 10 15 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 15 10 15 11+ , SrcSpan "tests/examples/DataKinds.hs" 15 13 15 15+ , SrcSpan "tests/examples/DataKinds.hs" 15 21 15 22+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 11 15 12+ , srcInfoPoints = []+ }+ "a")+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 16 15 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 15 16 15 17+ , SrcSpan "tests/examples/DataKinds.hs" 15 20 15 21+ ]+ }+ (TyStar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 15 18 15 19+ , srcInfoPoints = []+ }))))+ []+ Nothing+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 1 18 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 18 1 18 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 7 18 28+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 7 18 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 7 18 9+ , srcInfoPoints = []+ }+ "C5"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 10 18 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 18 10 18 11+ , SrcSpan "tests/examples/DataKinds.hs" 18 13 18 15+ , SrcSpan "tests/examples/DataKinds.hs" 18 27 18 28+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 11 18 12+ , srcInfoPoints = []+ }+ "a")+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 16 18 27+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 16 18 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 16 18 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 16 18 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 16 18 19+ , srcInfoPoints = []+ }+ "App")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 20 18 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 20 18 23+ , srcInfoPoints = []+ }+ "foo")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 24 18 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 18 24 18 27+ , srcInfoPoints = []+ }+ "baz")))))+ []+ Nothing+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 1 20 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 20 1 20 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 7 20 25+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 7 20 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 7 20 9+ , srcInfoPoints = []+ }+ "C6"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 10 20 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 20 10 20 11+ , SrcSpan "tests/examples/DataKinds.hs" 20 13 20 15+ , SrcSpan "tests/examples/DataKinds.hs" 20 24 20 25+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 11 20 12+ , srcInfoPoints = []+ }+ "a")+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 16 20 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 20 16 20 17+ , SrcSpan "tests/examples/DataKinds.hs" 20 23 20 24+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 17 20 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 20 17 20 23+ , srcInfoPoints = []+ }+ "parens")))))+ []+ Nothing+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 1 22 5+ , srcInfoPoints = []+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 1 22 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 6 22 18+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 6 22 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 6 22 7+ , srcInfoPoints = []+ }+ "X"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 8 22 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 22 8 22 9+ , SrcSpan "tests/examples/DataKinds.hs" 22 11 22 13+ , SrcSpan "tests/examples/DataKinds.hs" 22 17 22 18+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 9 22 10+ , srcInfoPoints = []+ }+ "a")+ (TyList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 14 22 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 22 14 22 15+ , SrcSpan "tests/examples/DataKinds.hs" 22 16 22 17+ ]+ }+ (TyStar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 22 15 22 16+ , srcInfoPoints = []+ }))))+ []+ []+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 1 24 27+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 1 24 3+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 1 24 3+ , srcInfoPoints = []+ }+ "x1"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 4 24 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 24 4 24 5 ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 6 24 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 24 16 24 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 6 24 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 6 24 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 6 24 15+ , srcInfoPoints = []+ }+ "undefined")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 19 24 27+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 19 24 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 19 24 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 19 24 20+ , srcInfoPoints = []+ }+ "X")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 21 24 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 24 21 24 22+ , SrcSpan "tests/examples/DataKinds.hs" 24 26 24 27+ ]+ }+ (PromotedList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 21 24 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 24 21 24 22+ , SrcSpan "tests/examples/DataKinds.hs" 24 26 24 27+ ]+ }+ True+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 23 24 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 24 23 24 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 24 23 24 26+ , srcInfoPoints = []+ }+ "Int"))+ ])))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 1 25 35+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 1 25 3+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 1 25 3+ , srcInfoPoints = []+ }+ "x2"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 4 25 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 25 4 25 5 ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 6 25 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 25 16 25 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 6 25 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 6 25 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 6 25 15+ , srcInfoPoints = []+ }+ "undefined")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 19 25 35+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 19 25 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 19 25 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 19 25 20+ , srcInfoPoints = []+ }+ "X")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 21 25 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 25 21 25 22+ , SrcSpan "tests/examples/DataKinds.hs" 25 26 25 27+ , SrcSpan "tests/examples/DataKinds.hs" 25 34 25 35+ ]+ }+ (PromotedList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 21 25 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 25 21 25 22+ , SrcSpan "tests/examples/DataKinds.hs" 25 26 25 27+ , SrcSpan "tests/examples/DataKinds.hs" 25 34 25 35+ ]+ }+ True+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 23 25 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 23 25 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 25 23 25 26+ , srcInfoPoints = []+ }+ "Int"))+ , TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 28 25 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 25 28 25 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 25 28 25 34+ , srcInfoPoints = []+ }+ "Double"))+ ])))))+ Nothing+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 1 27 5+ , srcInfoPoints = []+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 1 27 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 6 27 24+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 6 27 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 6 27 7+ , srcInfoPoints = []+ }+ "Y"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 8 27 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 27 8 27 9+ , SrcSpan "tests/examples/DataKinds.hs" 27 11 27 13+ , SrcSpan "tests/examples/DataKinds.hs" 27 23 27 24+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 9 27 10+ , srcInfoPoints = []+ }+ "a")+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 14 27 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 27 14 27 15+ , SrcSpan "tests/examples/DataKinds.hs" 27 16 27 17+ , SrcSpan "tests/examples/DataKinds.hs" 27 22 27 23+ ]+ }+ Boxed+ [ TyStar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 15 27 16+ , srcInfoPoints = []+ }+ , TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 18 27 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 18 27 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 27 18 27 22+ , srcInfoPoints = []+ }+ "Bool"))+ ])))+ []+ []+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 1 29 36+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 1 29 3+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 1 29 3+ , srcInfoPoints = []+ }+ "y1"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 4 29 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 29 4 29 5 ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 6 29 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 29 16 29 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 6 29 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 6 29 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 6 29 15+ , srcInfoPoints = []+ }+ "undefined")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 19 29 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 19 29 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 19 29 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 19 29 20+ , srcInfoPoints = []+ }+ "Y")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 21 29 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 29 21 29 22+ , SrcSpan "tests/examples/DataKinds.hs" 29 29 29 30+ , SrcSpan "tests/examples/DataKinds.hs" 29 35 29 36+ ]+ }+ (PromotedTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 21 29 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 29 21 29 22+ , SrcSpan "tests/examples/DataKinds.hs" 29 29 29 30+ , SrcSpan "tests/examples/DataKinds.hs" 29 35 29 36+ ]+ }+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 23 29 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 23 29 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 29 23 29 29+ , srcInfoPoints = []+ }+ "Double"))+ , TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 31 29 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 29 31 29 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 29 31 29 35+ , srcInfoPoints = []+ }+ "True"))+ ])))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 1 30 50+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 1 30 3+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 1 30 3+ , srcInfoPoints = []+ }+ "y2"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 4 30 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 30 4 30 5 ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 6 30 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 30 16 30 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 6 30 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 6 30 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 6 30 15+ , srcInfoPoints = []+ }+ "undefined")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 19 30 50+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 19 30 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 19 30 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 19 30 20+ , srcInfoPoints = []+ }+ "Y")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 21 30 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 30 21 30 22+ , SrcSpan "tests/examples/DataKinds.hs" 30 29 30 30+ , SrcSpan "tests/examples/DataKinds.hs" 30 49 30 50+ ]+ }+ (PromotedTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 21 30 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 30 21 30 22+ , SrcSpan "tests/examples/DataKinds.hs" 30 29 30 30+ , SrcSpan "tests/examples/DataKinds.hs" 30 49 30 50+ ]+ }+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 23 30 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 23 30 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 30 23 30 29+ , srcInfoPoints = []+ }+ "Double"))+ , TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 31 30 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 30 31 30 32 ]+ }+ (PromotedCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 30 31 30 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 30 31 30 32 ]+ }+ True+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 30 32 30 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 30 32 30 37+ , srcInfoPoints = []+ }+ "False")))+ ])))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 1 33 38+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 1 33 3+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 1 33 3+ , srcInfoPoints = []+ }+ "z1"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 4 33 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 33 4 33 5 ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 6 33 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 33 16 33 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 6 33 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 6 33 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 6 33 15+ , srcInfoPoints = []+ }+ "undefined")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 19 33 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 19 33 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 19 33 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 19 33 20+ , srcInfoPoints = []+ }+ "X")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 21 33 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 33 21 33 22+ , SrcSpan "tests/examples/DataKinds.hs" 33 29 33 30+ , SrcSpan "tests/examples/DataKinds.hs" 33 37 33 38+ ]+ }+ (PromotedList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 21 33 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 33 21 33 22+ , SrcSpan "tests/examples/DataKinds.hs" 33 29 33 30+ , SrcSpan "tests/examples/DataKinds.hs" 33 37 33 38+ ]+ }+ False+ [ TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 23 33 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 33 25 33 27 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 23 33 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 33 23 33 24+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 28 33 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 33 28 33 29+ , srcInfoPoints = []+ }+ "b"))+ , TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 31 33 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 31 33 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 33 31 33 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 33 31 33 32+ , srcInfoPoints = []+ }+ "X")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 33 33 33 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 33 33 33 34+ , SrcSpan "tests/examples/DataKinds.hs" 33 35 33 36+ ]+ }+ (PromotedList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DataKinds.hs" 33 33 33 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 33 33 33 34+ , SrcSpan "tests/examples/DataKinds.hs" 33 35 33 36+ ]+ }+ True+ []))+ ])))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 1 34 35+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 1 34 3+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 1 34 3+ , srcInfoPoints = []+ }+ "z2"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 4 34 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 34 4 34 5 ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 6 34 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 34 16 34 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 6 34 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 6 34 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 6 34 15+ , srcInfoPoints = []+ }+ "undefined")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 19 34 35+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 19 34 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 19 34 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 19 34 20+ , srcInfoPoints = []+ }+ "Y")))+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 21 34 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 34 21 34 22+ , SrcSpan "tests/examples/DataKinds.hs" 34 28 34 29+ , SrcSpan "tests/examples/DataKinds.hs" 34 34 34 35+ ]+ }+ Boxed+ [ TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 22 34 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds.hs" 34 24 34 26 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 22 34 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 22 34 23+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 27 34 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 27 34 28+ , srcInfoPoints = []+ }+ "b"))+ , TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 30 34 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 30 34 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds.hs" 34 30 34 34+ , srcInfoPoints = []+ }+ "True"))+ ]))))+ Nothing+ ]+ , [ Comment+ True (SrcSpan "tests/examples/DataKinds.hs" 5 21 5 28) " 1 "+ , Comment+ True (SrcSpan "tests/examples/DataKinds.hs" 30 38 30 49) "comment"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,30 @@+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE PolyKinds #-}++class C1 (a :: Bool) where+ c :: proxy a -> Int++class C2 (a :: [*])++data Baz = Baz++data Foo = Foo++class C3 (a :: [(Baz, Foo)])++class C4 (a :: (*))++class C5 (a :: App foo baz)++class C6 (a :: (parens))++data X (a :: [*])+x1 = undefined :: X '[Int]+x2 = undefined :: X '[Int, Double]++data Y (a :: (*, Bool))+y1 = undefined :: Y '(Double, True)+y2 = undefined :: Y '(Double, 'False)+z1 = undefined :: X [a -> b, X '[]]+z2 = undefined :: Y (a -> b, True)
@@ -0,0 +1,9 @@+{-# LANGUAGE DataKinds #-}++data Foo a = Foo++type FooB = Foo "a"++type FooC = Foo 1++instance Show (Foo "bar") where
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,283 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 1 1 10 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds2.hs" 1 1 1 1+ , SrcSpan "tests/examples/DataKinds2.hs" 3 1 3 1+ , SrcSpan "tests/examples/DataKinds2.hs" 3 1 3 1+ , SrcSpan "tests/examples/DataKinds2.hs" 3 1 3 1+ , SrcSpan "tests/examples/DataKinds2.hs" 5 1 5 1+ , SrcSpan "tests/examples/DataKinds2.hs" 7 1 7 1+ , SrcSpan "tests/examples/DataKinds2.hs" 9 1 9 1+ , SrcSpan "tests/examples/DataKinds2.hs" 10 1 10 1+ , SrcSpan "tests/examples/DataKinds2.hs" 10 1 10 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 1 1 1 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds2.hs" 1 1 1 13+ , SrcSpan "tests/examples/DataKinds2.hs" 1 24 1 27+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 1 14 1 23+ , srcInfoPoints = []+ }+ "DataKinds"+ ]+ ]+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 1 3 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds2.hs" 3 12 3 13 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 1 3 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 6 3 11+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 6 3 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 6 3 9+ , srcInfoPoints = []+ }+ "Foo"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 10 3 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 10 3 11+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 14 3 17+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 14 3 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 3 14 3 17+ , srcInfoPoints = []+ }+ "Foo")+ [])+ ]+ []+ , TypeDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 1 5 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds2.hs" 5 1 5 5+ , SrcSpan "tests/examples/DataKinds2.hs" 5 11 5 12+ ]+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 6 5 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 6 5 10+ , srcInfoPoints = []+ }+ "FooB"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 13 5 20+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 13 5 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 13 5 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 13 5 16+ , srcInfoPoints = []+ }+ "Foo")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 17 5 20+ , srcInfoPoints = []+ }+ (PromotedString+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 5 17 5 20+ , srcInfoPoints = []+ }+ "a"+ "a")))+ , TypeDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 1 7 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds2.hs" 7 1 7 5+ , SrcSpan "tests/examples/DataKinds2.hs" 7 11 7 12+ ]+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 6 7 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 6 7 10+ , srcInfoPoints = []+ }+ "FooC"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 13 7 18+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 13 7 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 13 7 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 13 7 16+ , srcInfoPoints = []+ }+ "Foo")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 17 7 18+ , srcInfoPoints = []+ }+ (PromotedInteger+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 7 17 7 18+ , srcInfoPoints = []+ }+ 1+ "1")))+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 1 10 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds2.hs" 9 1 9 9+ , SrcSpan "tests/examples/DataKinds2.hs" 9 27 9 32+ , SrcSpan "tests/examples/DataKinds2.hs" 10 1 10 1+ , SrcSpan "tests/examples/DataKinds2.hs" 10 1 10 1+ , SrcSpan "tests/examples/DataKinds2.hs" 10 0 10 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 10 9 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 10 9 26+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 10 9 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 10 9 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 10 9 14+ , srcInfoPoints = []+ }+ "Show")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 15 9 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DataKinds2.hs" 9 15 9 16+ , SrcSpan "tests/examples/DataKinds2.hs" 9 25 9 26+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 16 9 25+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 16 9 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 16 9 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 16 9 19+ , srcInfoPoints = []+ }+ "Foo")))+ (TyPromoted+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 20 9 25+ , srcInfoPoints = []+ }+ (PromotedString+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DataKinds2.hs" 9 20 9 25+ , srcInfoPoints = []+ }+ "bar"+ "bar"))))))+ (Just [])+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,9 @@+{-# LANGUAGE DataKinds #-}++data Foo a = Foo++type FooB = Foo "a"++type FooC = Foo 1++instance Show (Foo "bar") where
@@ -0,0 +1,5 @@+{-# LANGUAGE DefaultSignatures #-}+class C a where+ f :: a -> a -> Bool+ default f :: (Eq a) => a -> a -> Bool+ f x y = x == y
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,441 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 1 1 1 1+ , SrcSpan "tests/examples/DefaultSignatures.hs" 2 1 2 1+ , SrcSpan "tests/examples/DefaultSignatures.hs" 2 1 2 1+ , SrcSpan "tests/examples/DefaultSignatures.hs" 2 1 2 1+ , SrcSpan "tests/examples/DefaultSignatures.hs" 6 1 6 1+ , SrcSpan "tests/examples/DefaultSignatures.hs" 6 1 6 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 1 1 1 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 1 1 1 13+ , SrcSpan "tests/examples/DefaultSignatures.hs" 1 32 1 35+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 1 14 1 31+ , srcInfoPoints = []+ }+ "DefaultSignatures"+ ]+ ]+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 2 1 5 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 2 1 2 6+ , SrcSpan "tests/examples/DefaultSignatures.hs" 2 11 2 16+ , SrcSpan "tests/examples/DefaultSignatures.hs" 3 5 3 5+ , SrcSpan "tests/examples/DefaultSignatures.hs" 4 5 4 5+ , SrcSpan "tests/examples/DefaultSignatures.hs" 5 5 5 5+ , SrcSpan "tests/examples/DefaultSignatures.hs" 6 1 6 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 2 7 2 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 2 7 2 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 2 7 2 8+ , srcInfoPoints = []+ }+ "C"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 2 9 2 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 2 9 2 10+ , srcInfoPoints = []+ }+ "a")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 5 3 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 3 7 3 9 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 5 3 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 3 7 3 9 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 5 3 6+ , srcInfoPoints = []+ }+ "f"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 10 3 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 3 12 3 14 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 10 3 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 10 3 11+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 15 3 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 3 17 3 19 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 15 3 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 15 3 16+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 20 3 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 20 3 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 3 20 3 24+ , srcInfoPoints = []+ }+ "Bool"))))))+ , ClsDefSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 5 4 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 4 5 4 12+ , SrcSpan "tests/examples/DefaultSignatures.hs" 4 15 4 17+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 13 4 14+ , srcInfoPoints = []+ }+ "f")+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 18 4 42+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 18 4 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 4 18 4 19+ , SrcSpan "tests/examples/DefaultSignatures.hs" 4 23 4 24+ , SrcSpan "tests/examples/DefaultSignatures.hs" 4 25 4 27+ ]+ }+ (ParenA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 18 4 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 4 18 4 19+ , SrcSpan "tests/examples/DefaultSignatures.hs" 4 23 4 24+ , SrcSpan "tests/examples/DefaultSignatures.hs" 4 25 4 27+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 19 4 23+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 19 4 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 19 4 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DefaultSignatures.hs" 4 19 4 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DefaultSignatures.hs" 4 19 4 21+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 22 4 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DefaultSignatures.hs" 4 22 4 23+ , srcInfoPoints = []+ }+ "a")))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 28 4 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 4 30 4 32 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 33 4 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 4 35 4 37 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 33 4 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 33 4 34+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 38 4 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 38 4 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 4 38 4 42+ , srcInfoPoints = []+ }+ "Bool"))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 5 5 19+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 5 5 19+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 5 5 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 5 5 6+ , srcInfoPoints = []+ }+ "f")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 7 5 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 7 5 8+ , srcInfoPoints = []+ }+ "x")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 9 5 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 9 5 10+ , srcInfoPoints = []+ }+ "y")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 11 5 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DefaultSignatures.hs" 5 11 5 12 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 13 5 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 13 5 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 13 5 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 13 5 14+ , srcInfoPoints = []+ }+ "x")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 15 5 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 15 5 17+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 15 5 17+ , srcInfoPoints = []+ }+ "==")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DefaultSignatures.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ "y")))))+ Nothing+ ])+ ])+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,7 @@+{-# LANGUAGE DefaultSignatures #-}++class C a where+ f :: a -> a -> Bool+ + default f :: (Eq a) => a -> a -> Bool+ f x y = x == y
@@ -0,0 +1,4 @@+{-# LANGUAGE DeriveGeneric #-}++data UserTree a = Node a (UserTree a) (UserTree a) | Leaf+ deriving Generic
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,239 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DeriveGeneric.hs" 1 1 1 1+ , SrcSpan "tests/examples/DeriveGeneric.hs" 3 1 3 1+ , SrcSpan "tests/examples/DeriveGeneric.hs" 3 1 3 1+ , SrcSpan "tests/examples/DeriveGeneric.hs" 3 1 3 1+ , SrcSpan "tests/examples/DeriveGeneric.hs" 5 1 5 1+ , SrcSpan "tests/examples/DeriveGeneric.hs" 5 1 5 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 1 1 1 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DeriveGeneric.hs" 1 1 1 13+ , SrcSpan "tests/examples/DeriveGeneric.hs" 1 28 1 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 1 14 1 27+ , srcInfoPoints = []+ }+ "DeriveGeneric"+ ]+ ]+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 1 4 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DeriveGeneric.hs" 3 17 3 18+ , SrcSpan "tests/examples/DeriveGeneric.hs" 3 52 3 53+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 1 3 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 6 3 16+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 6 3 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 6 3 14+ , srcInfoPoints = []+ }+ "UserTree"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 15 3 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 15 3 16+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 19 3 51+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 19 3 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 19 3 23+ , srcInfoPoints = []+ }+ "Node")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 24 3 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 24 3 25+ , srcInfoPoints = []+ }+ "a")+ , TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 26 3 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DeriveGeneric.hs" 3 26 3 27+ , SrcSpan "tests/examples/DeriveGeneric.hs" 3 37 3 38+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 27 3 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 27 3 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 27 3 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DeriveGeneric.hs" 3 27 3 35+ , srcInfoPoints = []+ }+ "UserTree")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 36 3 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 36 3 37+ , srcInfoPoints = []+ }+ "a")))+ , TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 39 3 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DeriveGeneric.hs" 3 39 3 40+ , SrcSpan "tests/examples/DeriveGeneric.hs" 3 50 3 51+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 40 3 50+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 40 3 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 40 3 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DeriveGeneric.hs" 3 40 3 48+ , srcInfoPoints = []+ }+ "UserTree")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 49 3 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 49 3 50+ , srcInfoPoints = []+ }+ "a")))+ ])+ , QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 54 3 58+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 54 3 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 3 54 3 58+ , srcInfoPoints = []+ }+ "Leaf")+ [])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 4 3 4 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DeriveGeneric.hs" 4 3 4 11 ]+ }+ Nothing+ [ IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 4 12 4 19+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 4 12 4 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 4 12 4 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DeriveGeneric.hs" 4 12 4 19+ , srcInfoPoints = []+ }+ "Generic")))+ ]+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+{-# LANGUAGE DeriveGeneric #-}++data UserTree a = Node a (UserTree a) (UserTree a)+ | Leaf+ deriving Generic
@@ -0,0 +1,2 @@+data X = X deriving Show+data X = X deriving (Show)
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,177 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 1 3 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingParen.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingParen.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingParen.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingParen.hs" 2 1 2 1+ , SrcSpan "tests/examples/DerivingParen.hs" 3 1 3 1+ , SrcSpan "tests/examples/DerivingParen.hs" 3 1 3 1+ ]+ }+ Nothing+ []+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 1 1 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingParen.hs" 1 8 1 9 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 1 1 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 6 1 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 6 1 7+ , srcInfoPoints = []+ }+ "X"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 10 1 11+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 10 1 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 10 1 11+ , srcInfoPoints = []+ }+ "X")+ [])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 12 1 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingParen.hs" 1 12 1 20 ]+ }+ Nothing+ [ IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 21 1 25+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 21 1 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 21 1 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 1 21 1 25+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 1 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingParen.hs" 2 8 2 9 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 1 2 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 6 2 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 6 2 7+ , srcInfoPoints = []+ }+ "X"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 10 2 11+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 10 2 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 10 2 11+ , srcInfoPoints = []+ }+ "X")+ [])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 12 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingParen.hs" 2 12 2 20 ]+ }+ Nothing+ [ IParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 21 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingParen.hs" 2 21 2 22+ , SrcSpan "tests/examples/DerivingParen.hs" 2 26 2 27+ ]+ }+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 22 2 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 22 2 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 22 2 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingParen.hs" 2 22 2 26+ , srcInfoPoints = []+ }+ "Show"))))+ ]+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,3 @@+data X = X deriving Show++data X = X deriving (Show)
@@ -0,0 +1,18 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE StandaloneDeriving #-}+module DerivingStrategies where++class C a+class D a++newtype Foo a = MkFoo a+ deriving ()+ deriving stock (Eq, Ord)+ deriving newtype Show+ deriving anyclass C++deriving stock instance Read a => Read (Foo a)+deriving newtype instance Num a => Num (Foo a)+deriving anyclass instance D (Foo a)
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,849 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 1 1 19 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 2 1 2 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 3 1 3 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 4 1 4 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 5 1 5 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 5 1 5 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 7 1 7 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 8 1 8 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 10 1 10 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 16 1 16 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 17 1 17 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 18 1 18 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 19 1 19 1+ , SrcSpan "tests/examples/DerivingStrategies.hs" 19 1 19 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 5 1 5 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 5 1 5 7+ , SrcSpan "tests/examples/DerivingStrategies.hs" 5 27 5 32+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 5 8 5 26+ , srcInfoPoints = []+ }+ "DerivingStrategies")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 1 1 1 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 1 1 1 13+ , SrcSpan "tests/examples/DerivingStrategies.hs" 1 29 1 32+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 1 14 1 28+ , srcInfoPoints = []+ }+ "DeriveAnyClass"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 2 1 2 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 2 1 2 13+ , SrcSpan "tests/examples/DerivingStrategies.hs" 2 33 2 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 2 14 2 32+ , srcInfoPoints = []+ }+ "DerivingStrategies"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 3 1 3 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 3 1 3 13+ , SrcSpan "tests/examples/DerivingStrategies.hs" 3 41 3 44+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 3 14 3 40+ , srcInfoPoints = []+ }+ "GeneralizedNewtypeDeriving"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 4 1 4 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 4 1 4 13+ , SrcSpan "tests/examples/DerivingStrategies.hs" 4 33 4 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 4 14 4 32+ , srcInfoPoints = []+ }+ "StandaloneDeriving"+ ]+ ]+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 7 1 7 10+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 7 1 7 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 7 7 7 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 7 7 7 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 7 7 7 8+ , srcInfoPoints = []+ }+ "C"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 7 9 7 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 7 9 7 10+ , srcInfoPoints = []+ }+ "a")))+ []+ Nothing+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 8 1 8 10+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 8 1 8 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 8 7 8 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 8 7 8 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 8 7 8 8+ , srcInfoPoints = []+ }+ "D"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 8 9 8 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 8 9 8 10+ , srcInfoPoints = []+ }+ "a")))+ []+ Nothing+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 1 14 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 10 15 10 16 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 1 10 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 9 10 14+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 9 10 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 9 10 12+ , srcInfoPoints = []+ }+ "Foo"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 13 10 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 13 10 14+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 17 10 24+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 17 10 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 17 10 22+ , srcInfoPoints = []+ }+ "MkFoo")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 23 10 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 10 23 10 24+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 11 3 11 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 11 3 11 11+ , SrcSpan "tests/examples/DerivingStrategies.hs" 11 12 11 13+ , SrcSpan "tests/examples/DerivingStrategies.hs" 11 13 11 14+ ]+ }+ Nothing+ []+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 3 12 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 12 3 12 11+ , SrcSpan "tests/examples/DerivingStrategies.hs" 12 18 12 19+ , SrcSpan "tests/examples/DerivingStrategies.hs" 12 21 12 22+ , SrcSpan "tests/examples/DerivingStrategies.hs" 12 26 12 27+ ]+ }+ (Just+ (DerivStock+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 12 12 17+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 19 12 21+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 19 12 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 19 12 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 19 12 21+ , srcInfoPoints = []+ }+ "Eq")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 23 12 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 23 12 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 23 12 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 12 23 12 26+ , srcInfoPoints = []+ }+ "Ord")))+ ]+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 13 3 13 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 13 3 13 11 ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 13 12 13 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 13 20 13 24+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 13 20 13 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 13 20 13 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 13 20 13 24+ , srcInfoPoints = []+ }+ "Show")))+ ]+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 14 3 14 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 14 3 14 11 ]+ }+ (Just+ (DerivAnyclass+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 14 12 14 20+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 14 21 14 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 14 21 14 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 14 21 14 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 14 21 14 22+ , srcInfoPoints = []+ }+ "C")))+ ]+ ]+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 1 16 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 16 1 16 9+ , SrcSpan "tests/examples/DerivingStrategies.hs" 16 16 16 24+ ]+ }+ (Just+ (DerivStock+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 10 16 15+ , srcInfoPoints = []+ }))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 25 16 47+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 25 16 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 16 32 16 34 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 25 16 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 16 32 16 34 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 25 16 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 16 32 16 34 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 25 16 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 16 32 16 34 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 25 16 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 25 16 29+ , srcInfoPoints = []+ }+ "Read")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 30 16 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 30 16 31+ , srcInfoPoints = []+ }+ "a"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 35 16 47+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 35 16 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 35 16 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 35 16 39+ , srcInfoPoints = []+ }+ "Read")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 40 16 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 16 40 16 41+ , SrcSpan "tests/examples/DerivingStrategies.hs" 16 46 16 47+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 41 16 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 41 16 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 41 16 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 41 16 44+ , srcInfoPoints = []+ }+ "Foo")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 45 16 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 16 45 16 46+ , srcInfoPoints = []+ }+ "a"))))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 1 17 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 17 1 17 9+ , SrcSpan "tests/examples/DerivingStrategies.hs" 17 18 17 26+ ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 10 17 17+ , srcInfoPoints = []+ }))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 27 17 47+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 27 17 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 17 33 17 35 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 27 17 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 17 33 17 35 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 27 17 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 17 33 17 35 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 27 17 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 17 33 17 35 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 27 17 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 27 17 30+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 31 17 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 31 17 32+ , srcInfoPoints = []+ }+ "a"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 36 17 47+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 36 17 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 36 17 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 36 17 39+ , srcInfoPoints = []+ }+ "Num")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 40 17 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 17 40 17 41+ , SrcSpan "tests/examples/DerivingStrategies.hs" 17 46 17 47+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 41 17 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 41 17 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 41 17 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 41 17 44+ , srcInfoPoints = []+ }+ "Foo")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 45 17 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 17 45 17 46+ , srcInfoPoints = []+ }+ "a"))))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 1 18 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 18 1 18 9+ , SrcSpan "tests/examples/DerivingStrategies.hs" 18 19 18 27+ ]+ }+ (Just+ (DerivAnyclass+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 10 18 18+ , srcInfoPoints = []+ }))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 28 18 37+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 28 18 37+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 28 18 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 28 18 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 28 18 29+ , srcInfoPoints = []+ }+ "D")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 30 18 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingStrategies.hs" 18 30 18 31+ , SrcSpan "tests/examples/DerivingStrategies.hs" 18 36 18 37+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 31 18 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 31 18 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 31 18 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 31 18 34+ , srcInfoPoints = []+ }+ "Foo")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 35 18 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingStrategies.hs" 18 35 18 36+ , srcInfoPoints = []+ }+ "a"))))))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,21 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE StandaloneDeriving #-}+module DerivingStrategies where++class C a++class D a++newtype Foo a = MkFoo a+ deriving ()+ deriving stock (Eq, Ord)+ deriving newtype Show+ deriving anyclass C++deriving stock instance Read a => Read (Foo a)++deriving newtype instance Num a => Num (Foo a)++deriving anyclass instance D (Foo a)
@@ -0,0 +1,459 @@+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE TypeInType #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE UndecidableInstances #-}+module DerivingVia where++import Data.Void+import Data.Complex+import Data.Functor.Const+import Data.Functor.Identity+import Data.Ratio+import Control.Monad.Reader+import Control.Monad.State+import Control.Monad.Writer+import Control.Applicative hiding (WrappedMonad(..))++import Data.Bifunctor+import Data.Monoid+import Data.Kind++type f ~> g = forall xx. f xx -> g xx++-----+-- Simple example+-----++data Foo a = MkFoo a a+ deriving Show+ via (Identity (Foo a))++-----+-- Eta reduction at work+-----++newtype Flip p a b = Flip { runFlip :: p b a }++instance Bifunctor p => Bifunctor (Flip p) where+ bimap f g = Flip . bimap g f . runFlip++instance Bifunctor p => Functor (Flip p a) where+ fmap f = Flip . first f . runFlip++newtype Bar a = MkBar (Either a Int)+ deriving Functor+ via (Flip Either Int)++-----+-- Monad transformers+-----++type MTrans = (Type -> Type) -> (Type -> Type)++-- From `constraints'+data Dict c where+ Dict :: c => Dict c++newtype a :- b = Sub (a => Dict b)++infixl 1 \\+(\\) :: a => (b => r) -> (a :- b) -> r+r \\ Sub Dict = r++-- With `-XQuantifiedConstraints' this just becomes+--+-- type Lifting cls trans = forall mm. cls mm => cls (trans mm)+--+-- type LiftingMonad trans = Lifting Monad trans+--+class LiftingMonad (trans :: MTrans) where+ proof :: Monad m :- Monad (trans m)++instance LiftingMonad (StateT s :: MTrans) where+ proof :: Monad m :- Monad (StateT s m)+ proof = Sub Dict++instance Monoid w => LiftingMonad (WriterT w :: MTrans) where+ proof :: Monad m :- Monad (WriterT w m)+ proof = Sub Dict++instance (LiftingMonad trans, LiftingMonad trans') => LiftingMonad (ComposeT trans trans' :: MTrans) where+ proof :: forall m. Monad m :- Monad (ComposeT trans trans' m)+ proof = Sub (Dict \\ proof @trans @(trans' m) \\ proof @trans' @m)++newtype Stack :: MTrans where+ Stack :: ReaderT Int (StateT Bool (WriterT String m)) a -> Stack m a+ deriving newtype+ ( Functor+ , Applicative+ , Monad+ , MonadReader Int+ , MonadState Bool+ , MonadWriter String+ )+ deriving (MonadTrans, MFunctor)+ via (ReaderT Int `ComposeT` StateT Bool `ComposeT` WriterT String)++class MFunctor (trans :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (trans m ~> trans m')++instance MFunctor (ReaderT r :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (ReaderT r m ~> ReaderT r m')+ hoist nat = ReaderT . fmap nat . runReaderT++instance MFunctor (StateT s :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (StateT s m ~> StateT s m')+ hoist nat = StateT . fmap nat . runStateT++instance MFunctor (WriterT w :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (WriterT w m ~> WriterT w m')+ hoist nat = WriterT . nat . runWriterT++infixr 9 `ComposeT`+newtype ComposeT :: MTrans -> MTrans -> MTrans where+ ComposeT :: { getComposeT :: f (g m) a } -> ComposeT f g m a+ deriving newtype (Functor, Applicative, Monad)++instance (MonadTrans f, MonadTrans g, LiftingMonad g) => MonadTrans (ComposeT f g) where+ lift :: forall m. Monad m => m ~> ComposeT f g m+ lift = ComposeT . lift . lift+ \\ proof @g @m++instance (MFunctor f, MFunctor g, LiftingMonad g) => MFunctor (ComposeT f g) where+ hoist :: forall m m'. Monad m => (m ~> m') -> (ComposeT f g m ~> ComposeT f g m')+ hoist f = ComposeT . hoist (hoist f) . getComposeT+ \\ proof @g @m++-----+-- Using tuples in a `via` type+-----++newtype X a = X (a, a)+ deriving (Semigroup, Monoid)+ via (Product a, Sum a)++ deriving (Show, Eq)+ via (a, a)++-----+-- Abstract data types+-----++class C f where+ c :: f a -> Int++newtype X2 f a = X2 (f a)++instance C (X2 f) where+ c = const 0++deriving via (X2 IO) instance C IO++----+-- Testing parser+----++newtype P0 a = P0 a deriving Show via a+newtype P1 a = P1 [a] deriving Show via [a]+newtype P2 a = P2 (a, a) deriving Show via (a, a)+newtype P3 a = P3 (Maybe a) deriving Show via (First a)+newtype P4 a = P4 (Maybe a) deriving Show via (First $ a)+newtype P5 a = P5 a deriving Show via (Identity $ a)+newtype P6 a = P6 [a] deriving Show via ([] $ a)+newtype P7 a = P7 (a, a) deriving Show via (Identity $ (a, a))+newtype P8 a = P8 (Either () a) deriving Functor via (($) (Either ()))++newtype f $ a = APP (f a) deriving newtype Show deriving newtype Functor++----+-- From Baldur's notes+----++----+-- 1+----+newtype WrapApplicative f a = WrappedApplicative (f a)+ deriving (Functor, Applicative)++instance (Applicative f, Num a) => Num (WrapApplicative f a) where+ (+) = liftA2 (+)+ (*) = liftA2 (*)+ negate = fmap negate+ fromInteger = pure . fromInteger+ abs = fmap abs+ signum = fmap signum++instance (Applicative f, Fractional a) => Fractional (WrapApplicative f a) where+ recip = fmap recip+ fromRational = pure . fromRational++instance (Applicative f, Floating a) => Floating (WrapApplicative f a) where+ pi = pure pi+ sqrt = fmap sqrt+ exp = fmap exp+ log = fmap log+ sin = fmap sin+ cos = fmap cos+ asin = fmap asin+ atan = fmap atan+ acos = fmap acos+ sinh = fmap sinh+ cosh = fmap cosh+ asinh = fmap asinh+ atanh = fmap atanh+ acosh = fmap acosh++instance (Applicative f, Semigroup s) => Semigroup (WrapApplicative f s) where+ (<>) = liftA2 (<>)++instance (Applicative f, Monoid m) => Monoid (WrapApplicative f m) where+ mempty = pure mempty++----+-- 2+----+class Pointed p where+ pointed :: a -> p a++newtype WrapMonad f a = WrappedMonad (f a)+ deriving newtype (Pointed, Monad)++instance (Monad m, Pointed m) => Functor (WrapMonad m) where+ fmap = liftM++instance (Monad m, Pointed m) => Applicative (WrapMonad m) where+ pure = pointed+ (<*>) = ap++-- data+data Sorted a = Sorted a a a+ deriving (Functor, Applicative)+ via (WrapMonad Sorted)+ deriving (Num, Fractional, Floating, Semigroup, Monoid)+ via (WrapApplicative Sorted a)+++instance Monad Sorted where+ (>>=) :: Sorted a -> (a -> Sorted b) -> Sorted b+ Sorted a b c >>= f = Sorted a' b' c' where+ Sorted a' _ _ = f a+ Sorted _ b' _ = f b+ Sorted _ _ c' = f c++instance Pointed Sorted where+ pointed :: a -> Sorted a+ pointed a = Sorted a a a++----+-- 3+----+class IsZero a where+ isZero :: a -> Bool++newtype WrappedNumEq a = WrappedNumEq a+newtype WrappedShow a = WrappedShow a+newtype WrappedNumEq2 a = WrappedNumEq2 a++instance (Num a, Eq a) => IsZero (WrappedNumEq a) where+ isZero :: WrappedNumEq a -> Bool+ isZero (WrappedNumEq a) = 0 == a++instance Show a => IsZero (WrappedShow a) where+ isZero :: WrappedShow a -> Bool+ isZero (WrappedShow a) = "0" == show a++instance (Num a, Eq a) => IsZero (WrappedNumEq2 a) where+ isZero :: WrappedNumEq2 a -> Bool+ isZero (WrappedNumEq2 a) = a + a == a++newtype INT = INT Int+ deriving newtype Show+ deriving IsZero via (WrappedNumEq Int)++newtype VOID = VOID Void deriving IsZero via (WrappedShow Void)++----+-- 4+----+class Bifunctor p => Biapplicative p where+ bipure :: a -> b -> p a b++ biliftA2+ :: (a -> b -> c)+ -> (a' -> b' -> c')+ -> p a a'+ -> p b b'+ -> p c c'++instance Biapplicative (,) where+ bipure = (,)++ biliftA2 f f' (a, a') (b, b') =+ (f a b, f' a' b')++newtype WrapBiapp p a b = WrapBiap (p a b)+ deriving newtype (Bifunctor, Biapplicative, Eq)++instance (Biapplicative p, Num a, Num b) => Num (WrapBiapp p a b) where+ (+) = biliftA2 (+) (+)+ (-) = biliftA2 (*) (*)+ (*) = biliftA2 (*) (*)+ negate = bimap negate negate+ abs = bimap abs abs+ signum = bimap signum signum+ fromInteger n = fromInteger n `bipure` fromInteger n++newtype INT2 = INT2 (Int, Int)+ deriving IsZero via (WrappedNumEq2 (WrapBiapp (,) Int Int))++----+-- 5+----+class Monoid a => MonoidNull a where+ null :: a -> Bool++newtype WrpMonNull a = WRM a deriving (Eq, Semigroup, Monoid)++instance (Eq a, Monoid a) => MonoidNull (WrpMonNull a) where+ null :: WrpMonNull a -> Bool+ null = (== mempty)++deriving via (WrpMonNull Any) instance MonoidNull Any+deriving via () instance MonoidNull ()+deriving via Ordering instance MonoidNull Ordering++----+-- 6+----+-- https://github.com/mikeizbicki/subhask/blob/f53fd8f465747681c88276c7dabe3646fbdf7d50/src/SubHask/Algebra.hs#L635++class Lattice a where+ sup :: a -> a -> a+ (.>=) :: a -> a -> Bool+ (.>) :: a -> a -> Bool++newtype WrapOrd a = WrappedOrd a+ deriving newtype (Eq, Ord)++instance Ord a => Lattice (WrapOrd a) where+ sup = max+ (.>=) = (>=)+ (.>) = (>)++deriving via [a] instance Ord a => Lattice [a]+deriving via (a, b) instance (Ord a, Ord b) => Lattice (a, b)+--mkLattice_(Bool)+deriving via Bool instance Lattice Bool+--mkLattice_(Char)+deriving via Char instance Lattice Char+--mkLattice_(Int)+deriving via Int instance Lattice Int+--mkLattice_(Integer)+deriving via Integer instance Lattice Integer+--mkLattice_(Float)+deriving via Float instance Lattice Float+--mkLattice_(Double)+deriving via Double instance Lattice Double+--mkLattice_(Rational)+deriving via Rational instance Lattice Rational++----+-- 7+----+-- https://hackage.haskell.org/package/linear-1.20.7/docs/src/Linear-Affine.html++class Functor f => Additive f where+ zero :: Num a => f a+ (^+^) :: Num a => f a -> f a -> f a+ (^+^) = liftU2 (+)+ (^-^) :: Num a => f a -> f a -> f a+ x ^-^ y = x ^+^ fmap negate y+ liftU2 :: (a -> a -> a) -> f a -> f a -> f a++instance Additive [] where+ zero = []+ liftU2 f = go where+ go (x:xs) (y:ys) = f x y : go xs ys+ go [] ys = ys+ go xs [] = xs++instance Additive Maybe where+ zero = Nothing+ liftU2 f (Just a) (Just b) = Just (f a b)+ liftU2 _ Nothing ys = ys+ liftU2 _ xs Nothing = xs++instance Applicative f => Additive (WrapApplicative f) where+ zero = pure 0+ liftU2 = liftA2++deriving via (WrapApplicative ((->) a)) instance Additive ((->) a)+deriving via (WrapApplicative Complex) instance Additive Complex+deriving via (WrapApplicative Identity) instance Additive Identity++instance Additive ZipList where+ zero = ZipList []+ liftU2 f (ZipList xs) (ZipList ys) = ZipList (liftU2 f xs ys)++class Additive (Diff p) => Affine p where+ type Diff p :: Type -> Type++ (.-.) :: Num a => p a -> p a -> Diff p a+ (.+^) :: Num a => p a -> Diff p a -> p a+ (.-^) :: Num a => p a -> Diff p a -> p a+ p .-^ v = p .+^ fmap negate v++-- #define ADDITIVEC(CTX,T) instance CTX => Affine T where type Diff T = T ; \+-- (.-.) = (^-^) ; {-# INLINE (.-.) #-} ; (.+^) = (^+^) ; {-# INLINE (.+^) #-} ; \+-- (.-^) = (^-^) ; {-# INLINE (.-^) #-}+-- #define ADDITIVE(T) ADDITIVEC((), T)+newtype WrapAdditive f a = WrappedAdditive (f a)++instance Additive f => Affine (WrapAdditive f) where+ type Diff (WrapAdditive f) = f++ WrappedAdditive a .-. WrappedAdditive b = a ^-^ b+ WrappedAdditive a .+^ b = WrappedAdditive (a ^+^ b)+ WrappedAdditive a .-^ b = WrappedAdditive (a ^-^ b)++-- ADDITIVE(((->) a))+deriving via (WrapAdditive ((->) a)) instance Affine ((->) a)+-- ADDITIVE([])+deriving via (WrapAdditive []) instance Affine []+-- ADDITIVE(Complex)+deriving via (WrapAdditive Complex) instance Affine Complex+-- ADDITIVE(Maybe)+deriving via (WrapAdditive Maybe) instance Affine Maybe+-- ADDITIVE(ZipList)+deriving via (WrapAdditive ZipList) instance Affine ZipList+-- ADDITIVE(Identity)+deriving via (WrapAdditive Identity) instance Affine Identity++----+-- 8+----++class C2 a b c where+ c2 :: a -> b -> c++instance C2 a b (Const a b) where+ c2 x _ = Const x++newtype Fweemp a = Fweemp a+ deriving (C2 a b)+ via (Const a (b :: Type))
@@ -0,0 +1,460 @@+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE TypeInType #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE UndecidableInstances #-}+module DerivingVia where++import Data.Void+import Data.Complex+import Data.Functor.Const+import Data.Functor.Identity+import Data.Ratio+import Control.Monad.Reader+import Control.Monad.State+import Control.Monad.Writer+import Control.Applicative hiding (WrappedMonad(..))++import Data.Bifunctor+import Data.Monoid+import Data.Kind++type f ~> g = forall xx. f xx -> g xx++-----+-- Simple example+-----++data Foo a = MkFoo a a+ deriving+ via( Identity (Foo a))Show++-----+-- Eta reduction at work+-----++newtype Flip p a b = Flip { runFlip :: p b a }++instance Bifunctor p => Bifunctor (Flip p) where+ bimap f g = Flip . bimap g f . runFlip++instance Bifunctor p => Functor (Flip p a) where+ fmap f = Flip . first f . runFlip++newtype Bar a = MkBar (Either a Int)+ deriving+ via( Flip Either Int)Functor++-----+-- Monad transformers+-----++type MTrans = (Type -> Type) -> (Type -> Type)++-- From `constraints'+data Dict c where+ Dict :: c => Dict c++newtype a :- b = Sub (a => Dict b)++infixl 1 \\+(\\) :: a => (b => r) -> (a :- b) -> r+r \\ Sub Dict = r++-- With `-XQuantifiedConstraints' this just becomes+--+-- type Lifting cls trans = forall mm. cls mm => cls (trans mm)+--+-- type LiftingMonad trans = Lifting Monad trans+--+class LiftingMonad (trans :: MTrans) where+ proof :: Monad m :- Monad (trans m)++instance LiftingMonad (StateT s :: MTrans) where+ proof :: Monad m :- Monad (StateT s m)+ proof = Sub Dict++instance Monoid w => LiftingMonad (WriterT w :: MTrans) where+ proof :: Monad m :- Monad (WriterT w m)+ proof = Sub Dict++instance (LiftingMonad trans, LiftingMonad trans') => LiftingMonad (ComposeT trans trans' :: MTrans) where+ proof :: forall m. Monad m :- Monad (ComposeT trans trans' m)+ proof = Sub (Dict \\ proof @trans @(trans' m) \\ proof @trans' @m)++newtype Stack :: MTrans where+ Stack :: ReaderT Int (StateT Bool (WriterT String m)) a -> Stack m a+ deriving newtype+ ( Functor+ , Applicative+ , Monad+ , MonadReader Int+ , MonadState Bool+ , MonadWriter String+ )+ deriving+ via( ReaderT Int `ComposeT` StateT Bool `ComposeT` WriterT String)(MonadTrans,MFunctor)++class MFunctor (trans :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (trans m ~> trans m')++instance MFunctor (ReaderT r :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (ReaderT r m ~> ReaderT r m')+ hoist nat = ReaderT . fmap nat . runReaderT++instance MFunctor (StateT s :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (StateT s m ~> StateT s m')+ hoist nat = StateT . fmap nat . runStateT++instance MFunctor (WriterT w :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (WriterT w m ~> WriterT w m')+ hoist nat = WriterT . nat . runWriterT++infixr 9 `ComposeT`+newtype ComposeT :: MTrans -> MTrans -> MTrans where+ ComposeT :: { getComposeT :: f (g m) a } -> ComposeT f g m a+ deriving newtype (Functor, Applicative, Monad)++instance (MonadTrans f, MonadTrans g, LiftingMonad g) => MonadTrans (ComposeT f g) where+ lift :: forall m. Monad m => m ~> ComposeT f g m+ lift = ComposeT . lift . lift+ \\ proof @g @m++instance (MFunctor f, MFunctor g, LiftingMonad g) => MFunctor (ComposeT f g) where+ hoist :: forall m m'. Monad m => (m ~> m') -> (ComposeT f g m ~> ComposeT f g m')+ hoist f = ComposeT . hoist (hoist f) . getComposeT+ \\ proof @g @m++-----+-- Using tuples in a `via` type+-----++newtype X a = X (a, a)+ deriving+ via (Product a, Sum a)(Semigroup,Monoid)++ deriving+ via (a, a)(Show,Eq)++-----+-- Abstract data types+-----++class C f where+ c :: f a -> Int++newtype X2 f a = X2 (f a)++instance C (X2 f) where+ c = const 0++deriving via( X2 IO) instance C IO++----+-- Testing parser+----++newtype P0 a = P0 a deriving viaaShow+newtype P1 a = P1 [a] deriving via[ a]Show+newtype P2 a = P2 (a, a) deriving via (a, a)Show+newtype P3 a = P3 (Maybe a) deriving via( First a)Show+newtype P4 a = P4 (Maybe a) deriving via( First $ a)Show+newtype P5 a = P5 a deriving via( Identity $ a)Show+newtype P6 a = P6 [a] deriving via( [] $ a)Show+newtype P7 a = P7 (a, a) deriving via( Identity $ (a, a))Show+newtype P8 a = P8 (Either () a) deriving via( ($) (Either ()))Functor++newtype f $ a = APP (f a) deriving newtype Show deriving newtype Functor++----+-- From Baldur's notes+----++----+-- 1+----+newtype WrapApplicative f a = WrappedApplicative (f a)+ deriving (Functor, Applicative)++instance (Applicative f, Num a) => Num (WrapApplicative f a) where+ (+) = liftA2 (+)+ (*) = liftA2 (*)+ negate = fmap negate+ fromInteger = pure . fromInteger+ abs = fmap abs+ signum = fmap signum++instance (Applicative f, Fractional a) => Fractional (WrapApplicative f a) where+ recip = fmap recip+ fromRational = pure . fromRational++instance (Applicative f, Floating a) => Floating (WrapApplicative f a) where+ pi = pure pi+ sqrt = fmap sqrt+ exp = fmap exp+ log = fmap log+ sin = fmap sin+ cos = fmap cos+ asin = fmap asin+ atan = fmap atan+ acos = fmap acos+ sinh = fmap sinh+ cosh = fmap cosh+ asinh = fmap asinh+ atanh = fmap atanh+ acosh = fmap acosh++instance (Applicative f, Semigroup s) => Semigroup (WrapApplicative f s) where+ (<>) = liftA2 (<>)++instance (Applicative f, Monoid m) => Monoid (WrapApplicative f m) where+ mempty = pure mempty++----+-- 2+----+class Pointed p where+ pointed :: a -> p a++newtype WrapMonad f a = WrappedMonad (f a)+ deriving newtype (Pointed, Monad)++instance (Monad m, Pointed m) => Functor (WrapMonad m) where+ fmap = liftM++instance (Monad m, Pointed m) => Applicative (WrapMonad m) where+ pure = pointed+ (<*>) = ap++-- data+data Sorted a = Sorted a a a+ deriving+ via( WrapMonad Sorted)(Functor,Applicative)+ deriving+ via( WrapApplicative Sorted a)(Num,Fractional,Floating,Semigroup,Monoid)+++instance Monad Sorted where+ (>>=) :: Sorted a -> (a -> Sorted b) -> Sorted b+ Sorted a b c >>= f = Sorted a' b' c' where+ Sorted a' _ _ = f a+ Sorted _ b' _ = f b+ Sorted _ _ c' = f c++instance Pointed Sorted where+ pointed :: a -> Sorted a+ pointed a = Sorted a a a++----+-- 3+----+class IsZero a where+ isZero :: a -> Bool++newtype WrappedNumEq a = WrappedNumEq a+newtype WrappedShow a = WrappedShow a+newtype WrappedNumEq2 a = WrappedNumEq2 a++instance (Num a, Eq a) => IsZero (WrappedNumEq a) where+ isZero :: WrappedNumEq a -> Bool+ isZero (WrappedNumEq a) = 0 == a++instance Show a => IsZero (WrappedShow a) where+ isZero :: WrappedShow a -> Bool+ isZero (WrappedShow a) = "0" == show a++instance (Num a, Eq a) => IsZero (WrappedNumEq2 a) where+ isZero :: WrappedNumEq2 a -> Bool+ isZero (WrappedNumEq2 a) = a + a == a++newtype INT = INT Int+ deriving newtype Show+ deriving via( WrappedNumEq Int)IsZero++newtype VOID = VOID Void deriving via( WrappedShow Void)IsZero++----+-- 4+----+class Bifunctor p => Biapplicative p where+ bipure :: a -> b -> p a b++ biliftA2+ :: (a -> b -> c)+ -> (a' -> b' -> c')+ -> p a a'+ -> p b b'+ -> p c c'++instance Biapplicative (,) where+ bipure = (,)++ biliftA2 f f' (a, a') (b, b') =+ (f a b, f' a' b')++newtype WrapBiapp p a b = WrapBiap (p a b)+ deriving newtype (Bifunctor, Biapplicative, Eq)++instance (Biapplicative p, Num a, Num b) => Num (WrapBiapp p a b) where+ (+) = biliftA2 (+) (+)+ (-) = biliftA2 (*) (*)+ (*) = biliftA2 (*) (*)+ negate = bimap negate negate+ abs = bimap abs abs+ signum = bimap signum signum+ fromInteger n = fromInteger n `bipure` fromInteger n++newtype INT2 = INT2 (Int, Int)+ deriving via( WrappedNumEq2 (WrapBiapp (,) Int Int))IsZero++----+-- 5+----+class Monoid a => MonoidNull a where+ null :: a -> Bool++newtype WrpMonNull a = WRM a deriving (Eq, Semigroup, Monoid)++instance (Eq a, Monoid a) => MonoidNull (WrpMonNull a) where+ null :: WrpMonNull a -> Bool+ null = (== mempty)++deriving via( WrpMonNull Any) instance MonoidNull Any+deriving via () instance MonoidNull ()+deriving viaOrdering instance MonoidNull Ordering++----+-- 6+----+-- https://github.com/mikeizbicki/subhask/blob/f53fd8f465747681c88276c7dabe3646fbdf7d50/src/SubHask/Algebra.hs#L635++class Lattice a where+ sup :: a -> a -> a+ (.>=) :: a -> a -> Bool+ (.>) :: a -> a -> Bool++newtype WrapOrd a = WrappedOrd a+ deriving newtype (Eq, Ord)++instance Ord a => Lattice (WrapOrd a) where+ sup = max+ (.>=) = (>=)+ (.>) = (>)++deriving via[ a] instance Ord a => Lattice [a]+deriving via (a, b) instance (Ord a, Ord b) => Lattice (a, b)+--mkLattice_(Bool)+deriving viaBool instance Lattice Bool+--mkLattice_(Char)+deriving viaChar instance Lattice Char+--mkLattice_(Int)+deriving viaInt instance Lattice Int+--mkLattice_(Integer)+deriving viaInteger instance Lattice Integer+--mkLattice_(Float)+deriving viaFloat instance Lattice Float+--mkLattice_(Double)+deriving viaDouble instance Lattice Double+--mkLattice_(Rational)+deriving viaRational instance Lattice Rational++----+-- 7+----+-- https://hackage.haskell.org/package/linear-1.20.7/docs/src/Linear-Affine.html++class Functor f => Additive f where+ zero :: Num a => f a+ (^+^) :: Num a => f a -> f a -> f a+ (^+^) = liftU2 (+)+ (^-^) :: Num a => f a -> f a -> f a+ x ^-^ y = x ^+^ fmap negate y+ liftU2 :: (a -> a -> a) -> f a -> f a -> f a++instance Additive [] where+ zero = []+ liftU2 f = go where+ go (x:xs) (y:ys) = f x y : go xs ys+ go [] ys = ys+ go xs [] = xs++instance Additive Maybe where+ zero = Nothing+ liftU2 f (Just a) (Just b) = Just (f a b)+ liftU2 _ Nothing ys = ys+ liftU2 _ xs Nothing = xs++instance Applicative f => Additive (WrapApplicative f) where+ zero = pure 0+ liftU2 = liftA2++deriving via( WrapApplicative ((->) a)) instance Additive ((->) a)+deriving via( WrapApplicative Complex) instance Additive Complex+deriving via( WrapApplicative Identity) instance Additive Identity++instance Additive ZipList where+ zero = ZipList []+ liftU2 f (ZipList xs) (ZipList ys) = ZipList (liftU2 f xs ys)++class Additive (Diff p) => Affine p where+ type Diff p :: Type -> Type++ (.-.) :: Num a => p a -> p a -> Diff p a+ (.+^) :: Num a => p a -> Diff p a -> p a+ (.-^) :: Num a => p a -> Diff p a -> p a+ p .-^ v = p .+^ fmap negate v++-- #define ADDITIVEC(CTX,T) instance CTX => Affine T where type Diff T = T ; \+-- (.-.) = (^-^) ; {-# INLINE (.-.) #-} ; (.+^) = (^+^) ; {-# INLINE (.+^) #-} ; \+-- (.-^) = (^-^) ; {-# INLINE (.-^) #-}+-- #define ADDITIVE(T) ADDITIVEC((), T)+newtype WrapAdditive f a = WrappedAdditive (f a)++instance Additive f => Affine (WrapAdditive f) where+ type Diff (WrapAdditive f) = f++ WrappedAdditive a .-. WrappedAdditive b = a ^-^ b+ WrappedAdditive a .+^ b = WrappedAdditive (a ^+^ b)+ WrappedAdditive a .-^ b = WrappedAdditive (a ^-^ b)++-- ADDITIVE(((->) a))+deriving via( WrapAdditive ((->) a)) instance Affine ((->) a)+-- ADDITIVE([])+deriving via( WrapAdditive []) instance Affine []+-- ADDITIVE(Complex)+deriving via( WrapAdditive Complex) instance Affine Complex+-- ADDITIVE(Maybe)+deriving via( WrapAdditive Maybe) instance Affine Maybe+-- ADDITIVE(ZipList)+deriving via( WrapAdditive ZipList) instance Affine ZipList+-- ADDITIVE(Identity)+deriving via( WrapAdditive Identity) instance Affine Identity++----+-- 8+----++class C2 a b c where+ c2 :: a -> b -> c++instance C2 a b (Const a b) where+ c2 x _ = Const x++newtype Fweemp a = Fweemp a+ deriving+ via( Const a (b :: Type))(C2ab)+
@@ -0,0 +1,32882 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 1 1 460 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingVia.hs" 2 1 2 1+ , SrcSpan "tests/examples/DerivingVia.hs" 3 1 3 1+ , SrcSpan "tests/examples/DerivingVia.hs" 4 1 4 1+ , SrcSpan "tests/examples/DerivingVia.hs" 5 1 5 1+ , SrcSpan "tests/examples/DerivingVia.hs" 6 1 6 1+ , SrcSpan "tests/examples/DerivingVia.hs" 7 1 7 1+ , SrcSpan "tests/examples/DerivingVia.hs" 8 1 8 1+ , SrcSpan "tests/examples/DerivingVia.hs" 9 1 9 1+ , SrcSpan "tests/examples/DerivingVia.hs" 10 1 10 1+ , SrcSpan "tests/examples/DerivingVia.hs" 11 1 11 1+ , SrcSpan "tests/examples/DerivingVia.hs" 12 1 12 1+ , SrcSpan "tests/examples/DerivingVia.hs" 13 1 13 1+ , SrcSpan "tests/examples/DerivingVia.hs" 14 1 14 1+ , SrcSpan "tests/examples/DerivingVia.hs" 15 1 15 1+ , SrcSpan "tests/examples/DerivingVia.hs" 16 1 16 1+ , SrcSpan "tests/examples/DerivingVia.hs" 17 1 17 1+ , SrcSpan "tests/examples/DerivingVia.hs" 18 1 18 1+ , SrcSpan "tests/examples/DerivingVia.hs" 19 1 19 1+ , SrcSpan "tests/examples/DerivingVia.hs" 20 1 20 1+ , SrcSpan "tests/examples/DerivingVia.hs" 20 1 20 1+ , SrcSpan "tests/examples/DerivingVia.hs" 22 1 22 1+ , SrcSpan "tests/examples/DerivingVia.hs" 23 1 23 1+ , SrcSpan "tests/examples/DerivingVia.hs" 24 1 24 1+ , SrcSpan "tests/examples/DerivingVia.hs" 25 1 25 1+ , SrcSpan "tests/examples/DerivingVia.hs" 26 1 26 1+ , SrcSpan "tests/examples/DerivingVia.hs" 27 1 27 1+ , SrcSpan "tests/examples/DerivingVia.hs" 28 1 28 1+ , SrcSpan "tests/examples/DerivingVia.hs" 29 1 29 1+ , SrcSpan "tests/examples/DerivingVia.hs" 30 1 30 1+ , SrcSpan "tests/examples/DerivingVia.hs" 32 1 32 1+ , SrcSpan "tests/examples/DerivingVia.hs" 33 1 33 1+ , SrcSpan "tests/examples/DerivingVia.hs" 34 1 34 1+ , SrcSpan "tests/examples/DerivingVia.hs" 36 1 36 1+ , SrcSpan "tests/examples/DerivingVia.hs" 42 1 42 1+ , SrcSpan "tests/examples/DerivingVia.hs" 50 1 50 1+ , SrcSpan "tests/examples/DerivingVia.hs" 52 1 52 1+ , SrcSpan "tests/examples/DerivingVia.hs" 55 1 55 1+ , SrcSpan "tests/examples/DerivingVia.hs" 58 1 58 1+ , SrcSpan "tests/examples/DerivingVia.hs" 66 1 66 1+ , SrcSpan "tests/examples/DerivingVia.hs" 69 1 69 1+ , SrcSpan "tests/examples/DerivingVia.hs" 72 1 72 1+ , SrcSpan "tests/examples/DerivingVia.hs" 74 1 74 1+ , SrcSpan "tests/examples/DerivingVia.hs" 75 1 75 1+ , SrcSpan "tests/examples/DerivingVia.hs" 76 1 76 1+ , SrcSpan "tests/examples/DerivingVia.hs" 84 1 84 1+ , SrcSpan "tests/examples/DerivingVia.hs" 87 1 87 1+ , SrcSpan "tests/examples/DerivingVia.hs" 91 1 91 1+ , SrcSpan "tests/examples/DerivingVia.hs" 95 1 95 1+ , SrcSpan "tests/examples/DerivingVia.hs" 99 1 99 1+ , SrcSpan "tests/examples/DerivingVia.hs" 112 1 112 1+ , SrcSpan "tests/examples/DerivingVia.hs" 115 1 115 1+ , SrcSpan "tests/examples/DerivingVia.hs" 119 1 119 1+ , SrcSpan "tests/examples/DerivingVia.hs" 123 1 123 1+ , SrcSpan "tests/examples/DerivingVia.hs" 127 1 127 1+ , SrcSpan "tests/examples/DerivingVia.hs" 128 1 128 1+ , SrcSpan "tests/examples/DerivingVia.hs" 132 1 132 1+ , SrcSpan "tests/examples/DerivingVia.hs" 137 1 137 1+ , SrcSpan "tests/examples/DerivingVia.hs" 146 1 146 1+ , SrcSpan "tests/examples/DerivingVia.hs" 157 1 157 1+ , SrcSpan "tests/examples/DerivingVia.hs" 160 1 160 1+ , SrcSpan "tests/examples/DerivingVia.hs" 162 1 162 1+ , SrcSpan "tests/examples/DerivingVia.hs" 165 1 165 1+ , SrcSpan "tests/examples/DerivingVia.hs" 171 1 171 1+ , SrcSpan "tests/examples/DerivingVia.hs" 172 1 172 1+ , SrcSpan "tests/examples/DerivingVia.hs" 173 1 173 1+ , SrcSpan "tests/examples/DerivingVia.hs" 174 1 174 1+ , SrcSpan "tests/examples/DerivingVia.hs" 175 1 175 1+ , SrcSpan "tests/examples/DerivingVia.hs" 176 1 176 1+ , SrcSpan "tests/examples/DerivingVia.hs" 177 1 177 1+ , SrcSpan "tests/examples/DerivingVia.hs" 178 1 178 1+ , SrcSpan "tests/examples/DerivingVia.hs" 179 1 179 1+ , SrcSpan "tests/examples/DerivingVia.hs" 181 1 181 1+ , SrcSpan "tests/examples/DerivingVia.hs" 190 1 190 1+ , SrcSpan "tests/examples/DerivingVia.hs" 193 1 193 1+ , SrcSpan "tests/examples/DerivingVia.hs" 201 1 201 1+ , SrcSpan "tests/examples/DerivingVia.hs" 205 1 205 1+ , SrcSpan "tests/examples/DerivingVia.hs" 221 1 221 1+ , SrcSpan "tests/examples/DerivingVia.hs" 224 1 224 1+ , SrcSpan "tests/examples/DerivingVia.hs" 230 1 230 1+ , SrcSpan "tests/examples/DerivingVia.hs" 233 1 233 1+ , SrcSpan "tests/examples/DerivingVia.hs" 236 1 236 1+ , SrcSpan "tests/examples/DerivingVia.hs" 239 1 239 1+ , SrcSpan "tests/examples/DerivingVia.hs" 244 1 244 1+ , SrcSpan "tests/examples/DerivingVia.hs" 251 1 251 1+ , SrcSpan "tests/examples/DerivingVia.hs" 258 1 258 1+ , SrcSpan "tests/examples/DerivingVia.hs" 265 1 265 1+ , SrcSpan "tests/examples/DerivingVia.hs" 268 1 268 1+ , SrcSpan "tests/examples/DerivingVia.hs" 269 1 269 1+ , SrcSpan "tests/examples/DerivingVia.hs" 270 1 270 1+ , SrcSpan "tests/examples/DerivingVia.hs" 272 1 272 1+ , SrcSpan "tests/examples/DerivingVia.hs" 276 1 276 1+ , SrcSpan "tests/examples/DerivingVia.hs" 280 1 280 1+ , SrcSpan "tests/examples/DerivingVia.hs" 284 1 284 1+ , SrcSpan "tests/examples/DerivingVia.hs" 288 1 288 1+ , SrcSpan "tests/examples/DerivingVia.hs" 293 1 293 1+ , SrcSpan "tests/examples/DerivingVia.hs" 303 1 303 1+ , SrcSpan "tests/examples/DerivingVia.hs" 309 1 309 1+ , SrcSpan "tests/examples/DerivingVia.hs" 312 1 312 1+ , SrcSpan "tests/examples/DerivingVia.hs" 321 1 321 1+ , SrcSpan "tests/examples/DerivingVia.hs" 327 1 327 1+ , SrcSpan "tests/examples/DerivingVia.hs" 330 1 330 1+ , SrcSpan "tests/examples/DerivingVia.hs" 332 1 332 1+ , SrcSpan "tests/examples/DerivingVia.hs" 336 1 336 1+ , SrcSpan "tests/examples/DerivingVia.hs" 337 1 337 1+ , SrcSpan "tests/examples/DerivingVia.hs" 338 1 338 1+ , SrcSpan "tests/examples/DerivingVia.hs" 345 1 345 1+ , SrcSpan "tests/examples/DerivingVia.hs" 350 1 350 1+ , SrcSpan "tests/examples/DerivingVia.hs" 353 1 353 1+ , SrcSpan "tests/examples/DerivingVia.hs" 358 1 358 1+ , SrcSpan "tests/examples/DerivingVia.hs" 359 1 359 1+ , SrcSpan "tests/examples/DerivingVia.hs" 361 1 361 1+ , SrcSpan "tests/examples/DerivingVia.hs" 363 1 363 1+ , SrcSpan "tests/examples/DerivingVia.hs" 365 1 365 1+ , SrcSpan "tests/examples/DerivingVia.hs" 367 1 367 1+ , SrcSpan "tests/examples/DerivingVia.hs" 369 1 369 1+ , SrcSpan "tests/examples/DerivingVia.hs" 371 1 371 1+ , SrcSpan "tests/examples/DerivingVia.hs" 373 1 373 1+ , SrcSpan "tests/examples/DerivingVia.hs" 380 1 380 1+ , SrcSpan "tests/examples/DerivingVia.hs" 388 1 388 1+ , SrcSpan "tests/examples/DerivingVia.hs" 395 1 395 1+ , SrcSpan "tests/examples/DerivingVia.hs" 401 1 401 1+ , SrcSpan "tests/examples/DerivingVia.hs" 405 1 405 1+ , SrcSpan "tests/examples/DerivingVia.hs" 406 1 406 1+ , SrcSpan "tests/examples/DerivingVia.hs" 407 1 407 1+ , SrcSpan "tests/examples/DerivingVia.hs" 409 1 409 1+ , SrcSpan "tests/examples/DerivingVia.hs" 413 1 413 1+ , SrcSpan "tests/examples/DerivingVia.hs" 425 1 425 1+ , SrcSpan "tests/examples/DerivingVia.hs" 427 1 427 1+ , SrcSpan "tests/examples/DerivingVia.hs" 435 1 435 1+ , SrcSpan "tests/examples/DerivingVia.hs" 437 1 437 1+ , SrcSpan "tests/examples/DerivingVia.hs" 439 1 439 1+ , SrcSpan "tests/examples/DerivingVia.hs" 441 1 441 1+ , SrcSpan "tests/examples/DerivingVia.hs" 443 1 443 1+ , SrcSpan "tests/examples/DerivingVia.hs" 445 1 445 1+ , SrcSpan "tests/examples/DerivingVia.hs" 451 1 451 1+ , SrcSpan "tests/examples/DerivingVia.hs" 454 1 454 1+ , SrcSpan "tests/examples/DerivingVia.hs" 457 1 457 1+ , SrcSpan "tests/examples/DerivingVia.hs" 460 1 460 1+ , SrcSpan "tests/examples/DerivingVia.hs" 460 1 460 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 20 1 20 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 20 1 20 7+ , SrcSpan "tests/examples/DerivingVia.hs" 20 20 20 25+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 20 8 20 19+ , srcInfoPoints = []+ }+ "DerivingVia")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 1 1 1 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 1 1 1 13+ , SrcSpan "tests/examples/DerivingVia.hs" 1 33 1 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 1 14 1 32+ , srcInfoPoints = []+ }+ "DerivingStrategies"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 2 1 2 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 2 1 2 13+ , SrcSpan "tests/examples/DerivingVia.hs" 2 26 2 29+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 2 14 2 25+ , srcInfoPoints = []+ }+ "DerivingVia"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 3 1 3 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 3 1 3 13+ , SrcSpan "tests/examples/DerivingVia.hs" 3 41 3 44+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 3 14 3 40+ , srcInfoPoints = []+ }+ "GeneralizedNewtypeDeriving"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 4 1 4 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 4 1 4 13+ , SrcSpan "tests/examples/DerivingVia.hs" 4 29 4 32+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 4 14 4 28+ , srcInfoPoints = []+ }+ "KindSignatures"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 5 1 5 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 5 1 5 13+ , SrcSpan "tests/examples/DerivingVia.hs" 5 25 5 28+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 5 14 5 24+ , srcInfoPoints = []+ }+ "RankNTypes"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 6 1 6 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 6 1 6 13+ , SrcSpan "tests/examples/DerivingVia.hs" 6 33 6 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 6 14 6 32+ , srcInfoPoints = []+ }+ "StandaloneDeriving"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 7 1 7 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 7 1 7 13+ , SrcSpan "tests/examples/DerivingVia.hs" 7 27 7 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 7 14 7 26+ , srcInfoPoints = []+ }+ "InstanceSigs"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 8 1 8 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 8 1 8 13+ , SrcSpan "tests/examples/DerivingVia.hs" 8 25 8 28+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 8 14 8 24+ , srcInfoPoints = []+ }+ "TypeInType"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 9 1 9 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 9 1 9 13+ , SrcSpan "tests/examples/DerivingVia.hs" 9 20 9 23+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 9 14 9 19+ , srcInfoPoints = []+ }+ "GADTs"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 10 1 10 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 10 1 10 13+ , SrcSpan "tests/examples/DerivingVia.hs" 10 31 10 34+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 10 14 10 30+ , srcInfoPoints = []+ }+ "TypeApplications"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 11 1 11 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 11 1 11 13+ , SrcSpan "tests/examples/DerivingVia.hs" 11 30 11 33+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 11 14 11 29+ , srcInfoPoints = []+ }+ "ConstraintKinds"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 12 1 12 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 12 1 12 13+ , SrcSpan "tests/examples/DerivingVia.hs" 12 36 12 39+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 12 14 12 35+ , srcInfoPoints = []+ }+ "MultiParamTypeClasses"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 13 1 13 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 13 1 13 13+ , SrcSpan "tests/examples/DerivingVia.hs" 13 25 13 28+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 13 14 13 24+ , srcInfoPoints = []+ }+ "MultiWayIf"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 14 1 14 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 14 1 14 13+ , SrcSpan "tests/examples/DerivingVia.hs" 14 28 14 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 14 14 14 27+ , srcInfoPoints = []+ }+ "TypeOperators"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 15 1 15 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 15 1 15 13+ , SrcSpan "tests/examples/DerivingVia.hs" 15 34 15 37+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 15 14 15 33+ , srcInfoPoints = []+ }+ "ScopedTypeVariables"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 16 1 16 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 16 1 16 13+ , SrcSpan "tests/examples/DerivingVia.hs" 16 32 16 35+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 16 14 16 31+ , srcInfoPoints = []+ }+ "FlexibleInstances"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 17 1 17 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 17 1 17 13+ , SrcSpan "tests/examples/DerivingVia.hs" 17 27 17 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 17 14 17 26+ , srcInfoPoints = []+ }+ "TypeFamilies"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 18 1 18 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 18 1 18 13+ , SrcSpan "tests/examples/DerivingVia.hs" 18 31 18 34+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 18 14 18 30+ , srcInfoPoints = []+ }+ "FlexibleContexts"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 19 1 19 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 19 1 19 13+ , SrcSpan "tests/examples/DerivingVia.hs" 19 35 19 38+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 19 14 19 34+ , srcInfoPoints = []+ }+ "UndecidableInstances"+ ]+ ]+ [ ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 22 1 22 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 22 1 22 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 22 8 22 17+ , srcInfoPoints = []+ }+ "Data.Void"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 23 1 23 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 23 1 23 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 23 8 23 20+ , srcInfoPoints = []+ }+ "Data.Complex"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 24 1 24 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 24 1 24 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 24 8 24 26+ , srcInfoPoints = []+ }+ "Data.Functor.Const"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 25 1 25 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 25 1 25 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 25 8 25 29+ , srcInfoPoints = []+ }+ "Data.Functor.Identity"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 26 1 26 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 26 1 26 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 26 8 26 18+ , srcInfoPoints = []+ }+ "Data.Ratio"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 27 1 27 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 27 1 27 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 27 8 27 28+ , srcInfoPoints = []+ }+ "Control.Monad.Reader"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 28 1 28 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 28 1 28 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 28 8 28 27+ , srcInfoPoints = []+ }+ "Control.Monad.State"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 29 1 29 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 29 1 29 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 29 8 29 28+ , srcInfoPoints = []+ }+ "Control.Monad.Writer"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 30 1 30 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 30 1 30 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 30 8 30 27+ , srcInfoPoints = []+ }+ "Control.Applicative"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 30 28 30 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 30 28 30 34+ , SrcSpan "tests/examples/DerivingVia.hs" 30 35 30 36+ , SrcSpan "tests/examples/DerivingVia.hs" 30 52 30 53+ ]+ }+ True+ [ IThingAll+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 30 36 30 52+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 30 48 30 49+ , SrcSpan "tests/examples/DerivingVia.hs" 30 49 30 51+ , SrcSpan "tests/examples/DerivingVia.hs" 30 51 30 52+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 30 36 30 48+ , srcInfoPoints = []+ }+ "WrappedMonad")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 32 1 32 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 32 1 32 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 32 8 32 22+ , srcInfoPoints = []+ }+ "Data.Bifunctor"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 33 1 33 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 33 1 33 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 33 8 33 19+ , srcInfoPoints = []+ }+ "Data.Monoid"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 34 1 34 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 34 1 34 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 34 8 34 17+ , srcInfoPoints = []+ }+ "Data.Kind"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ ]+ [ TypeDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 1 36 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 36 1 36 5+ , SrcSpan "tests/examples/DerivingVia.hs" 36 13 36 14+ ]+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 6 36 12+ , srcInfoPoints = []+ }+ (DHInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 6 36 12+ , srcInfoPoints = []+ }+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 6 36 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 6 36 7+ , srcInfoPoints = []+ }+ "f"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 8 36 10+ , srcInfoPoints = []+ }+ "~>"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 11 36 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 11 36 12+ , srcInfoPoints = []+ }+ "g")))+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 15 36 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 36 15 36 21+ , SrcSpan "tests/examples/DerivingVia.hs" 36 24 36 25+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 22 36 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 22 36 24+ , srcInfoPoints = []+ }+ "xx")+ ])+ Nothing+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 26 36 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 36 31 36 33 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 26 36 30+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 26 36 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 26 36 27+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 28 36 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 28 36 30+ , srcInfoPoints = []+ }+ "xx")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 34 36 38+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 34 36 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 34 36 35+ , srcInfoPoints = []+ }+ "g"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 36 36 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 36 36 36 38+ , srcInfoPoints = []+ }+ "xx")))))+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 1 43 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 42 12 42 13 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 1 42 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 6 42 11+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 6 42 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 6 42 9+ , srcInfoPoints = []+ }+ "Foo"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 10 42 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 10 42 11+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 14 42 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 14 42 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 14 42 19+ , srcInfoPoints = []+ }+ "MkFoo")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 20 42 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 20 42 21+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 22 42 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 42 22 42 23+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 43 3 43 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 43 3 43 11 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 44 8 44 11+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 44 12 44 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 44 12 44 13+ , SrcSpan "tests/examples/DerivingVia.hs" 44 29 44 30+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 44 13 44 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 44 13 44 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 13 44 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 13 44 21+ , srcInfoPoints = []+ }+ "Identity")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 44 22 44 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 44 22 44 23+ , SrcSpan "tests/examples/DerivingVia.hs" 44 28 44 29+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 23 44 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 23 44 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 23 44 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 23 44 26+ , srcInfoPoints = []+ }+ "Foo")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 27 44 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 44 27 44 28+ , srcInfoPoints = []+ }+ "a"))))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 43 12 43 16+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 43 12 43 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 43 12 43 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 43 12 43 16+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 1 50 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 50 20 50 21 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 1 50 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 9 50 19+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 9 50 17+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 9 50 15+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 9 50 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 9 50 13+ , srcInfoPoints = []+ }+ "Flip"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 14 50 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 14 50 15+ , srcInfoPoints = []+ }+ "p")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 16 50 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 16 50 17+ , srcInfoPoints = []+ }+ "a")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 18 50 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 18 50 19+ , srcInfoPoints = []+ }+ "b")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 22 50 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 50 27 50 28+ , SrcSpan "tests/examples/DerivingVia.hs" 50 46 50 47+ ]+ }+ Nothing+ Nothing+ (RecDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 22 50 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 50 27 50 28+ , SrcSpan "tests/examples/DerivingVia.hs" 50 46 50 47+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 22 50 26+ , srcInfoPoints = []+ }+ "Flip")+ [ FieldDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 29 50 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 50 37 50 39 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 29 50 36+ , srcInfoPoints = []+ }+ "runFlip"+ ]+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 40 50 45+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 40 50 43+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 40 50 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 50 40 50 41+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 42 50 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 50 42 50 43+ , srcInfoPoints = []+ }+ "b")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 44 50 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 50 44 50 45+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ []+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 1 55 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 52 1 52 9+ , SrcSpan "tests/examples/DerivingVia.hs" 52 44 52 49+ , SrcSpan "tests/examples/DerivingVia.hs" 53 3 53 3+ , SrcSpan "tests/examples/DerivingVia.hs" 55 1 55 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 10 52 43+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 10 52 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 52 22 52 24 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 10 52 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 52 22 52 24 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 10 52 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 52 22 52 24 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 10 52 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 52 22 52 24 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 10 52 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 52 10 52 19+ , srcInfoPoints = []+ }+ "Bifunctor")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 20 52 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 20 52 21+ , srcInfoPoints = []+ }+ "p"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 25 52 43+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 25 52 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 25 52 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 25 52 34+ , srcInfoPoints = []+ }+ "Bifunctor")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 35 52 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 52 35 52 36+ , SrcSpan "tests/examples/DerivingVia.hs" 52 42 52 43+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 36 52 42+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 36 52 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 36 52 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 36 52 40+ , srcInfoPoints = []+ }+ "Flip")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 41 52 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 52 41 52 42+ , srcInfoPoints = []+ }+ "p"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 3 53 41+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 3 53 41+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 3 53 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 3 53 8+ , srcInfoPoints = []+ }+ "bimap")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 9 53 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 9 53 10+ , srcInfoPoints = []+ }+ "f")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 11 53 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 11 53 12+ , srcInfoPoints = []+ }+ "g")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 13 53 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 53 13 53 14 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 53 15 53 41+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 15 53 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 15 53 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 15 53 19+ , srcInfoPoints = []+ }+ "Flip")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 20 53 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 20 53 21+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 20 53 21+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 22 53 41+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 22 53 31+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 22 53 29+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 22 53 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 53 22 53 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 53 22 53 27+ , srcInfoPoints = []+ }+ "bimap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 28 53 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 53 28 53 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 53 28 53 29+ , srcInfoPoints = []+ }+ "g"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 30 53 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 30 53 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 53 30 53 31+ , srcInfoPoints = []+ }+ "f"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 32 53 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 32 53 33+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 32 53 33+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 34 53 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 34 53 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 53 34 53 41+ , srcInfoPoints = []+ }+ "runFlip"))))))+ Nothing+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 1 58 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 55 1 55 9+ , SrcSpan "tests/examples/DerivingVia.hs" 55 44 55 49+ , SrcSpan "tests/examples/DerivingVia.hs" 56 3 56 3+ , SrcSpan "tests/examples/DerivingVia.hs" 58 1 58 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 10 55 43+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 10 55 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 55 22 55 24 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 10 55 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 55 22 55 24 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 10 55 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 55 22 55 24 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 10 55 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 55 22 55 24 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 10 55 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 55 10 55 19+ , srcInfoPoints = []+ }+ "Bifunctor")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 20 55 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 20 55 21+ , srcInfoPoints = []+ }+ "p"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 25 55 43+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 25 55 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 25 55 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 25 55 32+ , srcInfoPoints = []+ }+ "Functor")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 33 55 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 55 33 55 34+ , SrcSpan "tests/examples/DerivingVia.hs" 55 42 55 43+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 34 55 42+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 34 55 40+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 34 55 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 34 55 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 55 34 55 38+ , srcInfoPoints = []+ }+ "Flip")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 39 55 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 39 55 40+ , srcInfoPoints = []+ }+ "p")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 41 55 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 55 41 55 42+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 3 56 36+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 3 56 36+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 3 56 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 3 56 7+ , srcInfoPoints = []+ }+ "fmap")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 8 56 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 8 56 9+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 10 56 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 56 10 56 11 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 56 12 56 36+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 12 56 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 12 56 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 12 56 16+ , srcInfoPoints = []+ }+ "Flip")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 17 56 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 17 56 18+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 17 56 18+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 19 56 36+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 19 56 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 19 56 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 19 56 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 56 19 56 24+ , srcInfoPoints = []+ }+ "first")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 25 56 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 25 56 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 56 25 56 26+ , srcInfoPoints = []+ }+ "f"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 27 56 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 27 56 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 27 56 28+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 29 56 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 29 56 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 56 29 56 36+ , srcInfoPoints = []+ }+ "runFlip"))))))+ Nothing+ ])+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 1 59 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 58 15 58 16 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 1 58 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 9 58 14+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 9 58 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 9 58 12+ , srcInfoPoints = []+ }+ "Bar"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 13 58 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 13 58 14+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 17 58 37+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 17 58 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 17 58 22+ , srcInfoPoints = []+ }+ "MkBar")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 23 58 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 58 23 58 24+ , SrcSpan "tests/examples/DerivingVia.hs" 58 36 58 37+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 24 58 36+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 24 58 32+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 24 58 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 58 24 58 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 58 24 58 30+ , srcInfoPoints = []+ }+ "Either")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 31 58 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 58 31 58 32+ , srcInfoPoints = []+ }+ "a")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 33 58 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 58 33 58 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 58 33 58 36+ , srcInfoPoints = []+ }+ "Int"))))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 59 3 59 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 59 3 59 11 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 60 8 60 11+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 60 12 60 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 60 12 60 13+ , SrcSpan "tests/examples/DerivingVia.hs" 60 28 60 29+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 60 13 60 28+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 60 13 60 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 13 60 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 13 60 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 13 60 17+ , srcInfoPoints = []+ }+ "Flip")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 18 60 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 18 60 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 18 60 24+ , srcInfoPoints = []+ }+ "Either"))))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 60 25 60 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 25 60 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 60 25 60 28+ , srcInfoPoints = []+ }+ "Int")))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 59 12 59 19+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 59 12 59 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 59 12 59 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 59 12 59 19+ , srcInfoPoints = []+ }+ "Functor")))+ ]+ ]+ , TypeDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 1 66 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 66 1 66 5+ , SrcSpan "tests/examples/DerivingVia.hs" 66 13 66 14+ ]+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 6 66 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 6 66 12+ , srcInfoPoints = []+ }+ "MTrans"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 15 66 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 66 30 66 32 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 15 66 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 66 15 66 16+ , SrcSpan "tests/examples/DerivingVia.hs" 66 28 66 29+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 16 66 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 66 21 66 23 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 16 66 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 16 66 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 16 66 20+ , srcInfoPoints = []+ }+ "Type")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 24 66 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 24 66 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 24 66 28+ , srcInfoPoints = []+ }+ "Type")))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 33 66 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 66 33 66 34+ , SrcSpan "tests/examples/DerivingVia.hs" 66 46 66 47+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 34 66 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 66 39 66 41 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 34 66 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 34 66 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 34 66 38+ , srcInfoPoints = []+ }+ "Type")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 42 66 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 42 66 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 66 42 66 46+ , srcInfoPoints = []+ }+ "Type"))))))+ , GDataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 69 1 72 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 69 13 69 18+ , SrcSpan "tests/examples/DerivingVia.hs" 70 3 70 3+ , SrcSpan "tests/examples/DerivingVia.hs" 72 1 72 0+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 69 1 69 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 69 6 69 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 69 6 69 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 69 6 69 10+ , srcInfoPoints = []+ }+ "Dict"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 69 11 69 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 69 11 69 12+ , srcInfoPoints = []+ }+ "c")))+ Nothing+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 3 70 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 70 8 70 10 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 3 70 7+ , srcInfoPoints = []+ }+ "Dict")+ Nothing+ Nothing+ Nothing+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 11 70 22+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 11 70 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 70 13 70 15 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 11 70 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 70 13 70 15 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 11 70 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 70 13 70 15 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 70 11 70 12+ , srcInfoPoints = []+ }+ "c")))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 16 70 22+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 16 70 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 16 70 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 16 70 20+ , srcInfoPoints = []+ }+ "Dict")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 21 70 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 70 21 70 22+ , srcInfoPoints = []+ }+ "c"))))+ ]+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 1 72 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 72 16 72 17 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 1 72 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 9 72 15+ , srcInfoPoints = []+ }+ (DHInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 9 72 15+ , srcInfoPoints = []+ }+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 9 72 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 9 72 10+ , srcInfoPoints = []+ }+ "a"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 11 72 13+ , srcInfoPoints = []+ }+ ":-"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 14 72 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 14 72 15+ , srcInfoPoints = []+ }+ "b")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 18 72 35+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 18 72 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 18 72 21+ , srcInfoPoints = []+ }+ "Sub")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 22 72 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 72 22 72 23+ , SrcSpan "tests/examples/DerivingVia.hs" 72 34 72 35+ ]+ }+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 23 72 34+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 23 72 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 72 25 72 27 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 72 23 72 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 72 25 72 27 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 72 23 72 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 72 25 72 27 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 72 23 72 24+ , srcInfoPoints = []+ }+ "a")))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 28 72 34+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 28 72 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 72 28 72 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 72 28 72 32+ , srcInfoPoints = []+ }+ "Dict")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 72 33 72 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 72 33 72 34+ , srcInfoPoints = []+ }+ "b"))))+ ])+ ]+ []+ , InfixDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 74 1 74 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 74 8 74 9 ]+ }+ (AssocLeft+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 74 1 74 7+ , srcInfoPoints = []+ })+ (Just 1)+ [ VarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 74 10 74 12+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 74 10 74 12+ , srcInfoPoints = []+ }+ "\\\\")+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 1 75 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 6 75 8 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 1 75 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 1 75 2+ , SrcSpan "tests/examples/DerivingVia.hs" 75 2 75 4+ , SrcSpan "tests/examples/DerivingVia.hs" 75 4 75 5+ ]+ }+ "\\\\"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 9 75 39+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 9 75 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 11 75 13 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 9 75 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 11 75 13 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 9 75 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 11 75 13 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 9 75 10+ , srcInfoPoints = []+ }+ "a")))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 14 75 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 23 75 25 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 14 75 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 14 75 15+ , SrcSpan "tests/examples/DerivingVia.hs" 75 21 75 22+ ]+ }+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 15 75 21+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 15 75 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 17 75 19 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 15 75 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 17 75 19 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 75 15 75 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 17 75 19 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 75 15 75 16+ , srcInfoPoints = []+ }+ "b")))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 20 75 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 20 75 21+ , srcInfoPoints = []+ }+ "r"))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 26 75 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 35 75 37 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 26 75 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 75 26 75 27+ , SrcSpan "tests/examples/DerivingVia.hs" 75 33 75 34+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 27 75 33+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 27 75 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 27 75 28+ , srcInfoPoints = []+ }+ "a"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 29 75 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 29 75 31+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 75 29 75 31+ , srcInfoPoints = []+ }+ ":-")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 32 75 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 32 75 33+ , srcInfoPoints = []+ }+ "b"))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 38 75 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 75 38 75 39+ , srcInfoPoints = []+ }+ "r")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 1 76 18+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 1 76 18+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 1 76 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 1 76 2+ , srcInfoPoints = []+ }+ "r"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 3 76 5+ , srcInfoPoints = []+ }+ "\\\\")+ [ PApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 6 76 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 6 76 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 6 76 9+ , srcInfoPoints = []+ }+ "Sub"))+ [ PApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 10 76 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 10 76 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 10 76 14+ , srcInfoPoints = []+ }+ "Dict"))+ []+ ]+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 15 76 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 76 15 76 16 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 17 76 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 17 76 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 76 17 76 18+ , srcInfoPoints = []+ }+ "r"))))+ Nothing+ ]+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 1 85 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 84 1 84 6+ , SrcSpan "tests/examples/DerivingVia.hs" 84 38 84 43+ , SrcSpan "tests/examples/DerivingVia.hs" 85 3 85 3+ , SrcSpan "tests/examples/DerivingVia.hs" 87 1 87 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 7 84 37+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 7 84 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 7 84 19+ , srcInfoPoints = []+ }+ "LiftingMonad"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 20 84 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 84 20 84 21+ , SrcSpan "tests/examples/DerivingVia.hs" 84 27 84 29+ , SrcSpan "tests/examples/DerivingVia.hs" 84 36 84 37+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 21 84 26+ , srcInfoPoints = []+ }+ "trans")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 30 84 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 30 84 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 84 30 84 36+ , srcInfoPoints = []+ }+ "MTrans")))))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 3 85 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 85 9 85 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 3 85 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 85 9 85 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 3 85 8+ , srcInfoPoints = []+ }+ "proof"+ ]+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 12 85 38+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 12 85 19+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 12 85 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 12 85 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 12 85 17+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 18 85 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 18 85 19+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 20 85 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 20 85 22+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 20 85 22+ , srcInfoPoints = []+ }+ ":-")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 23 85 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 23 85 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 23 85 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 23 85 28+ , srcInfoPoints = []+ }+ "Monad")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 85 29 85 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 85 29 85 30+ , SrcSpan "tests/examples/DerivingVia.hs" 85 37 85 38+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 30 85 37+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 30 85 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 30 85 35+ , srcInfoPoints = []+ }+ "trans"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 36 85 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 85 36 85 37+ , srcInfoPoints = []+ }+ "m")))))))+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 1 91 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 87 1 87 9+ , SrcSpan "tests/examples/DerivingVia.hs" 87 44 87 49+ , SrcSpan "tests/examples/DerivingVia.hs" 88 3 88 3+ , SrcSpan "tests/examples/DerivingVia.hs" 89 3 89 3+ , SrcSpan "tests/examples/DerivingVia.hs" 91 1 91 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 10 87 43+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 10 87 43+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 10 87 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 10 87 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 10 87 22+ , srcInfoPoints = []+ }+ "LiftingMonad")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 23 87 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 87 23 87 24+ , SrcSpan "tests/examples/DerivingVia.hs" 87 33 87 35+ , SrcSpan "tests/examples/DerivingVia.hs" 87 42 87 43+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 24 87 32+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 24 87 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 24 87 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 24 87 30+ , srcInfoPoints = []+ }+ "StateT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 31 87 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 31 87 32+ , srcInfoPoints = []+ }+ "s")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 36 87 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 36 87 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 87 36 87 42+ , srcInfoPoints = []+ }+ "MTrans"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 3 88 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 88 9 88 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 3 88 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 88 9 88 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 3 88 8+ , srcInfoPoints = []+ }+ "proof"+ ]+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 12 88 41+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 12 88 19+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 12 88 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 12 88 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 12 88 17+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 18 88 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 18 88 19+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 20 88 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 20 88 22+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 20 88 22+ , srcInfoPoints = []+ }+ ":-")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 23 88 41+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 23 88 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 23 88 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 23 88 28+ , srcInfoPoints = []+ }+ "Monad")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 88 29 88 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 88 29 88 30+ , SrcSpan "tests/examples/DerivingVia.hs" 88 40 88 41+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 30 88 40+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 30 88 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 30 88 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 30 88 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 88 30 88 36+ , srcInfoPoints = []+ }+ "StateT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 37 88 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 37 88 38+ , srcInfoPoints = []+ }+ "s")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 39 88 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 88 39 88 40+ , srcInfoPoints = []+ }+ "m")))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 3 89 19+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 3 89 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 3 89 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 3 89 8+ , srcInfoPoints = []+ }+ "proof"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 9 89 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 89 9 89 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 11 89 19+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 11 89 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 89 11 89 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 89 11 89 14+ , srcInfoPoints = []+ }+ "Sub")))+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 89 15 89 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 89 15 89 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 89 15 89 19+ , srcInfoPoints = []+ }+ "Dict")))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 1 95 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 91 1 91 9+ , SrcSpan "tests/examples/DerivingVia.hs" 91 57 91 62+ , SrcSpan "tests/examples/DerivingVia.hs" 92 3 92 3+ , SrcSpan "tests/examples/DerivingVia.hs" 93 3 93 3+ , SrcSpan "tests/examples/DerivingVia.hs" 95 1 95 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 10 91 56+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 10 91 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 91 19 91 21 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 10 91 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 91 19 91 21 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 10 91 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 91 19 91 21 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 10 91 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 91 19 91 21 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 10 91 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 91 10 91 16+ , srcInfoPoints = []+ }+ "Monoid")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 17 91 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 17 91 18+ , srcInfoPoints = []+ }+ "w"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 22 91 56+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 22 91 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 22 91 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 22 91 34+ , srcInfoPoints = []+ }+ "LiftingMonad")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 35 91 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 91 35 91 36+ , SrcSpan "tests/examples/DerivingVia.hs" 91 46 91 48+ , SrcSpan "tests/examples/DerivingVia.hs" 91 55 91 56+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 36 91 45+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 36 91 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 36 91 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 36 91 43+ , srcInfoPoints = []+ }+ "WriterT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 44 91 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 44 91 45+ , srcInfoPoints = []+ }+ "w")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 49 91 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 49 91 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 91 49 91 55+ , srcInfoPoints = []+ }+ "MTrans"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 3 92 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 92 9 92 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 3 92 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 92 9 92 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 3 92 8+ , srcInfoPoints = []+ }+ "proof"+ ]+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 12 92 42+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 12 92 19+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 12 92 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 12 92 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 12 92 17+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 18 92 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 18 92 19+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 20 92 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 20 92 22+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 20 92 22+ , srcInfoPoints = []+ }+ ":-")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 23 92 42+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 23 92 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 23 92 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 23 92 28+ , srcInfoPoints = []+ }+ "Monad")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 92 29 92 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 92 29 92 30+ , SrcSpan "tests/examples/DerivingVia.hs" 92 41 92 42+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 30 92 41+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 30 92 39+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 30 92 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 30 92 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 92 30 92 37+ , srcInfoPoints = []+ }+ "WriterT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 38 92 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 38 92 39+ , srcInfoPoints = []+ }+ "w")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 40 92 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 92 40 92 41+ , srcInfoPoints = []+ }+ "m")))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 3 93 19+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 3 93 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 3 93 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 3 93 8+ , srcInfoPoints = []+ }+ "proof"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 9 93 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 93 9 93 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 11 93 19+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 11 93 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 93 11 93 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 93 11 93 14+ , srcInfoPoints = []+ }+ "Sub")))+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 93 15 93 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 93 15 93 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 93 15 93 19+ , srcInfoPoints = []+ }+ "Dict")))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 1 99 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 95 1 95 9+ , SrcSpan "tests/examples/DerivingVia.hs" 95 102 95 107+ , SrcSpan "tests/examples/DerivingVia.hs" 96 3 96 3+ , SrcSpan "tests/examples/DerivingVia.hs" 97 3 97 3+ , SrcSpan "tests/examples/DerivingVia.hs" 99 1 99 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 10 95 101+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 10 95 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 95 10 95 11+ , SrcSpan "tests/examples/DerivingVia.hs" 95 29 95 30+ , SrcSpan "tests/examples/DerivingVia.hs" 95 50 95 51+ , SrcSpan "tests/examples/DerivingVia.hs" 95 52 95 54+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 11 95 29+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 11 95 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 11 95 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 11 95 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 11 95 23+ , srcInfoPoints = []+ }+ "LiftingMonad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 24 95 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 24 95 29+ , srcInfoPoints = []+ }+ "trans")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 31 95 50+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 31 95 50+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 31 95 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 31 95 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 31 95 43+ , srcInfoPoints = []+ }+ "LiftingMonad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 44 95 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 44 95 50+ , srcInfoPoints = []+ }+ "trans'")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 55 95 101+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 55 95 67+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 55 95 67+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 55 95 67+ , srcInfoPoints = []+ }+ "LiftingMonad")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 68 95 101+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 95 68 95 69+ , SrcSpan "tests/examples/DerivingVia.hs" 95 91 95 93+ , SrcSpan "tests/examples/DerivingVia.hs" 95 100 95 101+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 69 95 90+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 69 95 83+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 69 95 77+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 69 95 77+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 69 95 77+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 78 95 83+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 78 95 83+ , srcInfoPoints = []+ }+ "trans")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 84 95 90+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 95 84 95 90+ , srcInfoPoints = []+ }+ "trans'")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 94 95 100+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 94 95 100+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 95 94 95 100+ , srcInfoPoints = []+ }+ "MTrans"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 3 96 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 96 9 96 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 3 96 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 96 9 96 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 3 96 8+ , srcInfoPoints = []+ }+ "proof"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 12 96 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 96 12 96 18+ , SrcSpan "tests/examples/DerivingVia.hs" 96 20 96 21+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 19 96 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 19 96 20+ , srcInfoPoints = []+ }+ "m")+ ])+ Nothing+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 22 96 64+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 22 96 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 22 96 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 22 96 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 22 96 27+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 28 96 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 28 96 29+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 30 96 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 30 96 32+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 30 96 32+ , srcInfoPoints = []+ }+ ":-")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 96 33 96 64+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 33 96 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 33 96 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 33 96 38+ , srcInfoPoints = []+ }+ "Monad")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 39 96 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 96 39 96 40+ , SrcSpan "tests/examples/DerivingVia.hs" 96 63 96 64+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 40 96 63+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 40 96 61+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 40 96 54+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 96 40 96 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 96 40 96 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 96+ 40+ 96+ 48+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 96 49 96 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 96 49 96 54+ , srcInfoPoints = []+ }+ "trans")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 55 96 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 96 55 96 61+ , srcInfoPoints = []+ }+ "trans'")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 62 96 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 96 62 96 63+ , srcInfoPoints = []+ }+ "m"))))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 3 97 69+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 3 97 69+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 3 97 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 3 97 8+ , srcInfoPoints = []+ }+ "proof"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 9 97 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 97 9 97 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 11 97 69+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 11 97 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 11 97 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 11 97 14+ , srcInfoPoints = []+ }+ "Sub")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 97 15 97 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 97 15 97 16+ , SrcSpan "tests/examples/DerivingVia.hs" 97 68 97 69+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 16 97 68+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 16 97 48+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 16 97 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 16 97 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 16 97 20+ , srcInfoPoints = []+ }+ "Dict")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 21 97 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 21 97 23+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 21 97 23+ , srcInfoPoints = []+ }+ "\\\\")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 24 97 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 24 97 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 24 97 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 24 97 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 97+ 24+ 97+ 29+ , srcInfoPoints = []+ }+ "proof")))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 30 97 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 97 30 97 31+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 31 97 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 97+ 31+ 97+ 36+ , srcInfoPoints = []+ }+ "trans"))))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 37 97 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 97 37 97 38+ ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 38 97 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 97 38 97 39+ , SrcSpan+ "tests/examples/DerivingVia.hs" 97 47 97 48+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 39 97 47+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 97+ 39+ 97+ 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 97+ 39+ 97+ 45+ , srcInfoPoints = []+ }+ "trans'"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 97+ 46+ 97+ 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 97+ 46+ 97+ 47+ , srcInfoPoints = []+ }+ "m")))))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 49 97 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 49 97 51+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 49 97 51+ , srcInfoPoints = []+ }+ "\\\\")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 52 97 68+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 52 97 65+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 52 97 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 52 97 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 52 97 57+ , srcInfoPoints = []+ }+ "proof")))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 58 97 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 97 58 97 59+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 59 97 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 59 97 65+ , srcInfoPoints = []+ }+ "trans'"))))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 66 97 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 97 66 97 67 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 97 67 97 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 97 67 97 68+ , srcInfoPoints = []+ }+ "m"))))))))+ Nothing)+ ])+ , GDataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 99 1 109 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 99 15 99 17+ , SrcSpan "tests/examples/DerivingVia.hs" 99 25 99 30+ , SrcSpan "tests/examples/DerivingVia.hs" 100 3 100 3+ , SrcSpan "tests/examples/DerivingVia.hs" 101 3 101 3+ , SrcSpan "tests/examples/DerivingVia.hs" 101 3 101 3+ ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 99 1 99 8+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 99 9 99 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 99 9 99 14+ , srcInfoPoints = []+ }+ "Stack"))+ (Just+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 99 18 99 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 99 18 99 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 99 18 99 24+ , srcInfoPoints = []+ }+ "MTrans"))))+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 3 100 71+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 100 9 100 11 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 100 3 100 8+ , srcInfoPoints = []+ }+ "Stack")+ Nothing+ Nothing+ Nothing+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 12 100 71+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 100 59 100 61 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 12 100 58+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 12 100 56+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 12 100 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 12 100 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 12 100 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 12 100 19+ , srcInfoPoints = []+ }+ "ReaderT")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 20 100 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 20 100 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 20 100 23+ , srcInfoPoints = []+ }+ "Int"))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 24 100 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 100 24 100 25+ , SrcSpan "tests/examples/DerivingVia.hs" 100 55 100 56+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 25 100 55+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 25 100 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 25 100 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 25 100 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 25 100 31+ , srcInfoPoints = []+ }+ "StateT")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 32 100 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 32 100 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 32 100 36+ , srcInfoPoints = []+ }+ "Bool"))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 37 100 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 100 37 100 38+ , SrcSpan "tests/examples/DerivingVia.hs" 100 54 100 55+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 38 100 54+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 38 100 52+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 38 100 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 100 38 100 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 100 38 100 45+ , srcInfoPoints = []+ }+ "WriterT")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 46 100 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 100 46 100 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 100 46 100 52+ , srcInfoPoints = []+ }+ "String"))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 53 100 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 53 100 54+ , srcInfoPoints = []+ }+ "m")))))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 57 100 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 57 100 58+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 62 100 71+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 62 100 69+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 62 100 67+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 62 100 67+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 62 100 67+ , srcInfoPoints = []+ }+ "Stack")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 68 100 69+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 68 100 69+ , srcInfoPoints = []+ }+ "m")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 70 100 71+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 100 70 100 71+ , srcInfoPoints = []+ }+ "a"))))+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 101 3 108 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 101 3 101 11+ , SrcSpan "tests/examples/DerivingVia.hs" 102 5 102 6+ , SrcSpan "tests/examples/DerivingVia.hs" 103 5 103 6+ , SrcSpan "tests/examples/DerivingVia.hs" 104 5 104 6+ , SrcSpan "tests/examples/DerivingVia.hs" 105 5 105 6+ , SrcSpan "tests/examples/DerivingVia.hs" 106 5 106 6+ , SrcSpan "tests/examples/DerivingVia.hs" 107 5 107 6+ , SrcSpan "tests/examples/DerivingVia.hs" 108 5 108 6+ ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 101 12 101 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 102 7 102 14+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 102 7 102 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 102 7 102 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 102 7 102 14+ , srcInfoPoints = []+ }+ "Functor")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 103 7 103 18+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 103 7 103 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 103 7 103 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 103 7 103 18+ , srcInfoPoints = []+ }+ "Applicative")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 104 7 104 12+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 104 7 104 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 104 7 104 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 104 7 104 12+ , srcInfoPoints = []+ }+ "Monad")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 7 105 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 7 105 22+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 7 105 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 7 105 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 7 105 18+ , srcInfoPoints = []+ }+ "MonadReader")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 19 105 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 19 105 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 105 19 105 22+ , srcInfoPoints = []+ }+ "Int"))))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 7 106 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 7 106 22+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 7 106 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 7 106 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 7 106 17+ , srcInfoPoints = []+ }+ "MonadState")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 18 106 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 18 106 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 106 18 106 22+ , srcInfoPoints = []+ }+ "Bool"))))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 7 107 25+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 7 107 25+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 7 107 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 7 107 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 7 107 18+ , srcInfoPoints = []+ }+ "MonadWriter")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 19 107 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 19 107 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 107 19 107 25+ , srcInfoPoints = []+ }+ "String"))))+ ]+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 3 109 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 109 3 109 11+ , SrcSpan "tests/examples/DerivingVia.hs" 109 12 109 13+ , SrcSpan "tests/examples/DerivingVia.hs" 109 23 109 24+ , SrcSpan "tests/examples/DerivingVia.hs" 109 33 109 34+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 8 110 11+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 12 110 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 110 12 110 13+ , SrcSpan "tests/examples/DerivingVia.hs" 110 73 110 74+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 13 110 73+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 13 110 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 13 110 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 13 110 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 13 110 20+ , srcInfoPoints = []+ }+ "ReaderT")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 21 110 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 21 110 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 21 110 24+ , srcInfoPoints = []+ }+ "Int"))))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 25 110 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 110 25 110 26+ , SrcSpan "tests/examples/DerivingVia.hs" 110 26 110 34+ , SrcSpan "tests/examples/DerivingVia.hs" 110 34 110 35+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 25 110 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 110 25 110 26+ , SrcSpan "tests/examples/DerivingVia.hs" 110 26 110 34+ , SrcSpan "tests/examples/DerivingVia.hs" 110 34 110 35+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 26 110 34+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 36 110 73+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 36 110 47+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 36 110 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 36 110 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 36 110 42+ , srcInfoPoints = []+ }+ "StateT")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 43 110 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 43 110 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 43 110 47+ , srcInfoPoints = []+ }+ "Bool"))))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 48 110 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 110 48 110 49+ , SrcSpan "tests/examples/DerivingVia.hs" 110 49 110 57+ , SrcSpan "tests/examples/DerivingVia.hs" 110 57 110 58+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 48 110 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 110 48 110 49+ , SrcSpan "tests/examples/DerivingVia.hs" 110 49 110 57+ , SrcSpan "tests/examples/DerivingVia.hs" 110 57 110 58+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 49 110 57+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 59 110 73+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 59 110 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 59 110 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 59 110 66+ , srcInfoPoints = []+ }+ "WriterT")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 67 110 73+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 67 110 73+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 110 67 110 73+ , srcInfoPoints = []+ }+ "String")))))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 13 109 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 13 109 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 13 109 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 13 109 23+ , srcInfoPoints = []+ }+ "MonadTrans")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 25 109 33+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 25 109 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 25 109 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 109 25 109 33+ , srcInfoPoints = []+ }+ "MFunctor")))+ ]+ ]+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 1 113 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 112 1 112 6+ , SrcSpan "tests/examples/DerivingVia.hs" 112 34 112 39+ , SrcSpan "tests/examples/DerivingVia.hs" 113 3 113 3+ , SrcSpan "tests/examples/DerivingVia.hs" 115 1 115 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 7 112 33+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 7 112 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 7 112 15+ , srcInfoPoints = []+ }+ "MFunctor"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 16 112 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 112 16 112 17+ , SrcSpan "tests/examples/DerivingVia.hs" 112 23 112 25+ , SrcSpan "tests/examples/DerivingVia.hs" 112 32 112 33+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 17 112 22+ , srcInfoPoints = []+ }+ "trans")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 26 112 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 26 112 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 112 26 112 32+ , srcInfoPoints = []+ }+ "MTrans")))))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 3 113 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 9 113 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 3 113 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 9 113 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 113 3 113 8+ , srcInfoPoints = []+ }+ "hoist"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 12 113 57+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 12 113 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 20 113 22 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 12 113 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 20 113 22 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 12 113 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 20 113 22 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 12 113 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 20 113 22+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 12 113 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 113 12 113 17+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 18 113 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 18 113 19+ , srcInfoPoints = []+ }+ "m"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 23 113 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 33 113 35 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 23 113 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 23 113 24+ , SrcSpan "tests/examples/DerivingVia.hs" 113 31 113 32+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 24 113 31+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 24 113 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 24 113 25+ , srcInfoPoints = []+ }+ "m"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 26 113 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 26 113 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 26 113 28+ , srcInfoPoints = []+ }+ "~>")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 29 113 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 29 113 31+ , srcInfoPoints = []+ }+ "m'"))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 36 113 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 113 36 113 37+ , SrcSpan "tests/examples/DerivingVia.hs" 113 56 113 57+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 37 113 56+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 37 113 44+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 37 113 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 37 113 42+ , srcInfoPoints = []+ }+ "trans"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 43 113 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 43 113 44+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 45 113 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 45 113 47+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 45 113 47+ , srcInfoPoints = []+ }+ "~>")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 48 113 56+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 48 113 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 48 113 53+ , srcInfoPoints = []+ }+ "trans"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 54 113 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 113 54 113 56+ , srcInfoPoints = []+ }+ "m'"))))))))+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 115 1 119 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 115 1 115 9+ , SrcSpan "tests/examples/DerivingVia.hs" 115 41 115 46+ , SrcSpan "tests/examples/DerivingVia.hs" 116 3 116 3+ , SrcSpan "tests/examples/DerivingVia.hs" 117 3 117 3+ , SrcSpan "tests/examples/DerivingVia.hs" 119 1 119 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 10 115 40+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 10 115 40+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 10 115 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 10 115 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 10 115 18+ , srcInfoPoints = []+ }+ "MFunctor")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 19 115 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 115 19 115 20+ , SrcSpan "tests/examples/DerivingVia.hs" 115 30 115 32+ , SrcSpan "tests/examples/DerivingVia.hs" 115 39 115 40+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 20 115 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 20 115 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 20 115 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 20 115 27+ , srcInfoPoints = []+ }+ "ReaderT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 28 115 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 28 115 29+ , srcInfoPoints = []+ }+ "r")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 33 115 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 33 115 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 115 33 115 39+ , srcInfoPoints = []+ }+ "MTrans"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 3 116 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 9 116 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 3 116 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 9 116 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 116 3 116 8+ , srcInfoPoints = []+ }+ "hoist"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 12 116 65+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 12 116 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 20 116 22 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 12 116 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 20 116 22 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 12 116 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 20 116 22 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 12 116 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 20 116 22+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 12 116 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 116 12 116 17+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 18 116 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 18 116 19+ , srcInfoPoints = []+ }+ "m"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 23 116 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 33 116 35 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 23 116 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 23 116 24+ , SrcSpan "tests/examples/DerivingVia.hs" 116 31 116 32+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 24 116 31+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 24 116 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 24 116 25+ , srcInfoPoints = []+ }+ "m"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 26 116 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 26 116 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 26 116 28+ , srcInfoPoints = []+ }+ "~>")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 29 116 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 29 116 31+ , srcInfoPoints = []+ }+ "m'"))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 36 116 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 116 36 116 37+ , SrcSpan "tests/examples/DerivingVia.hs" 116 64 116 65+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 37 116 64+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 37 116 48+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 37 116 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 37 116 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 116 37 116 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 116 37 116 44+ , srcInfoPoints = []+ }+ "ReaderT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 45 116 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 116 45 116 46+ , srcInfoPoints = []+ }+ "r")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 47 116 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 47 116 48+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 49 116 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 49 116 51+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 49 116 51+ , srcInfoPoints = []+ }+ "~>")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 52 116 64+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 52 116 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 52 116 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 116 52 116 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 116 52 116 59+ , srcInfoPoints = []+ }+ "ReaderT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 60 116 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 116 60 116 61+ , srcInfoPoints = []+ }+ "r")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 62 116 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 116 62 116 64+ , srcInfoPoints = []+ }+ "m'"))))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 3 117 46+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 3 117 46+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 3 117 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 117 3 117 8+ , srcInfoPoints = []+ }+ "hoist")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 9 117 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 9 117 12+ , srcInfoPoints = []+ }+ "nat")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 13 117 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 117 13 117 14 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 15 117 46+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 15 117 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 15 117 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 15 117 22+ , srcInfoPoints = []+ }+ "ReaderT")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 23 117 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 23 117 24+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 23 117 24+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 25 117 46+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 25 117 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 25 117 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 117 25 117 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 117 25 117 29+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 30 117 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 117 30 117 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 117 30 117 33+ , srcInfoPoints = []+ }+ "nat"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 34 117 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 34 117 35+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 117 34 117 35+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 36 117 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 117 36 117 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 117 36 117 46+ , srcInfoPoints = []+ }+ "runReaderT"))))))+ Nothing+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 119 1 123 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 119 1 119 9+ , SrcSpan "tests/examples/DerivingVia.hs" 119 40 119 45+ , SrcSpan "tests/examples/DerivingVia.hs" 120 3 120 3+ , SrcSpan "tests/examples/DerivingVia.hs" 121 3 121 3+ , SrcSpan "tests/examples/DerivingVia.hs" 123 1 123 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 10 119 39+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 10 119 39+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 10 119 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 10 119 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 10 119 18+ , srcInfoPoints = []+ }+ "MFunctor")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 19 119 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 119 19 119 20+ , SrcSpan "tests/examples/DerivingVia.hs" 119 29 119 31+ , SrcSpan "tests/examples/DerivingVia.hs" 119 38 119 39+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 20 119 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 20 119 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 20 119 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 20 119 26+ , srcInfoPoints = []+ }+ "StateT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 27 119 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 27 119 28+ , srcInfoPoints = []+ }+ "s")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 32 119 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 32 119 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 119 32 119 38+ , srcInfoPoints = []+ }+ "MTrans"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 3 120 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 9 120 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 3 120 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 9 120 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 120 3 120 8+ , srcInfoPoints = []+ }+ "hoist"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 12 120 63+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 12 120 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 20 120 22 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 12 120 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 20 120 22 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 12 120 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 20 120 22 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 12 120 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 20 120 22+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 12 120 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 120 12 120 17+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 18 120 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 18 120 19+ , srcInfoPoints = []+ }+ "m"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 23 120 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 33 120 35 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 23 120 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 23 120 24+ , SrcSpan "tests/examples/DerivingVia.hs" 120 31 120 32+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 24 120 31+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 24 120 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 24 120 25+ , srcInfoPoints = []+ }+ "m"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 26 120 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 26 120 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 26 120 28+ , srcInfoPoints = []+ }+ "~>")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 29 120 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 29 120 31+ , srcInfoPoints = []+ }+ "m'"))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 36 120 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 120 36 120 37+ , SrcSpan "tests/examples/DerivingVia.hs" 120 62 120 63+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 37 120 62+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 37 120 47+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 37 120 45+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 37 120 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 120 37 120 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 120 37 120 43+ , srcInfoPoints = []+ }+ "StateT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 44 120 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 120 44 120 45+ , srcInfoPoints = []+ }+ "s")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 46 120 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 46 120 47+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 48 120 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 48 120 50+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 48 120 50+ , srcInfoPoints = []+ }+ "~>")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 51 120 62+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 51 120 59+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 51 120 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 120 51 120 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 120 51 120 57+ , srcInfoPoints = []+ }+ "StateT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 58 120 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 120 58 120 59+ , srcInfoPoints = []+ }+ "s")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 60 120 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 120 60 120 62+ , srcInfoPoints = []+ }+ "m'"))))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 3 121 44+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 3 121 44+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 3 121 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 121 3 121 8+ , srcInfoPoints = []+ }+ "hoist")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 9 121 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 9 121 12+ , srcInfoPoints = []+ }+ "nat")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 13 121 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 121 13 121 14 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 15 121 44+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 15 121 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 15 121 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 15 121 21+ , srcInfoPoints = []+ }+ "StateT")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 22 121 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 22 121 23+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 22 121 23+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 24 121 44+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 24 121 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 24 121 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 121 24 121 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 121 24 121 28+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 29 121 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 121 29 121 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 121 29 121 32+ , srcInfoPoints = []+ }+ "nat"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 33 121 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 33 121 34+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 121 33 121 34+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 35 121 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 121 35 121 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 121 35 121 44+ , srcInfoPoints = []+ }+ "runStateT"))))))+ Nothing+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 123 1 127 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 123 1 123 9+ , SrcSpan "tests/examples/DerivingVia.hs" 123 41 123 46+ , SrcSpan "tests/examples/DerivingVia.hs" 124 3 124 3+ , SrcSpan "tests/examples/DerivingVia.hs" 125 3 125 3+ , SrcSpan "tests/examples/DerivingVia.hs" 127 1 127 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 10 123 40+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 10 123 40+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 10 123 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 10 123 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 10 123 18+ , srcInfoPoints = []+ }+ "MFunctor")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 19 123 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 123 19 123 20+ , SrcSpan "tests/examples/DerivingVia.hs" 123 30 123 32+ , SrcSpan "tests/examples/DerivingVia.hs" 123 39 123 40+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 20 123 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 20 123 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 20 123 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 20 123 27+ , srcInfoPoints = []+ }+ "WriterT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 28 123 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 28 123 29+ , srcInfoPoints = []+ }+ "w")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 33 123 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 33 123 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 123 33 123 39+ , srcInfoPoints = []+ }+ "MTrans"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 3 124 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 9 124 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 3 124 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 9 124 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 124 3 124 8+ , srcInfoPoints = []+ }+ "hoist"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 12 124 65+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 12 124 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 20 124 22 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 12 124 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 20 124 22 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 12 124 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 20 124 22 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 12 124 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 20 124 22+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 12 124 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 124 12 124 17+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 18 124 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 18 124 19+ , srcInfoPoints = []+ }+ "m"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 23 124 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 33 124 35 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 23 124 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 23 124 24+ , SrcSpan "tests/examples/DerivingVia.hs" 124 31 124 32+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 24 124 31+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 24 124 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 24 124 25+ , srcInfoPoints = []+ }+ "m"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 26 124 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 26 124 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 26 124 28+ , srcInfoPoints = []+ }+ "~>")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 29 124 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 29 124 31+ , srcInfoPoints = []+ }+ "m'"))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 36 124 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 124 36 124 37+ , SrcSpan "tests/examples/DerivingVia.hs" 124 64 124 65+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 37 124 64+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 37 124 48+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 37 124 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 37 124 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 124 37 124 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 124 37 124 44+ , srcInfoPoints = []+ }+ "WriterT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 45 124 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 124 45 124 46+ , srcInfoPoints = []+ }+ "w")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 47 124 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 47 124 48+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 49 124 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 49 124 51+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 49 124 51+ , srcInfoPoints = []+ }+ "~>")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 52 124 64+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 52 124 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 52 124 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 124 52 124 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 124 52 124 59+ , srcInfoPoints = []+ }+ "WriterT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 60 124 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 124 60 124 61+ , srcInfoPoints = []+ }+ "w")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 62 124 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 124 62 124 64+ , srcInfoPoints = []+ }+ "m'"))))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 3 125 41+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 3 125 41+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 3 125 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 125 3 125 8+ , srcInfoPoints = []+ }+ "hoist")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 9 125 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 9 125 12+ , srcInfoPoints = []+ }+ "nat")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 13 125 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 125 13 125 14 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 15 125 41+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 15 125 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 15 125 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 15 125 22+ , srcInfoPoints = []+ }+ "WriterT")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 23 125 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 23 125 24+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 23 125 24+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 25 125 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 25 125 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 25 125 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 125 25 125 28+ , srcInfoPoints = []+ }+ "nat")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 29 125 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 29 125 30+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 125 29 125 30+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 31 125 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 125 31 125 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 125 31 125 41+ , srcInfoPoints = []+ }+ "runWriterT"))))))+ Nothing+ ])+ ])+ , InfixDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 127 1 127 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 127 8 127 9 ]+ }+ (AssocRight+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 127 1 127 7+ , srcInfoPoints = []+ })+ (Just 9)+ [ ConOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 127 10 127 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 127 10 127 11+ , SrcSpan "tests/examples/DerivingVia.hs" 127 11 127 19+ , SrcSpan "tests/examples/DerivingVia.hs" 127 19 127 20+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 127 10 127 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 127 10 127 11+ , SrcSpan "tests/examples/DerivingVia.hs" 127 11 127 19+ , SrcSpan "tests/examples/DerivingVia.hs" 127 19 127 20+ ]+ }+ "ComposeT")+ ]+ , GDataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 1 130 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 128 18 128 20+ , SrcSpan "tests/examples/DerivingVia.hs" 128 48 128 53+ , SrcSpan "tests/examples/DerivingVia.hs" 129 3 129 3+ , SrcSpan "tests/examples/DerivingVia.hs" 130 3 130 3+ , SrcSpan "tests/examples/DerivingVia.hs" 130 3 130 3+ ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 128 1 128 8+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 9 128 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 9 128 17+ , srcInfoPoints = []+ }+ "ComposeT"))+ (Just+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 21 128 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 128 28 128 30 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 21 128 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 21 128 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 21 128 27+ , srcInfoPoints = []+ }+ "MTrans")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 31 128 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 128 38 128 40 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 31 128 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 31 128 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 31 128 37+ , srcInfoPoints = []+ }+ "MTrans")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 41 128 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 41 128 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 128 41 128 47+ , srcInfoPoints = []+ }+ "MTrans"))))))+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 3 129 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 129 12 129 14+ , SrcSpan "tests/examples/DerivingVia.hs" 129 15 129 16+ , SrcSpan "tests/examples/DerivingVia.hs" 129 42 129 43+ , SrcSpan "tests/examples/DerivingVia.hs" 129 44 129 46+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 3 129 11+ , srcInfoPoints = []+ }+ "ComposeT")+ Nothing+ Nothing+ (Just+ [ FieldDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 17 129 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 129 29 129 31 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 17 129 28+ , srcInfoPoints = []+ }+ "getComposeT"+ ]+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 32 129 41+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 32 129 39+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 32 129 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 32 129 33+ , srcInfoPoints = []+ }+ "f"))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 34 129 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 129 34 129 35+ , SrcSpan "tests/examples/DerivingVia.hs" 129 38 129 39+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 35 129 38+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 35 129 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 35 129 36+ , srcInfoPoints = []+ }+ "g"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 37 129 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 37 129 38+ , srcInfoPoints = []+ }+ "m")))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 40 129 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 40 129 41+ , srcInfoPoints = []+ }+ "a")))+ ])+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 47 129 63+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 47 129 61+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 47 129 59+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 47 129 57+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 47 129 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 47 129 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 47 129 55+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 56 129 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 56 129 57+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 58 129 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 58 129 59+ , srcInfoPoints = []+ }+ "g")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 60 129 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 60 129 61+ , srcInfoPoints = []+ }+ "m")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 62 129 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 129 62 129 63+ , srcInfoPoints = []+ }+ "a")))+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 3 130 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 130 3 130 11+ , SrcSpan "tests/examples/DerivingVia.hs" 130 20 130 21+ , SrcSpan "tests/examples/DerivingVia.hs" 130 28 130 29+ , SrcSpan "tests/examples/DerivingVia.hs" 130 41 130 42+ , SrcSpan "tests/examples/DerivingVia.hs" 130 48 130 49+ ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 12 130 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 21 130 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 21 130 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 21 130 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 21 130 28+ , srcInfoPoints = []+ }+ "Functor")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 30 130 41+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 30 130 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 30 130 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 30 130 41+ , srcInfoPoints = []+ }+ "Applicative")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 43 130 48+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 43 130 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 43 130 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 130 43 130 48+ , srcInfoPoints = []+ }+ "Monad")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 132 1 137 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 132 1 132 9+ , SrcSpan "tests/examples/DerivingVia.hs" 132 84 132 89+ , SrcSpan "tests/examples/DerivingVia.hs" 133 3 133 3+ , SrcSpan "tests/examples/DerivingVia.hs" 134 3 134 3+ , SrcSpan "tests/examples/DerivingVia.hs" 137 1 137 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 10 132 83+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 10 132 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 132 10 132 11+ , SrcSpan "tests/examples/DerivingVia.hs" 132 23 132 24+ , SrcSpan "tests/examples/DerivingVia.hs" 132 37 132 38+ , SrcSpan "tests/examples/DerivingVia.hs" 132 53 132 54+ , SrcSpan "tests/examples/DerivingVia.hs" 132 55 132 57+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 11 132 23+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 11 132 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 11 132 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 11 132 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 11 132 21+ , srcInfoPoints = []+ }+ "MonadTrans")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 22 132 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 22 132 23+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 25 132 37+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 25 132 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 25 132 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 25 132 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 25 132 35+ , srcInfoPoints = []+ }+ "MonadTrans")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 36 132 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 36 132 37+ , srcInfoPoints = []+ }+ "g")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 39 132 53+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 39 132 53+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 39 132 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 39 132 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 39 132 51+ , srcInfoPoints = []+ }+ "LiftingMonad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 52 132 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 52 132 53+ , srcInfoPoints = []+ }+ "g")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 58 132 83+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 58 132 68+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 58 132 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 58 132 68+ , srcInfoPoints = []+ }+ "MonadTrans")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 69 132 83+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 132 69 132 70+ , SrcSpan "tests/examples/DerivingVia.hs" 132 82 132 83+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 70 132 82+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 70 132 80+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 70 132 78+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 70 132 78+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 70 132 78+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 79 132 80+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 79 132 80+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 81 132 82+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 132 81 132 82+ , srcInfoPoints = []+ }+ "g"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 3 133 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 133 8 133 10 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 3 133 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 133 8 133 10 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 133 3 133 7+ , srcInfoPoints = []+ }+ "lift"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 11 133 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 133 11 133 17+ , SrcSpan "tests/examples/DerivingVia.hs" 133 19 133 20+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 18 133 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 18 133 19+ , srcInfoPoints = []+ }+ "m")+ ])+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 21 133 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 133 29 133 31 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 21 133 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 133 29 133 31 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 21 133 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 133 29 133 31 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 21 133 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 133 29 133 31+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 21 133 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 133 21 133 26+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 27 133 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 27 133 28+ , srcInfoPoints = []+ }+ "m"))))))+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 32 133 51+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 32 133 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 32 133 33+ , srcInfoPoints = []+ }+ "m"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 34 133 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 34 133 36+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 34 133 36+ , srcInfoPoints = []+ }+ "~>")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 37 133 51+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 37 133 49+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 37 133 47+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 37 133 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 37 133 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 133 37 133 45+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 46 133 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 46 133 47+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 48 133 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 48 133 49+ , srcInfoPoints = []+ }+ "g")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 50 133 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 133 50 133 51+ , srcInfoPoints = []+ }+ "m"))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 3 135 19+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 3 135 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 134 3 134 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 134 3 134 7+ , srcInfoPoints = []+ }+ "lift"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 8 135 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 134 8 134 9 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 10 135 19+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 10 134 32+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 10 134 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 10 134 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 10 134 18+ , srcInfoPoints = []+ }+ "ComposeT")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 19 134 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 19 134 20+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 19 134 20+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 21 134 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 21 134 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 21 134 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 21 134 25+ , srcInfoPoints = []+ }+ "lift")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 26 134 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 26 134 27+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 26 134 27+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 28 134 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 28 134 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 134 28 134 32+ , srcInfoPoints = []+ }+ "lift")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 135 5 135 7+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 5 135 7+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 5 135 7+ , srcInfoPoints = []+ }+ "\\\\")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 8 135 19+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 8 135 16+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 8 135 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 8 135 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 8 135 13+ , srcInfoPoints = []+ }+ "proof")))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 14 135 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 135 14 135 15 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 15 135 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 15 135 16+ , srcInfoPoints = []+ }+ "g"))))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 17 135 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 135 17 135 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 18 135 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 135 18 135 19+ , srcInfoPoints = []+ }+ "m"))))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 137 1 146 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 137 1 137 9+ , SrcSpan "tests/examples/DerivingVia.hs" 137 78 137 83+ , SrcSpan "tests/examples/DerivingVia.hs" 138 3 138 3+ , SrcSpan "tests/examples/DerivingVia.hs" 139 3 139 3+ , SrcSpan "tests/examples/DerivingVia.hs" 146 1 146 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 10 137 77+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 10 137 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 137 10 137 11+ , SrcSpan "tests/examples/DerivingVia.hs" 137 21 137 22+ , SrcSpan "tests/examples/DerivingVia.hs" 137 33 137 34+ , SrcSpan "tests/examples/DerivingVia.hs" 137 49 137 50+ , SrcSpan "tests/examples/DerivingVia.hs" 137 51 137 53+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 11 137 21+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 11 137 21+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 11 137 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 11 137 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 11 137 19+ , srcInfoPoints = []+ }+ "MFunctor")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 20 137 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 20 137 21+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 23 137 33+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 23 137 33+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 23 137 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 23 137 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 23 137 31+ , srcInfoPoints = []+ }+ "MFunctor")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 32 137 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 32 137 33+ , srcInfoPoints = []+ }+ "g")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 35 137 49+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 35 137 49+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 35 137 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 35 137 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 35 137 47+ , srcInfoPoints = []+ }+ "LiftingMonad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 48 137 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 48 137 49+ , srcInfoPoints = []+ }+ "g")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 54 137 77+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 54 137 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 54 137 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 54 137 62+ , srcInfoPoints = []+ }+ "MFunctor")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 63 137 77+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 137 63 137 64+ , SrcSpan "tests/examples/DerivingVia.hs" 137 76 137 77+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 64 137 76+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 64 137 74+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 64 137 72+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 64 137 72+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 64 137 72+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 73 137 74+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 73 137 74+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 75 137 76+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 137 75 137 76+ , srcInfoPoints = []+ }+ "g"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 3 138 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 9 138 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 3 138 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 9 138 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 138 3 138 8+ , srcInfoPoints = []+ }+ "hoist"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 12 138 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 12 138 18+ , SrcSpan "tests/examples/DerivingVia.hs" 138 23 138 24+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 19 138 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 19 138 20+ , srcInfoPoints = []+ }+ "m")+ , UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 21 138 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 21 138 23+ , srcInfoPoints = []+ }+ "m'")+ ])+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 25 138 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 33 138 35 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 25 138 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 33 138 35 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 25 138 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 33 138 35 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 25 138 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 33 138 35+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 25 138 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 25 138 30+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 31 138 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 31 138 32+ , srcInfoPoints = []+ }+ "m"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 36 138 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 46 138 48 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 36 138 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 36 138 37+ , SrcSpan "tests/examples/DerivingVia.hs" 138 44 138 45+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 37 138 44+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 37 138 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 37 138 38+ , srcInfoPoints = []+ }+ "m"))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 39 138 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 39 138 41+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 39 138 41+ , srcInfoPoints = []+ }+ "~>")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 42 138 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 42 138 44+ , srcInfoPoints = []+ }+ "m'"))))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 49 138 84+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 138 49 138 50+ , SrcSpan "tests/examples/DerivingVia.hs" 138 83 138 84+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 50 138 83+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 50 138 64+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 50 138 62+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 50 138 60+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 50 138 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 50 138 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 138+ 50+ 138+ 58+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 59 138 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 59 138 60+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 61 138 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 61 138 62+ , srcInfoPoints = []+ }+ "g")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 63 138 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 63 138 64+ , srcInfoPoints = []+ }+ "m")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 65 138 67+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 65 138 67+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 65 138 67+ , srcInfoPoints = []+ }+ "~>")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 68 138 83+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 68 138 80+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 68 138 78+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 68 138 76+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 68 138 76+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 138+ 68+ 138+ 76+ , srcInfoPoints = []+ }+ "ComposeT")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 77 138 78+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 77 138 78+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 79 138 80+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 138 79 138 80+ , srcInfoPoints = []+ }+ "g")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 81 138 83+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 138 81 138 83+ , srcInfoPoints = []+ }+ "m'"))))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 3 140 19+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 3 140 19+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 3 140 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 139 3 139 8+ , srcInfoPoints = []+ }+ "hoist")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 9 139 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 9 139 10+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 11 140 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 139 11 139 12 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 13 140 19+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 13 139 53+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 13 139 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 13 139 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 13 139 21+ , srcInfoPoints = []+ }+ "ComposeT")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 22 139 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 22 139 23+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 22 139 23+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 24 139 53+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 24 139 39+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 24 139 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 24 139 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 139+ 24+ 139+ 29+ , srcInfoPoints = []+ }+ "hoist")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 30 139 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 139 30 139 31+ , SrcSpan+ "tests/examples/DerivingVia.hs" 139 38 139 39+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 31 139 38+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 139+ 31+ 139+ 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 139+ 31+ 139+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 139+ 31+ 139+ 36+ , srcInfoPoints = []+ }+ "hoist")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 139+ 37+ 139+ 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 139+ 37+ 139+ 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 139+ 37+ 139+ 38+ , srcInfoPoints = []+ }+ "f"))))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 40 139 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 40 139 41+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 40 139 41+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 139 42 139 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 42 139 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 139 42 139 53+ , srcInfoPoints = []+ }+ "getComposeT")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 5 140 7+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 5 140 7+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 5 140 7+ , srcInfoPoints = []+ }+ "\\\\")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 8 140 19+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 8 140 16+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 8 140 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 8 140 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 140 8 140 13+ , srcInfoPoints = []+ }+ "proof")))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 14 140 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 140 14 140 15+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 140 15 140 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 140 15 140 16+ , srcInfoPoints = []+ }+ "g"))))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 17 140 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 140 17 140 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 140 18 140 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 140 18 140 19+ , srcInfoPoints = []+ }+ "m"))))))+ Nothing+ ])+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 1 150 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 146 13 146 14 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 146 1 146 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 9 146 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 9 146 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 9 146 10+ , srcInfoPoints = []+ }+ "X"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 11 146 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 11 146 12+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 15 146 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 15 146 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 15 146 16+ , srcInfoPoints = []+ }+ "X")+ [ TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 17 146 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 146 17 146 18+ , SrcSpan "tests/examples/DerivingVia.hs" 146 19 146 20+ , SrcSpan "tests/examples/DerivingVia.hs" 146 22 146 23+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 18 146 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 18 146 19+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 21 146 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 146 21 146 22+ , srcInfoPoints = []+ }+ "a")+ ]+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 3 147 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 147 3 147 11+ , SrcSpan "tests/examples/DerivingVia.hs" 147 12 147 13+ , SrcSpan "tests/examples/DerivingVia.hs" 147 22 147 23+ , SrcSpan "tests/examples/DerivingVia.hs" 147 30 147 31+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 8 148 11+ , srcInfoPoints = []+ }+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 12 148 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 148 12 148 13+ , SrcSpan "tests/examples/DerivingVia.hs" 148 22 148 23+ , SrcSpan "tests/examples/DerivingVia.hs" 148 29 148 30+ ]+ }+ Boxed+ [ TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 13 148 22+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 13 148 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 13 148 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 13 148 20+ , srcInfoPoints = []+ }+ "Product")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 21 148 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 21 148 22+ , srcInfoPoints = []+ }+ "a"))+ , TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 24 148 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 24 148 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 24 148 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 24 148 27+ , srcInfoPoints = []+ }+ "Sum")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 28 148 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 148 28 148 29+ , srcInfoPoints = []+ }+ "a"))+ ])))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 13 147 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 13 147 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 13 147 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 13 147 22+ , srcInfoPoints = []+ }+ "Semigroup")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 24 147 30+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 24 147 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 24 147 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 147 24 147 30+ , srcInfoPoints = []+ }+ "Monoid")))+ ]+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 3 150 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 150 3 150 11+ , SrcSpan "tests/examples/DerivingVia.hs" 150 12 150 13+ , SrcSpan "tests/examples/DerivingVia.hs" 150 17 150 18+ , SrcSpan "tests/examples/DerivingVia.hs" 150 21 150 22+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 151 8 151 11+ , srcInfoPoints = []+ }+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 151 12 151 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 151 12 151 13+ , SrcSpan "tests/examples/DerivingVia.hs" 151 14 151 15+ , SrcSpan "tests/examples/DerivingVia.hs" 151 17 151 18+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 151 13 151 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 151 13 151 14+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 151 16 151 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 151 16 151 17+ , srcInfoPoints = []+ }+ "a")+ ])))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 13 150 17+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 13 150 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 13 150 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 13 150 17+ , srcInfoPoints = []+ }+ "Show")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 19 150 21+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 19 150 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 19 150 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 150 19 150 21+ , srcInfoPoints = []+ }+ "Eq")))+ ]+ ]+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 157 1 158 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 157 1 157 6+ , SrcSpan "tests/examples/DerivingVia.hs" 157 11 157 16+ , SrcSpan "tests/examples/DerivingVia.hs" 158 3 158 3+ , SrcSpan "tests/examples/DerivingVia.hs" 160 1 160 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 157 7 157 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 157 7 157 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 157 7 157 8+ , srcInfoPoints = []+ }+ "C"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 157 9 157 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 157 9 157 10+ , srcInfoPoints = []+ }+ "f")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 3 158 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 158 5 158 7 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 3 158 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 158 5 158 7 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 158 3 158 4+ , srcInfoPoints = []+ }+ "c"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 8 158 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 158 12 158 14 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 8 158 11+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 158 8 158 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 8 158 9+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 10 158 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 10 158 11+ , srcInfoPoints = []+ }+ "a")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 15 158 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 15 158 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 158 15 158 18+ , srcInfoPoints = []+ }+ "Int")))))+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 1 160 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 160 16 160 17 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 160 1 160 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 9 160 15+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 9 160 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 9 160 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 9 160 11+ , srcInfoPoints = []+ }+ "X2"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 12 160 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 12 160 13+ , srcInfoPoints = []+ }+ "f")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 14 160 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 14 160 15+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 18 160 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 18 160 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 18 160 20+ , srcInfoPoints = []+ }+ "X2")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 21 160 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 160 21 160 22+ , SrcSpan "tests/examples/DerivingVia.hs" 160 25 160 26+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 22 160 25+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 22 160 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 22 160 23+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 24 160 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 160 24 160 25+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ []+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 162 1 165 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 162 1 162 9+ , SrcSpan "tests/examples/DerivingVia.hs" 162 19 162 24+ , SrcSpan "tests/examples/DerivingVia.hs" 163 3 163 3+ , SrcSpan "tests/examples/DerivingVia.hs" 165 1 165 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 10 162 18+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 10 162 18+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 10 162 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 10 162 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 10 162 11+ , srcInfoPoints = []+ }+ "C")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 12 162 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 162 12 162 13+ , SrcSpan "tests/examples/DerivingVia.hs" 162 17 162 18+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 13 162 17+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 13 162 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 13 162 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 13 162 15+ , srcInfoPoints = []+ }+ "X2")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 16 162 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 162 16 162 17+ , srcInfoPoints = []+ }+ "f"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 3 163 14+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 3 163 14+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 163 3 163 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 163 3 163 4+ , srcInfoPoints = []+ }+ "c"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 5 163 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 163 5 163 6 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 7 163 14+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 7 163 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 7 163 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 7 163 12+ , srcInfoPoints = []+ }+ "const")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 13 163 14+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 163 13 163 14+ , srcInfoPoints = []+ }+ 0+ "0"))))+ Nothing)+ ])+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 1 165 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 165 1 165 9+ , SrcSpan "tests/examples/DerivingVia.hs" 165 22 165 30+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 10 165 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 14 165 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 165 14 165 15+ , SrcSpan "tests/examples/DerivingVia.hs" 165 20 165 21+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 15 165 20+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 15 165 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 15 165 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 15 165 17+ , srcInfoPoints = []+ }+ "X2")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 18 165 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 18 165 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 18 165 20+ , srcInfoPoints = []+ }+ "IO")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 31 165 35+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 31 165 35+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 31 165 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 31 165 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 31 165 32+ , srcInfoPoints = []+ }+ "C")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 33 165 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 33 165 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 165 33 165 35+ , srcInfoPoints = []+ }+ "IO")))))+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 1 171 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 171 14 171 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 171 1 171 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 9 171 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 9 171 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 9 171 11+ , srcInfoPoints = []+ }+ "P0"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 12 171 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 12 171 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 16 171 20+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 16 171 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 16 171 18+ , srcInfoPoints = []+ }+ "P0")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 19 171 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 19 171 20+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 33 171 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 171 33 171 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 47 171 50+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 51 171 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 51 171 52+ , srcInfoPoints = []+ }+ "a"))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 42 171 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 42 171 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 42 171 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 171 42 171 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 1 172 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 172 14 172 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 172 1 172 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 9 172 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 9 172 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 9 172 11+ , srcInfoPoints = []+ }+ "P1"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 12 172 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 12 172 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 16 172 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 16 172 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 16 172 18+ , srcInfoPoints = []+ }+ "P1")+ [ TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 19 172 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 172 19 172 20+ , SrcSpan "tests/examples/DerivingVia.hs" 172 21 172 22+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 20 172 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 20 172 21+ , srcInfoPoints = []+ }+ "a"))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 33 172 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 172 33 172 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 47 172 50+ , srcInfoPoints = []+ }+ (TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 51 172 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 172 51 172 52+ , SrcSpan "tests/examples/DerivingVia.hs" 172 53 172 54+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 52 172 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 52 172 53+ , srcInfoPoints = []+ }+ "a")))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 42 172 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 42 172 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 42 172 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 172 42 172 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 1 173 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 173 14 173 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 173 1 173 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 9 173 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 9 173 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 9 173 11+ , srcInfoPoints = []+ }+ "P2"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 12 173 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 12 173 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 16 173 25+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 16 173 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 16 173 18+ , srcInfoPoints = []+ }+ "P2")+ [ TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 19 173 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 173 19 173 20+ , SrcSpan "tests/examples/DerivingVia.hs" 173 21 173 22+ , SrcSpan "tests/examples/DerivingVia.hs" 173 24 173 25+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 20 173 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 20 173 21+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 23 173 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 23 173 24+ , srcInfoPoints = []+ }+ "a")+ ]+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 33 173 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 173 33 173 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 47 173 50+ , srcInfoPoints = []+ }+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 51 173 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 173 51 173 52+ , SrcSpan "tests/examples/DerivingVia.hs" 173 53 173 54+ , SrcSpan "tests/examples/DerivingVia.hs" 173 56 173 57+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 52 173 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 52 173 53+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 55 173 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 55 173 56+ , srcInfoPoints = []+ }+ "a")+ ])))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 42 173 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 42 173 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 42 173 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 173 42 173 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 1 174 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 174 14 174 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 174 1 174 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 9 174 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 9 174 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 9 174 11+ , srcInfoPoints = []+ }+ "P3"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 12 174 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 12 174 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 16 174 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 16 174 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 16 174 18+ , srcInfoPoints = []+ }+ "P3")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 19 174 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 174 19 174 20+ , SrcSpan "tests/examples/DerivingVia.hs" 174 27 174 28+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 20 174 27+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 20 174 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 20 174 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 20 174 25+ , srcInfoPoints = []+ }+ "Maybe")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 26 174 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 26 174 27+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 33 174 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 174 33 174 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 47 174 50+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 51 174 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 174 51 174 52+ , SrcSpan "tests/examples/DerivingVia.hs" 174 59 174 60+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 52 174 59+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 52 174 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 52 174 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 52 174 57+ , srcInfoPoints = []+ }+ "First")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 58 174 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 58 174 59+ , srcInfoPoints = []+ }+ "a"))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 42 174 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 42 174 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 42 174 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 174 42 174 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 1 175 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 175 14 175 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 175 1 175 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 9 175 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 9 175 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 9 175 11+ , srcInfoPoints = []+ }+ "P4"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 12 175 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 12 175 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 16 175 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 16 175 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 16 175 18+ , srcInfoPoints = []+ }+ "P4")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 19 175 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 175 19 175 20+ , SrcSpan "tests/examples/DerivingVia.hs" 175 27 175 28+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 20 175 27+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 20 175 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 20 175 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 20 175 25+ , srcInfoPoints = []+ }+ "Maybe")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 26 175 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 26 175 27+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 33 175 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 175 33 175 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 47 175 50+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 51 175 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 175 51 175 52+ , SrcSpan "tests/examples/DerivingVia.hs" 175 61 175 62+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 52 175 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 52 175 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 52 175 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 52 175 57+ , srcInfoPoints = []+ }+ "First")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 58 175 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 58 175 59+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 58 175 59+ , srcInfoPoints = []+ }+ "$")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 60 175 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 60 175 61+ , srcInfoPoints = []+ }+ "a"))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 42 175 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 42 175 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 42 175 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 175 42 175 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 1 176 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 176 14 176 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 176 1 176 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 9 176 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 9 176 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 9 176 11+ , srcInfoPoints = []+ }+ "P5"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 12 176 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 12 176 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 16 176 20+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 16 176 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 16 176 18+ , srcInfoPoints = []+ }+ "P5")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 19 176 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 19 176 20+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 33 176 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 176 33 176 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 47 176 50+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 51 176 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 176 51 176 52+ , SrcSpan "tests/examples/DerivingVia.hs" 176 64 176 65+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 52 176 64+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 52 176 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 52 176 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 52 176 60+ , srcInfoPoints = []+ }+ "Identity")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 61 176 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 61 176 62+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 61 176 62+ , srcInfoPoints = []+ }+ "$")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 63 176 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 63 176 64+ , srcInfoPoints = []+ }+ "a"))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 42 176 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 42 176 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 42 176 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 176 42 176 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 1 177 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 177 14 177 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 177 1 177 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 9 177 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 9 177 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 9 177 11+ , srcInfoPoints = []+ }+ "P6"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 12 177 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 12 177 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 16 177 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 16 177 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 16 177 18+ , srcInfoPoints = []+ }+ "P6")+ [ TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 19 177 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 177 19 177 20+ , SrcSpan "tests/examples/DerivingVia.hs" 177 21 177 22+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 20 177 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 20 177 21+ , srcInfoPoints = []+ }+ "a"))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 33 177 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 177 33 177 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 47 177 50+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 51 177 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 177 51 177 52+ , SrcSpan "tests/examples/DerivingVia.hs" 177 58 177 59+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 52 177 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 52 177 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 177 52 177 53+ , SrcSpan "tests/examples/DerivingVia.hs" 177 53 177 54+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 52 177 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 177 52 177 53+ , SrcSpan "tests/examples/DerivingVia.hs" 177 53 177 54+ ]+ }+ (ListCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 52 177 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 177 52 177 53+ , SrcSpan "tests/examples/DerivingVia.hs" 177 53 177 54+ ]+ })))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 55 177 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 55 177 56+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 55 177 56+ , srcInfoPoints = []+ }+ "$")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 57 177 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 57 177 58+ , srcInfoPoints = []+ }+ "a"))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 42 177 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 42 177 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 42 177 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 177 42 177 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 1 178 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 178 14 178 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 178 1 178 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 9 178 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 9 178 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 9 178 11+ , srcInfoPoints = []+ }+ "P7"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 12 178 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 12 178 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 16 178 25+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 16 178 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 16 178 18+ , srcInfoPoints = []+ }+ "P7")+ [ TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 19 178 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 178 19 178 20+ , SrcSpan "tests/examples/DerivingVia.hs" 178 21 178 22+ , SrcSpan "tests/examples/DerivingVia.hs" 178 24 178 25+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 20 178 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 20 178 21+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 23 178 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 23 178 24+ , srcInfoPoints = []+ }+ "a")+ ]+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 33 178 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 178 33 178 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 47 178 50+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 51 178 70+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 178 51 178 52+ , SrcSpan "tests/examples/DerivingVia.hs" 178 69 178 70+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 52 178 69+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 52 178 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 52 178 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 52 178 60+ , srcInfoPoints = []+ }+ "Identity")))+ (UnpromotedName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 61 178 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 61 178 62+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 61 178 62+ , srcInfoPoints = []+ }+ "$")))+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 63 178 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 178 63 178 64+ , SrcSpan "tests/examples/DerivingVia.hs" 178 65 178 66+ , SrcSpan "tests/examples/DerivingVia.hs" 178 68 178 69+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 64 178 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 64 178 65+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 67 178 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 67 178 68+ , srcInfoPoints = []+ }+ "a")+ ])))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 42 178 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 42 178 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 42 178 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 178 42 178 46+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 1 179 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 14 179 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 179 1 179 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 9 179 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 9 179 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 9 179 11+ , srcInfoPoints = []+ }+ "P8"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 12 179 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 12 179 13+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 16 179 32+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 16 179 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 16 179 18+ , srcInfoPoints = []+ }+ "P8")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 19 179 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 19 179 20+ , SrcSpan "tests/examples/DerivingVia.hs" 179 31 179 32+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 20 179 31+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 20 179 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 20 179 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 20 179 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 20 179 26+ , srcInfoPoints = []+ }+ "Either")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 27 179 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 27 179 28+ , SrcSpan "tests/examples/DerivingVia.hs" 179 28 179 29+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 27 179 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 27 179 28+ , SrcSpan "tests/examples/DerivingVia.hs" 179 28 179 29+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 27 179 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 27 179 28+ , SrcSpan "tests/examples/DerivingVia.hs" 179 28 179 29+ ]+ }))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 30 179 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 30 179 31+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 33 179 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 33 179 41 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 50 179 53+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 54 179 71+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 54 179 55+ , SrcSpan "tests/examples/DerivingVia.hs" 179 70 179 71+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 55 179 70+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 55 179 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 55 179 56+ , SrcSpan "tests/examples/DerivingVia.hs" 179 56 179 57+ , SrcSpan "tests/examples/DerivingVia.hs" 179 57 179 58+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 55 179 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 55 179 56+ , SrcSpan "tests/examples/DerivingVia.hs" 179 56 179 57+ , SrcSpan "tests/examples/DerivingVia.hs" 179 57 179 58+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 56 179 57+ , srcInfoPoints = []+ }+ "$")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 59 179 70+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 59 179 60+ , SrcSpan "tests/examples/DerivingVia.hs" 179 69 179 70+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 60 179 69+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 60 179 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 60 179 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 60 179 66+ , srcInfoPoints = []+ }+ "Either")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 67 179 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 67 179 68+ , SrcSpan "tests/examples/DerivingVia.hs" 179 68 179 69+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 67 179 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 179 67 179 68+ , SrcSpan "tests/examples/DerivingVia.hs" 179 68 179 69+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 67 179 69+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 179 67 179 68+ , SrcSpan+ "tests/examples/DerivingVia.hs" 179 68 179 69+ ]+ })))))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 42 179 49+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 42 179 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 42 179 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 179 42 179 49+ , srcInfoPoints = []+ }+ "Functor")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 1 181 73+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 181 15 181 16 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 181 1 181 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 9 181 14+ , srcInfoPoints = []+ }+ (DHInfix+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 9 181 14+ , srcInfoPoints = []+ }+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 9 181 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 9 181 10+ , srcInfoPoints = []+ }+ "f"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 11 181 12+ , srcInfoPoints = []+ }+ "$"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 13 181 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 13 181 14+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 17 181 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 17 181 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 17 181 20+ , srcInfoPoints = []+ }+ "APP")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 21 181 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 181 21 181 22+ , SrcSpan "tests/examples/DerivingVia.hs" 181 25 181 26+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 22 181 25+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 22 181 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 22 181 23+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 24 181 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 24 181 25+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 27 181 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 181 27 181 35 ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 36 181 43+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 44 181 48+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 44 181 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 44 181 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 44 181 48+ , srcInfoPoints = []+ }+ "Show")))+ ]+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 49 181 73+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 181 49 181 57 ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 58 181 65+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 66 181 73+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 66 181 73+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 66 181 73+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 181 66 181 73+ , srcInfoPoints = []+ }+ "Functor")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 1 191 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 190 29 190 30 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 190 1 190 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 9 190 28+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 9 190 26+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 9 190 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 9 190 24+ , srcInfoPoints = []+ }+ "WrapApplicative"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 25 190 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 25 190 26+ , srcInfoPoints = []+ }+ "f")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 27 190 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 27 190 28+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 31 190 55+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 31 190 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 31 190 49+ , srcInfoPoints = []+ }+ "WrappedApplicative")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 50 190 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 190 50 190 51+ , SrcSpan "tests/examples/DerivingVia.hs" 190 54 190 55+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 51 190 54+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 51 190 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 51 190 52+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 53 190 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 190 53 190 54+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 3 191 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 191 3 191 11+ , SrcSpan "tests/examples/DerivingVia.hs" 191 12 191 13+ , SrcSpan "tests/examples/DerivingVia.hs" 191 20 191 21+ , SrcSpan "tests/examples/DerivingVia.hs" 191 33 191 34+ ]+ }+ Nothing+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 13 191 20+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 13 191 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 13 191 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 13 191 20+ , srcInfoPoints = []+ }+ "Functor")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 22 191 33+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 22 191 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 22 191 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 191 22 191 33+ , srcInfoPoints = []+ }+ "Applicative")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 193 1 201 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 193 1 193 9+ , SrcSpan "tests/examples/DerivingVia.hs" 193 62 193 67+ , SrcSpan "tests/examples/DerivingVia.hs" 194 3 194 3+ , SrcSpan "tests/examples/DerivingVia.hs" 195 3 195 3+ , SrcSpan "tests/examples/DerivingVia.hs" 196 3 196 3+ , SrcSpan "tests/examples/DerivingVia.hs" 197 3 197 3+ , SrcSpan "tests/examples/DerivingVia.hs" 198 3 198 3+ , SrcSpan "tests/examples/DerivingVia.hs" 199 3 199 3+ , SrcSpan "tests/examples/DerivingVia.hs" 201 1 201 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 10 193 61+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 10 193 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 193 10 193 11+ , SrcSpan "tests/examples/DerivingVia.hs" 193 24 193 25+ , SrcSpan "tests/examples/DerivingVia.hs" 193 31 193 32+ , SrcSpan "tests/examples/DerivingVia.hs" 193 33 193 35+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 11 193 24+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 11 193 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 11 193 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 11 193 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 11 193 22+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 23 193 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 23 193 24+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 26 193 31+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 26 193 31+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 26 193 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 26 193 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 26 193 29+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 30 193 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 30 193 31+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 36 193 61+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 36 193 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 36 193 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 36 193 39+ , srcInfoPoints = []+ }+ "Num")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 40 193 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 193 40 193 41+ , SrcSpan "tests/examples/DerivingVia.hs" 193 60 193 61+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 41 193 60+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 41 193 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 41 193 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 41 193 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 41 193 56+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 57 193 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 57 193 58+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 59 193 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 193 59 193 60+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 3 194 27+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 3 194 27+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 194 3 194 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 194 3 194 4+ , SrcSpan "tests/examples/DerivingVia.hs" 194 4 194 5+ , SrcSpan "tests/examples/DerivingVia.hs" 194 5 194 6+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 194 4 194 5+ , srcInfoPoints = []+ }+ "+"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 15 194 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 194 15 194 16 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 17 194 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 17 194 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 17 194 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 17 194 23+ , srcInfoPoints = []+ }+ "liftA2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 24 194 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 194 24 194 25+ , SrcSpan "tests/examples/DerivingVia.hs" 194 25 194 26+ , SrcSpan "tests/examples/DerivingVia.hs" 194 26 194 27+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 24 194 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 194 24 194 25+ , SrcSpan "tests/examples/DerivingVia.hs" 194 25 194 26+ , SrcSpan "tests/examples/DerivingVia.hs" 194 26 194 27+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 194 25 194 26+ , srcInfoPoints = []+ }+ "+")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 3 195 27+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 3 195 27+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 195 3 195 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 195 3 195 4+ , SrcSpan "tests/examples/DerivingVia.hs" 195 4 195 5+ , SrcSpan "tests/examples/DerivingVia.hs" 195 5 195 6+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 195 4 195 5+ , srcInfoPoints = []+ }+ "*"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 15 195 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 195 15 195 16 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 17 195 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 17 195 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 17 195 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 17 195 23+ , srcInfoPoints = []+ }+ "liftA2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 24 195 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 195 24 195 25+ , SrcSpan "tests/examples/DerivingVia.hs" 195 25 195 26+ , SrcSpan "tests/examples/DerivingVia.hs" 195 26 195 27+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 24 195 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 195 24 195 25+ , SrcSpan "tests/examples/DerivingVia.hs" 195 25 195 26+ , SrcSpan "tests/examples/DerivingVia.hs" 195 26 195 27+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 195 25 195 26+ , srcInfoPoints = []+ }+ "*")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 3 196 28+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 3 196 28+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 196 3 196 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 196 3 196 9+ , srcInfoPoints = []+ }+ "negate"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 15 196 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 196 15 196 16 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 17 196 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 17 196 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 17 196 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 17 196 21+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 22 196 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 22 196 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 196 22 196 28+ , srcInfoPoints = []+ }+ "negate")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 3 197 35+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 3 197 35+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 3 197 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 3 197 14+ , srcInfoPoints = []+ }+ "fromInteger"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 15 197 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 197 15 197 16 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 17 197 35+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 17 197 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 17 197 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 17 197 21+ , srcInfoPoints = []+ }+ "pure")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 22 197 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 22 197 23+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 22 197 23+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 24 197 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 24 197 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 197 24 197 35+ , srcInfoPoints = []+ }+ "fromInteger")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 3 198 25+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 3 198 25+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 198 3 198 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 198 3 198 6+ , srcInfoPoints = []+ }+ "abs"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 15 198 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 198 15 198 16 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 17 198 25+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 17 198 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 17 198 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 17 198 21+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 22 198 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 22 198 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 198 22 198 25+ , srcInfoPoints = []+ }+ "abs")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 3 199 28+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 3 199 28+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 199 3 199 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 199 3 199 9+ , srcInfoPoints = []+ }+ "signum"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 15 199 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 199 15 199 16 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 17 199 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 17 199 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 17 199 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 17 199 21+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 22 199 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 22 199 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 199 22 199 28+ , srcInfoPoints = []+ }+ "signum")))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 201 1 205 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 201 1 201 9+ , SrcSpan "tests/examples/DerivingVia.hs" 201 76 201 81+ , SrcSpan "tests/examples/DerivingVia.hs" 202 3 202 3+ , SrcSpan "tests/examples/DerivingVia.hs" 203 3 203 3+ , SrcSpan "tests/examples/DerivingVia.hs" 205 1 205 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 10 201 75+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 10 201 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 201 10 201 11+ , SrcSpan "tests/examples/DerivingVia.hs" 201 24 201 25+ , SrcSpan "tests/examples/DerivingVia.hs" 201 38 201 39+ , SrcSpan "tests/examples/DerivingVia.hs" 201 40 201 42+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 11 201 24+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 11 201 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 11 201 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 11 201 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 11 201 22+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 23 201 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 23 201 24+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 26 201 38+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 26 201 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 26 201 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 26 201 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 26 201 36+ , srcInfoPoints = []+ }+ "Fractional")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 37 201 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 37 201 38+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 43 201 75+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 43 201 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 43 201 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 43 201 53+ , srcInfoPoints = []+ }+ "Fractional")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 54 201 75+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 201 54 201 55+ , SrcSpan "tests/examples/DerivingVia.hs" 201 74 201 75+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 55 201 74+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 55 201 72+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 55 201 70+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 55 201 70+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 55 201 70+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 71 201 72+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 71 201 72+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 73 201 74+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 201 73 201 74+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 3 202 28+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 3 202 28+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 202 3 202 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 202 3 202 8+ , srcInfoPoints = []+ }+ "recip"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 16 202 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 202 16 202 17 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 18 202 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 18 202 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 18 202 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 18 202 22+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 23 202 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 23 202 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 202 23 202 28+ , srcInfoPoints = []+ }+ "recip")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 3 203 37+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 3 203 37+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 3 203 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 3 203 15+ , srcInfoPoints = []+ }+ "fromRational"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 16 203 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 203 16 203 17 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 18 203 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 18 203 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 18 203 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 18 203 22+ , srcInfoPoints = []+ }+ "pure")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 23 203 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 23 203 24+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 23 203 24+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 25 203 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 25 203 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 203 25 203 37+ , srcInfoPoints = []+ }+ "fromRational")))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 205 1 221 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 205 1 205 9+ , SrcSpan "tests/examples/DerivingVia.hs" 205 72 205 77+ , SrcSpan "tests/examples/DerivingVia.hs" 206 3 206 3+ , SrcSpan "tests/examples/DerivingVia.hs" 207 3 207 3+ , SrcSpan "tests/examples/DerivingVia.hs" 208 3 208 3+ , SrcSpan "tests/examples/DerivingVia.hs" 209 3 209 3+ , SrcSpan "tests/examples/DerivingVia.hs" 210 3 210 3+ , SrcSpan "tests/examples/DerivingVia.hs" 211 3 211 3+ , SrcSpan "tests/examples/DerivingVia.hs" 212 3 212 3+ , SrcSpan "tests/examples/DerivingVia.hs" 213 3 213 3+ , SrcSpan "tests/examples/DerivingVia.hs" 214 3 214 3+ , SrcSpan "tests/examples/DerivingVia.hs" 215 3 215 3+ , SrcSpan "tests/examples/DerivingVia.hs" 216 3 216 3+ , SrcSpan "tests/examples/DerivingVia.hs" 217 3 217 3+ , SrcSpan "tests/examples/DerivingVia.hs" 218 3 218 3+ , SrcSpan "tests/examples/DerivingVia.hs" 219 3 219 3+ , SrcSpan "tests/examples/DerivingVia.hs" 221 1 221 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 10 205 71+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 10 205 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 205 10 205 11+ , SrcSpan "tests/examples/DerivingVia.hs" 205 24 205 25+ , SrcSpan "tests/examples/DerivingVia.hs" 205 36 205 37+ , SrcSpan "tests/examples/DerivingVia.hs" 205 38 205 40+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 11 205 24+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 11 205 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 11 205 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 11 205 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 11 205 22+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 23 205 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 23 205 24+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 26 205 36+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 26 205 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 26 205 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 26 205 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 26 205 34+ , srcInfoPoints = []+ }+ "Floating")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 35 205 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 35 205 36+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 41 205 71+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 41 205 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 41 205 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 41 205 49+ , srcInfoPoints = []+ }+ "Floating")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 50 205 71+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 205 50 205 51+ , SrcSpan "tests/examples/DerivingVia.hs" 205 70 205 71+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 51 205 70+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 51 205 68+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 51 205 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 51 205 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 51 205 66+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 67 205 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 67 205 68+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 69 205 70+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 205 69 205 70+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 3 206 18+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 3 206 18+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 206 3 206 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 206 3 206 5+ , srcInfoPoints = []+ }+ "pi"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 9 206 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 206 9 206 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 11 206 18+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 11 206 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 11 206 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 11 206 15+ , srcInfoPoints = []+ }+ "pure")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 16 206 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 16 206 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 206 16 206 18+ , srcInfoPoints = []+ }+ "pi")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 3 207 20+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 3 207 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 207 3 207 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 207 3 207 7+ , srcInfoPoints = []+ }+ "sqrt"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 9 207 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 207 9 207 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 11 207 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 11 207 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 11 207 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 11 207 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 16 207 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 16 207 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 207 16 207 20+ , srcInfoPoints = []+ }+ "sqrt")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 3 208 19+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 3 208 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 208 3 208 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 208 3 208 6+ , srcInfoPoints = []+ }+ "exp"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 9 208 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 208 9 208 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 11 208 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 11 208 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 11 208 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 11 208 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 16 208 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 16 208 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 208 16 208 19+ , srcInfoPoints = []+ }+ "exp")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 3 209 19+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 3 209 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 209 3 209 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 209 3 209 6+ , srcInfoPoints = []+ }+ "log"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 9 209 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 209 9 209 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 11 209 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 11 209 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 11 209 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 11 209 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 16 209 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 16 209 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 209 16 209 19+ , srcInfoPoints = []+ }+ "log")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 3 210 19+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 3 210 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 210 3 210 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 210 3 210 6+ , srcInfoPoints = []+ }+ "sin"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 9 210 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 210 9 210 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 11 210 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 11 210 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 11 210 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 11 210 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 16 210 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 16 210 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 210 16 210 19+ , srcInfoPoints = []+ }+ "sin")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 3 211 19+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 3 211 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 211 3 211 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 211 3 211 6+ , srcInfoPoints = []+ }+ "cos"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 9 211 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 211 9 211 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 11 211 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 11 211 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 11 211 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 11 211 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 16 211 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 16 211 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 211 16 211 19+ , srcInfoPoints = []+ }+ "cos")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 3 212 20+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 3 212 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 212 3 212 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 212 3 212 7+ , srcInfoPoints = []+ }+ "asin"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 9 212 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 212 9 212 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 11 212 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 11 212 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 11 212 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 11 212 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 16 212 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 16 212 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 212 16 212 20+ , srcInfoPoints = []+ }+ "asin")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 3 213 20+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 3 213 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 213 3 213 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 213 3 213 7+ , srcInfoPoints = []+ }+ "atan"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 9 213 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 213 9 213 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 11 213 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 11 213 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 11 213 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 11 213 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 16 213 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 16 213 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 213 16 213 20+ , srcInfoPoints = []+ }+ "atan")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 3 214 20+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 3 214 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 214 3 214 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 214 3 214 7+ , srcInfoPoints = []+ }+ "acos"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 9 214 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 214 9 214 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 11 214 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 11 214 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 11 214 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 11 214 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 16 214 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 16 214 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 214 16 214 20+ , srcInfoPoints = []+ }+ "acos")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 3 215 20+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 3 215 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 215 3 215 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 215 3 215 7+ , srcInfoPoints = []+ }+ "sinh"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 9 215 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 215 9 215 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 11 215 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 11 215 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 11 215 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 11 215 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 16 215 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 16 215 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 215 16 215 20+ , srcInfoPoints = []+ }+ "sinh")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 3 216 20+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 3 216 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 216 3 216 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 216 3 216 7+ , srcInfoPoints = []+ }+ "cosh"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 9 216 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 216 9 216 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 11 216 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 11 216 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 11 216 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 11 216 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 16 216 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 16 216 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 216 16 216 20+ , srcInfoPoints = []+ }+ "cosh")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 3 217 21+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 3 217 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 217 3 217 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 217 3 217 8+ , srcInfoPoints = []+ }+ "asinh"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 9 217 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 217 9 217 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 11 217 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 11 217 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 11 217 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 11 217 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 16 217 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 16 217 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 217 16 217 21+ , srcInfoPoints = []+ }+ "asinh")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 3 218 21+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 3 218 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 218 3 218 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 218 3 218 8+ , srcInfoPoints = []+ }+ "atanh"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 9 218 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 218 9 218 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 11 218 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 11 218 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 11 218 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 11 218 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 16 218 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 16 218 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 218 16 218 21+ , srcInfoPoints = []+ }+ "atanh")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 3 219 21+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 3 219 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 219 3 219 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 219 3 219 8+ , srcInfoPoints = []+ }+ "acosh"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 9 219 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 219 9 219 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 11 219 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 11 219 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 11 219 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 11 219 15+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 16 219 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 16 219 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 219 16 219 21+ , srcInfoPoints = []+ }+ "acosh")))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 221 1 224 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 221 1 221 9+ , SrcSpan "tests/examples/DerivingVia.hs" 221 74 221 79+ , SrcSpan "tests/examples/DerivingVia.hs" 222 3 222 3+ , SrcSpan "tests/examples/DerivingVia.hs" 224 1 224 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 10 221 73+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 10 221 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 221 10 221 11+ , SrcSpan "tests/examples/DerivingVia.hs" 221 24 221 25+ , SrcSpan "tests/examples/DerivingVia.hs" 221 37 221 38+ , SrcSpan "tests/examples/DerivingVia.hs" 221 39 221 41+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 11 221 24+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 11 221 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 11 221 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 11 221 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 11 221 22+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 23 221 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 23 221 24+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 26 221 37+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 26 221 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 26 221 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 26 221 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 26 221 35+ , srcInfoPoints = []+ }+ "Semigroup")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 36 221 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 36 221 37+ , srcInfoPoints = []+ }+ "s")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 42 221 73+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 42 221 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 42 221 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 42 221 51+ , srcInfoPoints = []+ }+ "Semigroup")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 52 221 73+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 221 52 221 53+ , SrcSpan "tests/examples/DerivingVia.hs" 221 72 221 73+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 53 221 72+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 53 221 70+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 53 221 68+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 53 221 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 53 221 68+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 69 221 70+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 69 221 70+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 71 221 72+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 221 71 221 72+ , srcInfoPoints = []+ }+ "s"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 3 222 21+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 3 222 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 222 3 222 7+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 222 3 222 4+ , SrcSpan "tests/examples/DerivingVia.hs" 222 4 222 6+ , SrcSpan "tests/examples/DerivingVia.hs" 222 6 222 7+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 222 4 222 6+ , srcInfoPoints = []+ }+ "<>"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 8 222 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 222 8 222 9 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 10 222 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 10 222 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 10 222 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 10 222 16+ , srcInfoPoints = []+ }+ "liftA2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 17 222 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 222 17 222 18+ , SrcSpan "tests/examples/DerivingVia.hs" 222 18 222 20+ , SrcSpan "tests/examples/DerivingVia.hs" 222 20 222 21+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 17 222 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 222 17 222 18+ , SrcSpan "tests/examples/DerivingVia.hs" 222 18 222 20+ , SrcSpan "tests/examples/DerivingVia.hs" 222 20 222 21+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 222 18 222 20+ , srcInfoPoints = []+ }+ "<>")))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 224 1 230 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 224 1 224 9+ , SrcSpan "tests/examples/DerivingVia.hs" 224 68 224 73+ , SrcSpan "tests/examples/DerivingVia.hs" 225 3 225 3+ , SrcSpan "tests/examples/DerivingVia.hs" 230 1 230 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 10 224 67+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 10 224 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 224 10 224 11+ , SrcSpan "tests/examples/DerivingVia.hs" 224 24 224 25+ , SrcSpan "tests/examples/DerivingVia.hs" 224 34 224 35+ , SrcSpan "tests/examples/DerivingVia.hs" 224 36 224 38+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 11 224 24+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 11 224 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 11 224 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 11 224 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 11 224 22+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 23 224 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 23 224 24+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 26 224 34+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 26 224 34+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 26 224 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 26 224 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 26 224 32+ , srcInfoPoints = []+ }+ "Monoid")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 33 224 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 33 224 34+ , srcInfoPoints = []+ }+ "m")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 39 224 67+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 39 224 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 39 224 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 39 224 45+ , srcInfoPoints = []+ }+ "Monoid")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 46 224 67+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 224 46 224 47+ , SrcSpan "tests/examples/DerivingVia.hs" 224 66 224 67+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 47 224 66+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 47 224 64+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 47 224 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 47 224 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 47 224 62+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 63 224 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 63 224 64+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 65 224 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 224 65 224 66+ , srcInfoPoints = []+ }+ "m"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 3 225 23+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 3 225 23+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 225 3 225 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 225 3 225 9+ , srcInfoPoints = []+ }+ "mempty"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 10 225 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 225 10 225 11 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 12 225 23+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 12 225 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 12 225 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 12 225 16+ , srcInfoPoints = []+ }+ "pure")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 17 225 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 17 225 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 225 17 225 23+ , srcInfoPoints = []+ }+ "mempty")))))+ Nothing)+ ])+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 230 1 231 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 230 1 230 6+ , SrcSpan "tests/examples/DerivingVia.hs" 230 17 230 22+ , SrcSpan "tests/examples/DerivingVia.hs" 231 3 231 3+ , SrcSpan "tests/examples/DerivingVia.hs" 233 1 233 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 230 7 230 16+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 230 7 230 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 230 7 230 14+ , srcInfoPoints = []+ }+ "Pointed"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 230 15 230 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 230 15 230 16+ , srcInfoPoints = []+ }+ "p")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 3 231 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 231 11 231 13 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 3 231 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 231 11 231 13 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 3 231 10+ , srcInfoPoints = []+ }+ "pointed"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 14 231 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 231 16 231 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 14 231 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 14 231 15+ , srcInfoPoints = []+ }+ "a"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 19 231 22+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 19 231 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 19 231 20+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 21 231 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 231 21 231 22+ , srcInfoPoints = []+ }+ "a")))))+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 1 234 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 233 23 233 24 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 233 1 233 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 9 233 22+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 9 233 20+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 9 233 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 9 233 18+ , srcInfoPoints = []+ }+ "WrapMonad"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 19 233 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 19 233 20+ , srcInfoPoints = []+ }+ "f")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 21 233 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 21 233 22+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 25 233 43+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 25 233 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 25 233 37+ , srcInfoPoints = []+ }+ "WrappedMonad")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 38 233 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 233 38 233 39+ , SrcSpan "tests/examples/DerivingVia.hs" 233 42 233 43+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 39 233 42+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 39 233 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 39 233 40+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 41 233 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 233 41 233 42+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 3 234 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 234 3 234 11+ , SrcSpan "tests/examples/DerivingVia.hs" 234 20 234 21+ , SrcSpan "tests/examples/DerivingVia.hs" 234 28 234 29+ , SrcSpan "tests/examples/DerivingVia.hs" 234 35 234 36+ ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 12 234 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 21 234 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 21 234 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 21 234 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 21 234 28+ , srcInfoPoints = []+ }+ "Pointed")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 30 234 35+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 30 234 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 30 234 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 234 30 234 35+ , srcInfoPoints = []+ }+ "Monad")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 236 1 239 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 236 1 236 9+ , SrcSpan "tests/examples/DerivingVia.hs" 236 56 236 61+ , SrcSpan "tests/examples/DerivingVia.hs" 237 3 237 3+ , SrcSpan "tests/examples/DerivingVia.hs" 239 1 239 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 10 236 55+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 10 236 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 236 10 236 11+ , SrcSpan "tests/examples/DerivingVia.hs" 236 18 236 19+ , SrcSpan "tests/examples/DerivingVia.hs" 236 29 236 30+ , SrcSpan "tests/examples/DerivingVia.hs" 236 31 236 33+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 11 236 18+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 11 236 18+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 11 236 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 11 236 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 11 236 16+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 17 236 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 17 236 18+ , srcInfoPoints = []+ }+ "m")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 20 236 29+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 20 236 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 20 236 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 20 236 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 20 236 27+ , srcInfoPoints = []+ }+ "Pointed")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 28 236 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 28 236 29+ , srcInfoPoints = []+ }+ "m")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 34 236 55+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 34 236 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 34 236 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 34 236 41+ , srcInfoPoints = []+ }+ "Functor")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 42 236 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 236 42 236 43+ , SrcSpan "tests/examples/DerivingVia.hs" 236 54 236 55+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 43 236 54+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 43 236 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 43 236 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 43 236 52+ , srcInfoPoints = []+ }+ "WrapMonad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 53 236 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 236 53 236 54+ , srcInfoPoints = []+ }+ "m"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 237 3 237 15+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 237 3 237 15+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 237 3 237 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 237 3 237 7+ , srcInfoPoints = []+ }+ "fmap"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 237 8 237 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 237 8 237 9 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 237 10 237 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 237 10 237 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 237 10 237 15+ , srcInfoPoints = []+ }+ "liftM"))))+ Nothing)+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 239 1 244 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 239 1 239 9+ , SrcSpan "tests/examples/DerivingVia.hs" 239 60 239 65+ , SrcSpan "tests/examples/DerivingVia.hs" 240 3 240 3+ , SrcSpan "tests/examples/DerivingVia.hs" 241 3 241 3+ , SrcSpan "tests/examples/DerivingVia.hs" 244 1 244 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 10 239 59+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 10 239 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 239 10 239 11+ , SrcSpan "tests/examples/DerivingVia.hs" 239 18 239 19+ , SrcSpan "tests/examples/DerivingVia.hs" 239 29 239 30+ , SrcSpan "tests/examples/DerivingVia.hs" 239 31 239 33+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 11 239 18+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 11 239 18+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 11 239 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 11 239 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 11 239 16+ , srcInfoPoints = []+ }+ "Monad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 17 239 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 17 239 18+ , srcInfoPoints = []+ }+ "m")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 20 239 29+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 20 239 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 20 239 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 20 239 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 20 239 27+ , srcInfoPoints = []+ }+ "Pointed")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 28 239 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 28 239 29+ , srcInfoPoints = []+ }+ "m")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 34 239 59+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 34 239 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 34 239 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 34 239 45+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 46 239 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 239 46 239 47+ , SrcSpan "tests/examples/DerivingVia.hs" 239 58 239 59+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 47 239 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 47 239 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 47 239 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 47 239 56+ , srcInfoPoints = []+ }+ "WrapMonad")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 57 239 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 239 57 239 58+ , srcInfoPoints = []+ }+ "m"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 240 3 240 18+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 240 3 240 18+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 240 3 240 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 240 3 240 7+ , srcInfoPoints = []+ }+ "pure"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 240 9 240 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 240 9 240 10 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 240 11 240 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 240 11 240 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 240 11 240 18+ , srcInfoPoints = []+ }+ "pointed"))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 241 3 241 13+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 241 3 241 13+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 241 3 241 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 241 3 241 4+ , SrcSpan "tests/examples/DerivingVia.hs" 241 4 241 7+ , SrcSpan "tests/examples/DerivingVia.hs" 241 7 241 8+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 241 4 241 7+ , srcInfoPoints = []+ }+ "<*>"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 241 9 241 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 241 9 241 10 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 241 11 241 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 241 11 241 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 241 11 241 13+ , srcInfoPoints = []+ }+ "ap"))))+ Nothing)+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 1 247 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 244 15 244 16 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 244 1 244 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 6 244 14+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 6 244 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 6 244 12+ , srcInfoPoints = []+ }+ "Sorted"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 13 244 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 13 244 14+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 17 244 29+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 17 244 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 17 244 23+ , srcInfoPoints = []+ }+ "Sorted")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 24 244 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 24 244 25+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 26 244 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 26 244 27+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 28 244 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 244 28 244 29+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 3 245 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 245 3 245 11+ , SrcSpan "tests/examples/DerivingVia.hs" 245 12 245 13+ , SrcSpan "tests/examples/DerivingVia.hs" 245 20 245 21+ , SrcSpan "tests/examples/DerivingVia.hs" 245 33 245 34+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 246 5 246 8+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 9 246 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 246 9 246 10+ , SrcSpan "tests/examples/DerivingVia.hs" 246 26 246 27+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 10 246 26+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 10 246 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 10 246 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 10 246 19+ , srcInfoPoints = []+ }+ "WrapMonad")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 20 246 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 20 246 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 246 20 246 26+ , srcInfoPoints = []+ }+ "Sorted")))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 13 245 20+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 13 245 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 13 245 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 13 245 20+ , srcInfoPoints = []+ }+ "Functor")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 22 245 33+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 22 245 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 22 245 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 245 22 245 33+ , srcInfoPoints = []+ }+ "Applicative")))+ ]+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 3 247 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 247 3 247 11+ , SrcSpan "tests/examples/DerivingVia.hs" 247 12 247 13+ , SrcSpan "tests/examples/DerivingVia.hs" 247 16 247 17+ , SrcSpan "tests/examples/DerivingVia.hs" 247 28 247 29+ , SrcSpan "tests/examples/DerivingVia.hs" 247 38 247 39+ , SrcSpan "tests/examples/DerivingVia.hs" 247 49 247 50+ , SrcSpan "tests/examples/DerivingVia.hs" 247 57 247 58+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 248 5 248 8+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 9 248 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 248 9 248 10+ , SrcSpan "tests/examples/DerivingVia.hs" 248 34 248 35+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 10 248 34+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 10 248 32+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 10 248 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 10 248 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 10 248 25+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 26 248 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 26 248 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 26 248 32+ , srcInfoPoints = []+ }+ "Sorted"))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 33 248 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 248 33 248 34+ , srcInfoPoints = []+ }+ "a"))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 13 247 16+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 13 247 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 13 247 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 13 247 16+ , srcInfoPoints = []+ }+ "Num")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 18 247 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 18 247 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 18 247 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 18 247 28+ , srcInfoPoints = []+ }+ "Fractional")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 30 247 38+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 30 247 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 30 247 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 30 247 38+ , srcInfoPoints = []+ }+ "Floating")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 40 247 49+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 40 247 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 40 247 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 40 247 49+ , srcInfoPoints = []+ }+ "Semigroup")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 51 247 57+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 51 247 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 51 247 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 247 51 247 57+ , srcInfoPoints = []+ }+ "Monoid")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 251 1 258 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 251 1 251 9+ , SrcSpan "tests/examples/DerivingVia.hs" 251 23 251 28+ , SrcSpan "tests/examples/DerivingVia.hs" 252 3 252 3+ , SrcSpan "tests/examples/DerivingVia.hs" 253 3 253 3+ , SrcSpan "tests/examples/DerivingVia.hs" 258 1 258 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 10 251 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 10 251 22+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 10 251 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 10 251 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 10 251 15+ , srcInfoPoints = []+ }+ "Monad")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 16 251 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 16 251 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 251 16 251 22+ , srcInfoPoints = []+ }+ "Sorted")))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 3 252 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 252 9 252 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 3 252 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 252 9 252 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 252 3 252 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 252 3 252 4+ , SrcSpan "tests/examples/DerivingVia.hs" 252 4 252 7+ , SrcSpan "tests/examples/DerivingVia.hs" 252 7 252 8+ ]+ }+ ">>="+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 12 252 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 252 21 252 23 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 12 252 20+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 12 252 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 12 252 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 12 252 18+ , srcInfoPoints = []+ }+ "Sorted")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 19 252 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 19 252 20+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 24 252 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 252 40 252 42 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 24 252 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 252 24 252 25+ , SrcSpan "tests/examples/DerivingVia.hs" 252 38 252 39+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 25 252 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 252 27 252 29 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 25 252 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 25 252 26+ , srcInfoPoints = []+ }+ "a"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 30 252 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 30 252 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 30 252 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 252 30 252 36+ , srcInfoPoints = []+ }+ "Sorted")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 37 252 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 37 252 38+ , srcInfoPoints = []+ }+ "b")))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 43 252 51+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 43 252 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 43 252 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 43 252 49+ , srcInfoPoints = []+ }+ "Sorted")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 50 252 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 252 50 252 51+ , srcInfoPoints = []+ }+ "b"))))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 3 256 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 253 40 253 45 ]+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 3 256 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 253 40 253 45 ]+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 3 256 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 253 40 253 45 ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 3 253 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 253 3 253 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 3 253 9+ , srcInfoPoints = []+ }+ "Sorted"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 10 253 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 10 253 11+ , srcInfoPoints = []+ }+ "a")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 12 253 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 12 253 13+ , srcInfoPoints = []+ }+ "b")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 14 253 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 14 253 15+ , srcInfoPoints = []+ }+ "c")+ ])+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 16 253 19+ , srcInfoPoints = []+ }+ ">>=")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 20 253 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 20 253 21+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 22 253 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 253 22 253 23 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 24 253 39+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 24 253 36+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 24 253 33+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 24 253 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 253 24 253 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 253 24 253 30+ , srcInfoPoints = []+ }+ "Sorted")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 31 253 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 253 31 253 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 253 31 253 33+ , srcInfoPoints = []+ }+ "a'"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 34 253 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 34 253 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 253 34 253 36+ , srcInfoPoints = []+ }+ "b'"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 37 253 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 37 253 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 253 37 253 39+ , srcInfoPoints = []+ }+ "c'")))))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 5 256 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 254 5 254 5+ , SrcSpan "tests/examples/DerivingVia.hs" 255 5 255 5+ , SrcSpan "tests/examples/DerivingVia.hs" 256 5 256 5+ , SrcSpan "tests/examples/DerivingVia.hs" 258 1 258 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 5 254 26+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 5 254 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 5 254 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 254 5 254 11+ , srcInfoPoints = []+ }+ "Sorted"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 12 254 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 254 12 254 14+ , srcInfoPoints = []+ }+ "a'")+ , PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 15 254 16+ , srcInfoPoints = []+ }+ , PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 18 254 19+ , srcInfoPoints = []+ }+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 21 254 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 254 21 254 22 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 254 23 254 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 254 23 254 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 254 23 254 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 254+ 23+ 254+ 24+ , srcInfoPoints = []+ }+ "f")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 254 25 254 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 254 25 254 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 254+ 25+ 254+ 26+ , srcInfoPoints = []+ }+ "a")))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 5 255 26+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 5 255 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 5 255 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 255 5 255 11+ , srcInfoPoints = []+ }+ "Sorted"))+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 12 255 13+ , srcInfoPoints = []+ }+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 15 255 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 255 15 255 17+ , srcInfoPoints = []+ }+ "b'")+ , PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 18 255 19+ , srcInfoPoints = []+ }+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 21 255 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 255 21 255 22 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 255 23 255 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 255 23 255 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 255 23 255 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 255+ 23+ 255+ 24+ , srcInfoPoints = []+ }+ "f")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 255 25 255 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 255 25 255 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 255+ 25+ 255+ 26+ , srcInfoPoints = []+ }+ "b")))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 5 256 26+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 5 256 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 5 256 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 256 5 256 11+ , srcInfoPoints = []+ }+ "Sorted"))+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 12 256 13+ , srcInfoPoints = []+ }+ , PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 15 256 16+ , srcInfoPoints = []+ }+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 18 256 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 256 18 256 20+ , srcInfoPoints = []+ }+ "c'")+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 21 256 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 256 21 256 22 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 256 23 256 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 256 23 256 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 256 23 256 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 256+ 23+ 256+ 24+ , srcInfoPoints = []+ }+ "f")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 256 25 256 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 256 25 256 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 256+ 25+ 256+ 26+ , srcInfoPoints = []+ }+ "c")))))+ Nothing+ ]))+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 258 1 265 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 258 1 258 9+ , SrcSpan "tests/examples/DerivingVia.hs" 258 25 258 30+ , SrcSpan "tests/examples/DerivingVia.hs" 259 3 259 3+ , SrcSpan "tests/examples/DerivingVia.hs" 260 3 260 3+ , SrcSpan "tests/examples/DerivingVia.hs" 265 1 265 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 10 258 24+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 10 258 24+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 10 258 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 10 258 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 10 258 17+ , srcInfoPoints = []+ }+ "Pointed")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 18 258 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 18 258 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 258 18 258 24+ , srcInfoPoints = []+ }+ "Sorted")))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 3 259 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 259 11 259 13 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 3 259 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 259 11 259 13 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 3 259 10+ , srcInfoPoints = []+ }+ "pointed"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 14 259 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 259 16 259 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 14 259 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 14 259 15+ , srcInfoPoints = []+ }+ "a"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 19 259 27+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 19 259 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 19 259 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 19 259 25+ , srcInfoPoints = []+ }+ "Sorted")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 26 259 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 259 26 259 27+ , srcInfoPoints = []+ }+ "a")))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 3 260 27+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 3 260 27+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 3 260 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 3 260 10+ , srcInfoPoints = []+ }+ "pointed")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 11 260 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 11 260 12+ , srcInfoPoints = []+ }+ "a")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 13 260 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 260 13 260 14 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 15 260 27+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 15 260 25+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 15 260 23+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 15 260 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 260 15 260 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 260 15 260 21+ , srcInfoPoints = []+ }+ "Sorted")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 22 260 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 260 22 260 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 260 22 260 23+ , srcInfoPoints = []+ }+ "a"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 24 260 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 24 260 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 260 24 260 25+ , srcInfoPoints = []+ }+ "a"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 26 260 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 26 260 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 260 26 260 27+ , srcInfoPoints = []+ }+ "a")))))+ Nothing+ ])+ ])+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 265 1 266 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 265 1 265 6+ , SrcSpan "tests/examples/DerivingVia.hs" 265 16 265 21+ , SrcSpan "tests/examples/DerivingVia.hs" 266 3 266 3+ , SrcSpan "tests/examples/DerivingVia.hs" 268 1 268 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 265 7 265 15+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 265 7 265 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 265 7 265 13+ , srcInfoPoints = []+ }+ "IsZero"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 265 14 265 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 265 14 265 15+ , srcInfoPoints = []+ }+ "a")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 3 266 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 266 10 266 12 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 3 266 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 266 10 266 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 266 3 266 9+ , srcInfoPoints = []+ }+ "isZero"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 13 266 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 266 15 266 17 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 13 266 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 13 266 14+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 18 266 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 18 266 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 266 18 266 22+ , srcInfoPoints = []+ }+ "Bool")))))+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 1 268 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 268 25 268 26 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 268 1 268 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 9 268 24+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 9 268 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 9 268 21+ , srcInfoPoints = []+ }+ "WrappedNumEq"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 23 268 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 23 268 24+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 27 268 41+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 27 268 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 27 268 39+ , srcInfoPoints = []+ }+ "WrappedNumEq")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 40 268 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 268 40 268 41+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 1 269 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 269 25 269 26 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 269 1 269 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 9 269 24+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 9 269 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 9 269 20+ , srcInfoPoints = []+ }+ "WrappedShow"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 23 269 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 23 269 24+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 27 269 41+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 27 269 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 27 269 38+ , srcInfoPoints = []+ }+ "WrappedShow")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 40 269 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 269 40 269 41+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 1 270 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 270 25 270 26 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 270 1 270 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 9 270 24+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 9 270 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 9 270 22+ , srcInfoPoints = []+ }+ "WrappedNumEq2"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 23 270 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 23 270 24+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 27 270 42+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 27 270 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 27 270 40+ , srcInfoPoints = []+ }+ "WrappedNumEq2")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 41 270 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 270 41 270 42+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ []+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 272 1 276 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 272 1 272 9+ , SrcSpan "tests/examples/DerivingVia.hs" 272 51 272 56+ , SrcSpan "tests/examples/DerivingVia.hs" 273 3 273 3+ , SrcSpan "tests/examples/DerivingVia.hs" 274 3 274 3+ , SrcSpan "tests/examples/DerivingVia.hs" 276 1 276 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 10 272 50+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 10 272 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 272 10 272 11+ , SrcSpan "tests/examples/DerivingVia.hs" 272 16 272 17+ , SrcSpan "tests/examples/DerivingVia.hs" 272 22 272 23+ , SrcSpan "tests/examples/DerivingVia.hs" 272 24 272 26+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 11 272 16+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 11 272 16+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 11 272 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 11 272 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 11 272 14+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 15 272 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 15 272 16+ , srcInfoPoints = []+ }+ "a")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 18 272 22+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 18 272 22+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 18 272 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 18 272 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 18 272 20+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 21 272 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 21 272 22+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 27 272 50+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 27 272 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 27 272 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 27 272 33+ , srcInfoPoints = []+ }+ "IsZero")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 34 272 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 272 34 272 35+ , SrcSpan "tests/examples/DerivingVia.hs" 272 49 272 50+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 35 272 49+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 35 272 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 35 272 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 35 272 47+ , srcInfoPoints = []+ }+ "WrappedNumEq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 48 272 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 272 48 272 49+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 3 273 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 273 10 273 12 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 3 273 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 273 10 273 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 273 3 273 9+ , srcInfoPoints = []+ }+ "isZero"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 13 273 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 273 28 273 30 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 13 273 27+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 13 273 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 13 273 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 13 273 25+ , srcInfoPoints = []+ }+ "WrappedNumEq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 26 273 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 26 273 27+ , srcInfoPoints = []+ }+ "a")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 31 273 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 31 273 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 273 31 273 35+ , srcInfoPoints = []+ }+ "Bool")))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 3 274 35+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 3 274 35+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 3 274 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 274 3 274 9+ , srcInfoPoints = []+ }+ "isZero")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 10 274 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 274 10 274 11+ , SrcSpan "tests/examples/DerivingVia.hs" 274 25 274 26+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 11 274 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 11 274 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 11 274 23+ , srcInfoPoints = []+ }+ "WrappedNumEq"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 24 274 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 24 274 25+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 27 274 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 274 27 274 28 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 29 274 35+ , srcInfoPoints = []+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 29 274 30+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 29 274 30+ , srcInfoPoints = []+ }+ 0+ "0"))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 31 274 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 31 274 33+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 31 274 33+ , srcInfoPoints = []+ }+ "==")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 34 274 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 34 274 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 274 34 274 35+ , srcInfoPoints = []+ }+ "a")))))+ Nothing+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 276 1 280 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 276 1 276 9+ , SrcSpan "tests/examples/DerivingVia.hs" 276 43 276 48+ , SrcSpan "tests/examples/DerivingVia.hs" 277 3 277 3+ , SrcSpan "tests/examples/DerivingVia.hs" 278 3 278 3+ , SrcSpan "tests/examples/DerivingVia.hs" 280 1 280 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 10 276 42+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 10 276 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 276 17 276 19 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 10 276 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 276 17 276 19 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 10 276 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 276 17 276 19 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 10 276 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 276 17 276 19 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 10 276 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 10 276 14+ , srcInfoPoints = []+ }+ "Show")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 15 276 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 15 276 16+ , srcInfoPoints = []+ }+ "a"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 20 276 42+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 20 276 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 20 276 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 20 276 26+ , srcInfoPoints = []+ }+ "IsZero")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 27 276 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 276 27 276 28+ , SrcSpan "tests/examples/DerivingVia.hs" 276 41 276 42+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 28 276 41+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 28 276 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 28 276 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 28 276 39+ , srcInfoPoints = []+ }+ "WrappedShow")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 40 276 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 276 40 276 41+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 3 277 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 277 10 277 12 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 3 277 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 277 10 277 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 277 3 277 9+ , srcInfoPoints = []+ }+ "isZero"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 13 277 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 277 27 277 29 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 13 277 26+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 13 277 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 13 277 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 13 277 24+ , srcInfoPoints = []+ }+ "WrappedShow")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 25 277 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 25 277 26+ , srcInfoPoints = []+ }+ "a")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 30 277 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 30 277 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 277 30 277 34+ , srcInfoPoints = []+ }+ "Bool")))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 3 278 41+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 3 278 41+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 3 278 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 278 3 278 9+ , srcInfoPoints = []+ }+ "isZero")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 10 278 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 278 10 278 11+ , SrcSpan "tests/examples/DerivingVia.hs" 278 24 278 25+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 11 278 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 11 278 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 11 278 22+ , srcInfoPoints = []+ }+ "WrappedShow"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 23 278 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 23 278 24+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 26 278 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 278 26 278 27 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 28 278 41+ , srcInfoPoints = []+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 28 278 31+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 28 278 31+ , srcInfoPoints = []+ }+ "0"+ "0"))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 32 278 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 32 278 34+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 32 278 34+ , srcInfoPoints = []+ }+ "==")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 35 278 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 35 278 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 35 278 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 278 35 278 39+ , srcInfoPoints = []+ }+ "show")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 40 278 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 278 40 278 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 278 40 278 41+ , srcInfoPoints = []+ }+ "a"))))))+ Nothing+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 280 1 284 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 280 1 280 9+ , SrcSpan "tests/examples/DerivingVia.hs" 280 52 280 57+ , SrcSpan "tests/examples/DerivingVia.hs" 281 3 281 3+ , SrcSpan "tests/examples/DerivingVia.hs" 282 3 282 3+ , SrcSpan "tests/examples/DerivingVia.hs" 284 1 284 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 10 280 51+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 10 280 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 280 10 280 11+ , SrcSpan "tests/examples/DerivingVia.hs" 280 16 280 17+ , SrcSpan "tests/examples/DerivingVia.hs" 280 22 280 23+ , SrcSpan "tests/examples/DerivingVia.hs" 280 24 280 26+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 11 280 16+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 11 280 16+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 11 280 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 11 280 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 11 280 14+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 15 280 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 15 280 16+ , srcInfoPoints = []+ }+ "a")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 18 280 22+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 18 280 22+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 18 280 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 18 280 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 18 280 20+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 21 280 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 21 280 22+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 27 280 51+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 27 280 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 27 280 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 27 280 33+ , srcInfoPoints = []+ }+ "IsZero")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 34 280 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 280 34 280 35+ , SrcSpan "tests/examples/DerivingVia.hs" 280 50 280 51+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 35 280 50+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 35 280 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 35 280 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 35 280 48+ , srcInfoPoints = []+ }+ "WrappedNumEq2")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 49 280 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 280 49 280 50+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 3 281 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 281 10 281 12 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 3 281 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 281 10 281 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 281 3 281 9+ , srcInfoPoints = []+ }+ "isZero"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 13 281 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 281 29 281 31 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 13 281 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 13 281 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 13 281 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 13 281 26+ , srcInfoPoints = []+ }+ "WrappedNumEq2")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 27 281 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 27 281 28+ , srcInfoPoints = []+ }+ "a")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 32 281 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 32 281 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 281 32 281 36+ , srcInfoPoints = []+ }+ "Bool")))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 3 282 40+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 3 282 40+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 3 282 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 282 3 282 9+ , srcInfoPoints = []+ }+ "isZero")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 10 282 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 282 10 282 11+ , SrcSpan "tests/examples/DerivingVia.hs" 282 26 282 27+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 11 282 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 11 282 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 11 282 24+ , srcInfoPoints = []+ }+ "WrappedNumEq2"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 25 282 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 25 282 26+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 28 282 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 282 28 282 29 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 30 282 40+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 30 282 35+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 30 282 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 30 282 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 282 30 282 31+ , srcInfoPoints = []+ }+ "a")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 32 282 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 32 282 33+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 282 32 282 33+ , srcInfoPoints = []+ }+ "+")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 34 282 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 34 282 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 282 34 282 35+ , srcInfoPoints = []+ }+ "a"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 36 282 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 36 282 38+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 36 282 38+ , srcInfoPoints = []+ }+ "==")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 39 282 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 39 282 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 282 39 282 40+ , srcInfoPoints = []+ }+ "a")))))+ Nothing+ ])+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 1 286 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 284 13 284 14 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 284 1 284 8+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 9 284 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 9 284 12+ , srcInfoPoints = []+ }+ "INT"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 15 284 22+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 15 284 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 15 284 18+ , srcInfoPoints = []+ }+ "INT")+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 19 284 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 19 284 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 284 19 284 22+ , srcInfoPoints = []+ }+ "Int"))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 285 3 285 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 285 3 285 11 ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 285 12 285 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 285 20 285 24+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 285 20 285 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 285 20 285 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 285 20 285 24+ , srcInfoPoints = []+ }+ "Show")))+ ]+ , Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 3 286 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 286 3 286 11 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 19 286 22+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 23 286 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 286 23 286 24+ , SrcSpan "tests/examples/DerivingVia.hs" 286 40 286 41+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 24 286 40+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 24 286 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 24 286 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 24 286 36+ , srcInfoPoints = []+ }+ "WrappedNumEq")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 37 286 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 37 286 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 37 286 40+ , srcInfoPoints = []+ }+ "Int")))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 12 286 18+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 12 286 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 12 286 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 286 12 286 18+ , srcInfoPoints = []+ }+ "IsZero")))+ ]+ ]+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 1 288 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 288 14 288 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 288 1 288 8+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 9 288 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 9 288 13+ , srcInfoPoints = []+ }+ "VOID"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 16 288 25+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 16 288 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 16 288 20+ , srcInfoPoints = []+ }+ "VOID")+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 21 288 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 21 288 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 21 288 25+ , srcInfoPoints = []+ }+ "Void"))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 26 288 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 288 26 288 34 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 42 288 45+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 46 288 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 288 46 288 47+ , SrcSpan "tests/examples/DerivingVia.hs" 288 63 288 64+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 47 288 63+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 47 288 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 47 288 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 47 288 58+ , srcInfoPoints = []+ }+ "WrappedShow")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 59 288 63+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 59 288 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 59 288 63+ , srcInfoPoints = []+ }+ "Void")))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 35 288 41+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 35 288 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 35 288 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 288 35 288 41+ , srcInfoPoints = []+ }+ "IsZero")))+ ]+ ]+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 1 301 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 293 1 293 6+ , SrcSpan "tests/examples/DerivingVia.hs" 293 38 293 43+ , SrcSpan "tests/examples/DerivingVia.hs" 294 3 294 3+ , SrcSpan "tests/examples/DerivingVia.hs" 296 3 296 3+ , SrcSpan "tests/examples/DerivingVia.hs" 303 1 303 0+ ]+ }+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 7 293 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 293 19 293 21 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 7 293 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 293 19 293 21 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 7 293 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 293 19 293 21 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 7 293 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 293 19 293 21 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 7 293 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 7 293 16+ , srcInfoPoints = []+ }+ "Bifunctor")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 17 293 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 17 293 18+ , srcInfoPoints = []+ }+ "p"))))))+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 22 293 37+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 22 293 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 22 293 35+ , srcInfoPoints = []+ }+ "Biapplicative"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 36 293 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 293 36 293 37+ , srcInfoPoints = []+ }+ "p")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 3 294 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 294 10 294 12 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 3 294 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 294 10 294 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 294 3 294 9+ , srcInfoPoints = []+ }+ "bipure"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 13 294 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 294 15 294 17 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 13 294 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 13 294 14+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 18 294 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 294 20 294 22 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 18 294 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 18 294 19+ , srcInfoPoints = []+ }+ "b"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 23 294 28+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 23 294 26+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 23 294 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 23 294 24+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 25 294 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 25 294 26+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 27 294 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 294 27 294 28+ , srcInfoPoints = []+ }+ "b"))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 296 3 301 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 297 5 297 7 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 296 3 301 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 297 5 297 7 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 296 3 296 11+ , srcInfoPoints = []+ }+ "biliftA2"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 8 301 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 298 5 298 7 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 8 297 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 297 8 297 9+ , SrcSpan "tests/examples/DerivingVia.hs" 297 22 297 23+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 9 297 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 297 12 297 14 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 9 297 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 9 297 10+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 15 297 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 297 18 297 20 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 15 297 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 15 297 16+ , srcInfoPoints = []+ }+ "b"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 21 297 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 297 21 297 22+ , srcInfoPoints = []+ }+ "c")))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 8 301 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 299 5 299 7 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 8 298 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 298 8 298 9+ , SrcSpan "tests/examples/DerivingVia.hs" 298 23 298 24+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 9 298 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 298 12 298 14 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 9 298 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 9 298 11+ , srcInfoPoints = []+ }+ "a'"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 15 298 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 298 18 298 20 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 15 298 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 15 298 17+ , srcInfoPoints = []+ }+ "b'"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 21 298 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 298 21 298 23+ , srcInfoPoints = []+ }+ "c'")))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 8 301 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 300 5 300 7 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 8 299 14+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 8 299 11+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 8 299 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 8 299 9+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 10 299 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 10 299 11+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 12 299 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 299 12 299 14+ , srcInfoPoints = []+ }+ "a'")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 300 8 301 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 301 5 301 7 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 300 8 300 14+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 300 8 300 11+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 300 8 300 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 300 8 300 9+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 300 10 300 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 300 10 300 11+ , srcInfoPoints = []+ }+ "b")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 300 12 300 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 300 12 300 14+ , srcInfoPoints = []+ }+ "b'")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 301 8 301 14+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 301 8 301 11+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 301 8 301 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 301 8 301 9+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 301 10 301 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 301 10 301 11+ , srcInfoPoints = []+ }+ "c")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 301 12 301 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 301 12 301 14+ , srcInfoPoints = []+ }+ "c'"))))))))+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 303 1 309 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 303 1 303 9+ , SrcSpan "tests/examples/DerivingVia.hs" 303 28 303 33+ , SrcSpan "tests/examples/DerivingVia.hs" 304 3 304 3+ , SrcSpan "tests/examples/DerivingVia.hs" 306 3 306 3+ , SrcSpan "tests/examples/DerivingVia.hs" 309 1 309 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 10 303 27+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 10 303 27+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 10 303 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 10 303 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 10 303 23+ , srcInfoPoints = []+ }+ "Biapplicative")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 24 303 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 303 24 303 25+ , SrcSpan "tests/examples/DerivingVia.hs" 303 25 303 26+ , SrcSpan "tests/examples/DerivingVia.hs" 303 26 303 27+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 24 303 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 303 24 303 25+ , SrcSpan "tests/examples/DerivingVia.hs" 303 25 303 26+ , SrcSpan "tests/examples/DerivingVia.hs" 303 26 303 27+ ]+ }+ (TupleCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 303 24 303 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 303 24 303 25+ , SrcSpan "tests/examples/DerivingVia.hs" 303 25 303 26+ , SrcSpan "tests/examples/DerivingVia.hs" 303 26 303 27+ ]+ }+ Boxed+ 2)))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 304 3 304 15+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 304 3 304 15+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 304 3 304 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 304 3 304 9+ , srcInfoPoints = []+ }+ "bipure"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 304 10 304 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 304 10 304 11 ]+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 304 12 304 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 304 12 304 13+ , SrcSpan "tests/examples/DerivingVia.hs" 304 13 304 14+ , SrcSpan "tests/examples/DerivingVia.hs" 304 14 304 15+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 304 12 304 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 304 12 304 13+ , SrcSpan "tests/examples/DerivingVia.hs" 304 13 304 14+ , SrcSpan "tests/examples/DerivingVia.hs" 304 14 304 15+ ]+ }+ (TupleCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 304 12 304 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 304 12 304 13+ , SrcSpan "tests/examples/DerivingVia.hs" 304 13 304 14+ , SrcSpan "tests/examples/DerivingVia.hs" 304 14 304 15+ ]+ }+ Boxed+ 2))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 3 307 22+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 3 307 22+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 3 307 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 3 306 11+ , srcInfoPoints = []+ }+ "biliftA2")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 12 306 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 12 306 13+ , srcInfoPoints = []+ }+ "f")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 14 306 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 14 306 16+ , srcInfoPoints = []+ }+ "f'")+ , PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 17 306 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 306 17 306 18+ , SrcSpan "tests/examples/DerivingVia.hs" 306 19 306 20+ , SrcSpan "tests/examples/DerivingVia.hs" 306 23 306 24+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 18 306 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 18 306 19+ , srcInfoPoints = []+ }+ "a")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 21 306 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 21 306 23+ , srcInfoPoints = []+ }+ "a'")+ ]+ , PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 25 306 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 306 25 306 26+ , SrcSpan "tests/examples/DerivingVia.hs" 306 27 306 28+ , SrcSpan "tests/examples/DerivingVia.hs" 306 31 306 32+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 26 306 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 26 306 27+ , srcInfoPoints = []+ }+ "b")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 29 306 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 29 306 31+ , srcInfoPoints = []+ }+ "b'")+ ]+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 306 33 307 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 306 33 306 34 ]+ }+ (Tuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 5 307 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 307 5 307 6+ , SrcSpan "tests/examples/DerivingVia.hs" 307 11 307 12+ , SrcSpan "tests/examples/DerivingVia.hs" 307 21 307 22+ ]+ }+ Boxed+ [ App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 6 307 11+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 6 307 9+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 6 307 7+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 6 307 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 6 307 7+ , srcInfoPoints = []+ }+ "f")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 8 307 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 8 307 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 8 307 9+ , srcInfoPoints = []+ }+ "a"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 10 307 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 10 307 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 10 307 11+ , srcInfoPoints = []+ }+ "b")))+ , App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 13 307 21+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 13 307 18+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 13 307 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 13 307 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 13 307 15+ , srcInfoPoints = []+ }+ "f'")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 16 307 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 16 307 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 16 307 18+ , srcInfoPoints = []+ }+ "a'"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 19 307 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 307 19 307 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 307 19 307 21+ , srcInfoPoints = []+ }+ "b'")))+ ]))+ Nothing+ ])+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 1 310 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 309 25 309 26 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 309 1 309 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 9 309 24+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 9 309 22+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 9 309 20+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 9 309 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 9 309 18+ , srcInfoPoints = []+ }+ "WrapBiapp"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 19 309 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 19 309 20+ , srcInfoPoints = []+ }+ "p")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 21 309 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 21 309 22+ , srcInfoPoints = []+ }+ "a")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 23 309 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 23 309 24+ , srcInfoPoints = []+ }+ "b")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 27 309 43+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 27 309 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 27 309 35+ , srcInfoPoints = []+ }+ "WrapBiap")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 36 309 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 309 36 309 37+ , SrcSpan "tests/examples/DerivingVia.hs" 309 42 309 43+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 37 309 42+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 37 309 40+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 37 309 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 37 309 38+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 39 309 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 39 309 40+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 41 309 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 309 41 309 42+ , srcInfoPoints = []+ }+ "b")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 3 310 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 310 3 310 11+ , SrcSpan "tests/examples/DerivingVia.hs" 310 20 310 21+ , SrcSpan "tests/examples/DerivingVia.hs" 310 30 310 31+ , SrcSpan "tests/examples/DerivingVia.hs" 310 45 310 46+ , SrcSpan "tests/examples/DerivingVia.hs" 310 49 310 50+ ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 12 310 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 21 310 30+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 21 310 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 21 310 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 21 310 30+ , srcInfoPoints = []+ }+ "Bifunctor")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 32 310 45+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 32 310 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 32 310 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 32 310 45+ , srcInfoPoints = []+ }+ "Biapplicative")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 47 310 49+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 47 310 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 47 310 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 310 47 310 49+ , srcInfoPoints = []+ }+ "Eq")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 312 1 321 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 312 1 312 9+ , SrcSpan "tests/examples/DerivingVia.hs" 312 67 312 72+ , SrcSpan "tests/examples/DerivingVia.hs" 313 3 313 3+ , SrcSpan "tests/examples/DerivingVia.hs" 314 3 314 3+ , SrcSpan "tests/examples/DerivingVia.hs" 315 3 315 3+ , SrcSpan "tests/examples/DerivingVia.hs" 316 3 316 3+ , SrcSpan "tests/examples/DerivingVia.hs" 317 3 317 3+ , SrcSpan "tests/examples/DerivingVia.hs" 318 3 318 3+ , SrcSpan "tests/examples/DerivingVia.hs" 319 3 319 3+ , SrcSpan "tests/examples/DerivingVia.hs" 321 1 321 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 10 312 66+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 10 312 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 312 10 312 11+ , SrcSpan "tests/examples/DerivingVia.hs" 312 26 312 27+ , SrcSpan "tests/examples/DerivingVia.hs" 312 33 312 34+ , SrcSpan "tests/examples/DerivingVia.hs" 312 40 312 41+ , SrcSpan "tests/examples/DerivingVia.hs" 312 42 312 44+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 11 312 26+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 11 312 26+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 11 312 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 11 312 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 11 312 24+ , srcInfoPoints = []+ }+ "Biapplicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 25 312 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 25 312 26+ , srcInfoPoints = []+ }+ "p")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 28 312 33+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 28 312 33+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 28 312 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 28 312 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 28 312 31+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 32 312 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 32 312 33+ , srcInfoPoints = []+ }+ "a")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 35 312 40+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 35 312 40+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 35 312 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 35 312 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 35 312 38+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 39 312 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 39 312 40+ , srcInfoPoints = []+ }+ "b")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 45 312 66+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 45 312 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 45 312 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 45 312 48+ , srcInfoPoints = []+ }+ "Num")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 49 312 66+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 312 49 312 50+ , SrcSpan "tests/examples/DerivingVia.hs" 312 65 312 66+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 50 312 65+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 50 312 63+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 50 312 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 50 312 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 50 312 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 50 312 59+ , srcInfoPoints = []+ }+ "WrapBiapp")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 60 312 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 60 312 61+ , srcInfoPoints = []+ }+ "p")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 62 312 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 62 312 63+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 64 312 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 312 64 312 65+ , srcInfoPoints = []+ }+ "b"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 3 313 25+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 3 313 25+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 313 3 313 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 313 3 313 4+ , SrcSpan "tests/examples/DerivingVia.hs" 313 4 313 5+ , SrcSpan "tests/examples/DerivingVia.hs" 313 5 313 6+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 313 4 313 5+ , srcInfoPoints = []+ }+ "+"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 7 313 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 313 7 313 8 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 9 313 25+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 9 313 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 9 313 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 9 313 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 9 313 17+ , srcInfoPoints = []+ }+ "biliftA2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 18 313 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 313 18 313 19+ , SrcSpan "tests/examples/DerivingVia.hs" 313 19 313 20+ , SrcSpan "tests/examples/DerivingVia.hs" 313 20 313 21+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 18 313 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 313 18 313 19+ , SrcSpan "tests/examples/DerivingVia.hs" 313 19 313 20+ , SrcSpan "tests/examples/DerivingVia.hs" 313 20 313 21+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 19 313 20+ , srcInfoPoints = []+ }+ "+"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 22 313 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 313 22 313 23+ , SrcSpan "tests/examples/DerivingVia.hs" 313 23 313 24+ , SrcSpan "tests/examples/DerivingVia.hs" 313 24 313 25+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 22 313 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 313 22 313 23+ , SrcSpan "tests/examples/DerivingVia.hs" 313 23 313 24+ , SrcSpan "tests/examples/DerivingVia.hs" 313 24 313 25+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 313 23 313 24+ , srcInfoPoints = []+ }+ "+")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 3 314 25+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 3 314 25+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 314 3 314 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 314 3 314 4+ , SrcSpan "tests/examples/DerivingVia.hs" 314 4 314 5+ , SrcSpan "tests/examples/DerivingVia.hs" 314 5 314 6+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 314 4 314 5+ , srcInfoPoints = []+ }+ "-"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 7 314 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 314 7 314 8 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 9 314 25+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 9 314 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 9 314 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 9 314 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 9 314 17+ , srcInfoPoints = []+ }+ "biliftA2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 18 314 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 314 18 314 19+ , SrcSpan "tests/examples/DerivingVia.hs" 314 19 314 20+ , SrcSpan "tests/examples/DerivingVia.hs" 314 20 314 21+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 18 314 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 314 18 314 19+ , SrcSpan "tests/examples/DerivingVia.hs" 314 19 314 20+ , SrcSpan "tests/examples/DerivingVia.hs" 314 20 314 21+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 19 314 20+ , srcInfoPoints = []+ }+ "*"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 22 314 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 314 22 314 23+ , SrcSpan "tests/examples/DerivingVia.hs" 314 23 314 24+ , SrcSpan "tests/examples/DerivingVia.hs" 314 24 314 25+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 22 314 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 314 22 314 23+ , SrcSpan "tests/examples/DerivingVia.hs" 314 23 314 24+ , SrcSpan "tests/examples/DerivingVia.hs" 314 24 314 25+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 314 23 314 24+ , srcInfoPoints = []+ }+ "*")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 3 315 25+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 3 315 25+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 315 3 315 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 315 3 315 4+ , SrcSpan "tests/examples/DerivingVia.hs" 315 4 315 5+ , SrcSpan "tests/examples/DerivingVia.hs" 315 5 315 6+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 315 4 315 5+ , srcInfoPoints = []+ }+ "*"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 7 315 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 315 7 315 8 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 9 315 25+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 9 315 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 9 315 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 9 315 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 9 315 17+ , srcInfoPoints = []+ }+ "biliftA2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 18 315 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 315 18 315 19+ , SrcSpan "tests/examples/DerivingVia.hs" 315 19 315 20+ , SrcSpan "tests/examples/DerivingVia.hs" 315 20 315 21+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 18 315 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 315 18 315 19+ , SrcSpan "tests/examples/DerivingVia.hs" 315 19 315 20+ , SrcSpan "tests/examples/DerivingVia.hs" 315 20 315 21+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 19 315 20+ , srcInfoPoints = []+ }+ "*"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 22 315 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 315 22 315 23+ , SrcSpan "tests/examples/DerivingVia.hs" 315 23 315 24+ , SrcSpan "tests/examples/DerivingVia.hs" 315 24 315 25+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 22 315 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 315 22 315 23+ , SrcSpan "tests/examples/DerivingVia.hs" 315 23 315 24+ , SrcSpan "tests/examples/DerivingVia.hs" 315 24 315 25+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 315 23 315 24+ , srcInfoPoints = []+ }+ "*")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 3 316 31+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 3 316 31+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 316 3 316 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 316 3 316 9+ , srcInfoPoints = []+ }+ "negate"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 10 316 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 316 10 316 11 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 12 316 31+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 12 316 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 12 316 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 12 316 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 12 316 17+ , srcInfoPoints = []+ }+ "bimap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 18 316 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 18 316 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 18 316 24+ , srcInfoPoints = []+ }+ "negate"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 25 316 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 25 316 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 316 25 316 31+ , srcInfoPoints = []+ }+ "negate")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 3 317 22+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 3 317 22+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 317 3 317 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 317 3 317 6+ , srcInfoPoints = []+ }+ "abs"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 7 317 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 317 7 317 8 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 9 317 22+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 9 317 18+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 9 317 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 9 317 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 9 317 14+ , srcInfoPoints = []+ }+ "bimap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 15 317 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 15 317 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 15 317 18+ , srcInfoPoints = []+ }+ "abs"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 19 317 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 19 317 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 317 19 317 22+ , srcInfoPoints = []+ }+ "abs")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 3 318 31+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 3 318 31+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 318 3 318 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 318 3 318 9+ , srcInfoPoints = []+ }+ "signum"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 10 318 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 318 10 318 11 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 12 318 31+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 12 318 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 12 318 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 12 318 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 12 318 17+ , srcInfoPoints = []+ }+ "bimap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 18 318 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 18 318 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 18 318 24+ , srcInfoPoints = []+ }+ "signum"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 25 318 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 25 318 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 318 25 318 31+ , srcInfoPoints = []+ }+ "signum")))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 3 319 55+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 3 319 55+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 3 319 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 3 319 14+ , srcInfoPoints = []+ }+ "fromInteger")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 15 319 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 15 319 16+ , srcInfoPoints = []+ }+ "n")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 17 319 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 319 17 319 18 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 19 319 55+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 19 319 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 19 319 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 19 319 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 319 19 319 30+ , srcInfoPoints = []+ }+ "fromInteger")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 31 319 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 31 319 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 319 31 319 32+ , srcInfoPoints = []+ }+ "n"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 33 319 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 319 33 319 34+ , SrcSpan "tests/examples/DerivingVia.hs" 319 34 319 40+ , SrcSpan "tests/examples/DerivingVia.hs" 319 40 319 41+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 33 319 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 319 33 319 34+ , SrcSpan "tests/examples/DerivingVia.hs" 319 34 319 40+ , SrcSpan "tests/examples/DerivingVia.hs" 319 40 319 41+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 34 319 40+ , srcInfoPoints = []+ }+ "bipure")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 42 319 55+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 42 319 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 42 319 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 319 42 319 53+ , srcInfoPoints = []+ }+ "fromInteger")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 54 319 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 319 54 319 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 319 54 319 55+ , srcInfoPoints = []+ }+ "n"))))))+ Nothing+ ])+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 1 322 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 321 14 321 15 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 321 1 321 8+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 9 321 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 9 321 13+ , srcInfoPoints = []+ }+ "INT2"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 16 321 31+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 16 321 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 16 321 20+ , srcInfoPoints = []+ }+ "INT2")+ [ TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 21 321 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 321 21 321 22+ , SrcSpan "tests/examples/DerivingVia.hs" 321 25 321 26+ , SrcSpan "tests/examples/DerivingVia.hs" 321 30 321 31+ ]+ }+ Boxed+ [ TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 22 321 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 22 321 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 22 321 25+ , srcInfoPoints = []+ }+ "Int"))+ , TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 27 321 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 27 321 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 321 27 321 30+ , srcInfoPoints = []+ }+ "Int"))+ ]+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 3 322 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 322 3 322 11 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 19 322 22+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 23 322 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 322 23 322 24+ , SrcSpan "tests/examples/DerivingVia.hs" 322 61 322 62+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 24 322 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 24 322 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 24 322 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 24 322 37+ , srcInfoPoints = []+ }+ "WrappedNumEq2")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 38 322 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 322 38 322 39+ , SrcSpan "tests/examples/DerivingVia.hs" 322 60 322 61+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 39 322 60+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 39 322 56+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 39 322 52+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 39 322 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 322 39 322 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 322 39 322 48+ , srcInfoPoints = []+ }+ "WrapBiapp")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 49 322 52+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 322 49 322 50+ , SrcSpan+ "tests/examples/DerivingVia.hs" 322 50 322 51+ , SrcSpan+ "tests/examples/DerivingVia.hs" 322 51 322 52+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 322 49 322 52+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 322 49 322 50+ , SrcSpan+ "tests/examples/DerivingVia.hs" 322 50 322 51+ , SrcSpan+ "tests/examples/DerivingVia.hs" 322 51 322 52+ ]+ }+ (TupleCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 322 49 322 52+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs"+ 322+ 49+ 322+ 50+ , SrcSpan+ "tests/examples/DerivingVia.hs"+ 322+ 50+ 322+ 51+ , SrcSpan+ "tests/examples/DerivingVia.hs"+ 322+ 51+ 322+ 52+ ]+ }+ Boxed+ 2))))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 53 322 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 53 322 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 322 53 322 56+ , srcInfoPoints = []+ }+ "Int"))))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 57 322 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 57 322 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 57 322 60+ , srcInfoPoints = []+ }+ "Int")))))))))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 12 322 18+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 12 322 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 12 322 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 322 12 322 18+ , srcInfoPoints = []+ }+ "IsZero")))+ ]+ ]+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 1 328 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 327 1 327 6+ , SrcSpan "tests/examples/DerivingVia.hs" 327 32 327 37+ , SrcSpan "tests/examples/DerivingVia.hs" 328 3 328 3+ , SrcSpan "tests/examples/DerivingVia.hs" 330 1 330 0+ ]+ }+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 7 327 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 327 16 327 18 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 7 327 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 327 16 327 18 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 7 327 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 327 16 327 18 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 7 327 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 327 16 327 18 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 7 327 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 7 327 13+ , srcInfoPoints = []+ }+ "Monoid")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 14 327 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 14 327 15+ , srcInfoPoints = []+ }+ "a"))))))+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 19 327 31+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 19 327 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 19 327 29+ , srcInfoPoints = []+ }+ "MonoidNull"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 30 327 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 327 30 327 31+ , srcInfoPoints = []+ }+ "a")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 3 328 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 328 8 328 10 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 3 328 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 328 8 328 10 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 328 3 328 7+ , srcInfoPoints = []+ }+ "null"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 11 328 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 328 13 328 15 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 11 328 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 11 328 12+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 16 328 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 16 328 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 328 16 328 20+ , srcInfoPoints = []+ }+ "Bool")))))+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 1 330 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 330 22 330 23 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 330 1 330 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 9 330 21+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 9 330 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 9 330 19+ , srcInfoPoints = []+ }+ "WrpMonNull"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 20 330 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 20 330 21+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 24 330 29+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 24 330 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 24 330 27+ , srcInfoPoints = []+ }+ "WRM")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 28 330 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 28 330 29+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 30 330 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 330 30 330 38+ , SrcSpan "tests/examples/DerivingVia.hs" 330 39 330 40+ , SrcSpan "tests/examples/DerivingVia.hs" 330 42 330 43+ , SrcSpan "tests/examples/DerivingVia.hs" 330 53 330 54+ , SrcSpan "tests/examples/DerivingVia.hs" 330 61 330 62+ ]+ }+ Nothing+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 40 330 42+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 40 330 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 40 330 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 40 330 42+ , srcInfoPoints = []+ }+ "Eq")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 44 330 53+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 44 330 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 44 330 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 44 330 53+ , srcInfoPoints = []+ }+ "Semigroup")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 55 330 61+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 55 330 61+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 55 330 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 330 55 330 61+ , srcInfoPoints = []+ }+ "Monoid")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 332 1 336 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 332 1 332 9+ , SrcSpan "tests/examples/DerivingVia.hs" 332 56 332 61+ , SrcSpan "tests/examples/DerivingVia.hs" 333 3 333 3+ , SrcSpan "tests/examples/DerivingVia.hs" 334 3 334 3+ , SrcSpan "tests/examples/DerivingVia.hs" 336 1 336 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 10 332 55+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 10 332 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 332 10 332 11+ , SrcSpan "tests/examples/DerivingVia.hs" 332 15 332 16+ , SrcSpan "tests/examples/DerivingVia.hs" 332 25 332 26+ , SrcSpan "tests/examples/DerivingVia.hs" 332 27 332 29+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 11 332 15+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 11 332 15+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 11 332 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 11 332 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 11 332 13+ , srcInfoPoints = []+ }+ "Eq")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 14 332 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 14 332 15+ , srcInfoPoints = []+ }+ "a")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 17 332 25+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 17 332 25+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 17 332 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 17 332 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 17 332 23+ , srcInfoPoints = []+ }+ "Monoid")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 24 332 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 24 332 25+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 30 332 55+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 30 332 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 30 332 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 30 332 40+ , srcInfoPoints = []+ }+ "MonoidNull")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 41 332 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 332 41 332 42+ , SrcSpan "tests/examples/DerivingVia.hs" 332 54 332 55+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 42 332 54+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 42 332 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 42 332 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 42 332 52+ , srcInfoPoints = []+ }+ "WrpMonNull")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 53 332 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 332 53 332 54+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 3 333 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 333 8 333 10 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 3 333 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 333 8 333 10 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 333 3 333 7+ , srcInfoPoints = []+ }+ "null"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 11 333 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 333 24 333 26 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 11 333 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 11 333 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 11 333 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 11 333 21+ , srcInfoPoints = []+ }+ "WrpMonNull")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 22 333 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 22 333 23+ , srcInfoPoints = []+ }+ "a")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 27 333 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 27 333 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 333 27 333 31+ , srcInfoPoints = []+ }+ "Bool")))))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 3 334 21+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 3 334 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 334 3 334 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 334 3 334 7+ , srcInfoPoints = []+ }+ "null"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 8 334 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 334 8 334 9 ]+ }+ (RightSection+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 10 334 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 334 10 334 11+ , SrcSpan "tests/examples/DerivingVia.hs" 334 20 334 21+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 11 334 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 11 334 13+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 11 334 13+ , srcInfoPoints = []+ }+ "==")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 14 334 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 14 334 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 334 14 334 20+ , srcInfoPoints = []+ }+ "mempty")))))+ Nothing)+ ])+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 1 336 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 336 1 336 9+ , SrcSpan "tests/examples/DerivingVia.hs" 336 31 336 39+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 10 336 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 14 336 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 336 14 336 15+ , SrcSpan "tests/examples/DerivingVia.hs" 336 29 336 30+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 15 336 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 15 336 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 15 336 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 15 336 25+ , srcInfoPoints = []+ }+ "WrpMonNull")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 26 336 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 26 336 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 26 336 29+ , srcInfoPoints = []+ }+ "Any")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 40 336 54+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 40 336 54+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 40 336 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 40 336 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 40 336 50+ , srcInfoPoints = []+ }+ "MonoidNull")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 51 336 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 51 336 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 336 51 336 54+ , srcInfoPoints = []+ }+ "Any")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 1 337 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 337 1 337 9+ , SrcSpan "tests/examples/DerivingVia.hs" 337 31 337 39+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 10 337 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 14 337 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 337 14 337 15+ , SrcSpan "tests/examples/DerivingVia.hs" 337 15 337 16+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 14 337 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 337 14 337 15+ , SrcSpan "tests/examples/DerivingVia.hs" 337 15 337 16+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 14 337 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 337 14 337 15+ , SrcSpan "tests/examples/DerivingVia.hs" 337 15 337 16+ ]+ })))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 40 337 53+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 40 337 53+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 40 337 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 40 337 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 40 337 50+ , srcInfoPoints = []+ }+ "MonoidNull")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 51 337 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 337 51 337 52+ , SrcSpan "tests/examples/DerivingVia.hs" 337 52 337 53+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 51 337 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 337 51 337 52+ , SrcSpan "tests/examples/DerivingVia.hs" 337 52 337 53+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 337 51 337 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 337 51 337 52+ , SrcSpan "tests/examples/DerivingVia.hs" 337 52 337 53+ ]+ })))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 1 338 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 338 1 338 9+ , SrcSpan "tests/examples/DerivingVia.hs" 338 31 338 39+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 10 338 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 14 338 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 14 338 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 14 338 22+ , srcInfoPoints = []+ }+ "Ordering")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 40 338 59+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 40 338 59+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 40 338 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 40 338 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 40 338 50+ , srcInfoPoints = []+ }+ "MonoidNull")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 51 338 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 51 338 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 338 51 338 59+ , srcInfoPoints = []+ }+ "Ordering")))))+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 345 1 348 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 345 1 345 6+ , SrcSpan "tests/examples/DerivingVia.hs" 345 17 345 22+ , SrcSpan "tests/examples/DerivingVia.hs" 346 3 346 3+ , SrcSpan "tests/examples/DerivingVia.hs" 347 3 347 3+ , SrcSpan "tests/examples/DerivingVia.hs" 348 3 348 3+ , SrcSpan "tests/examples/DerivingVia.hs" 350 1 350 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 345 7 345 16+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 345 7 345 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 345 7 345 14+ , srcInfoPoints = []+ }+ "Lattice"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 345 15 345 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 345 15 345 16+ , srcInfoPoints = []+ }+ "a")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 3 346 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 346 9 346 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 3 346 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 346 9 346 11 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 346 3 346 6+ , srcInfoPoints = []+ }+ "sup"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 12 346 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 346 14 346 16 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 12 346 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 12 346 13+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 17 346 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 346 19 346 21 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 17 346 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 17 346 18+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 22 346 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 346 22 346 23+ , srcInfoPoints = []+ }+ "a")))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 3 347 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 347 9 347 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 3 347 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 347 9 347 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 347 3 347 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 347 3 347 4+ , SrcSpan "tests/examples/DerivingVia.hs" 347 4 347 7+ , SrcSpan "tests/examples/DerivingVia.hs" 347 7 347 8+ ]+ }+ ".>="+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 12 347 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 347 14 347 16 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 12 347 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 12 347 13+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 17 347 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 347 19 347 21 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 17 347 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 17 347 18+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 22 347 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 22 347 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 347 22 347 26+ , srcInfoPoints = []+ }+ "Bool"))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 3 348 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 348 9 348 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 3 348 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 348 9 348 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 348 3 348 7+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 348 3 348 4+ , SrcSpan "tests/examples/DerivingVia.hs" 348 4 348 6+ , SrcSpan "tests/examples/DerivingVia.hs" 348 6 348 7+ ]+ }+ ".>"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 12 348 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 348 14 348 16 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 12 348 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 12 348 13+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 17 348 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 348 19 348 21 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 17 348 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 17 348 18+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 22 348 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 22 348 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 348 22 348 26+ , srcInfoPoints = []+ }+ "Bool"))))))+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 1 351 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 350 19 350 20 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 350 1 350 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 9 350 18+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 9 350 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 9 350 16+ , srcInfoPoints = []+ }+ "WrapOrd"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 17 350 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 17 350 18+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 21 350 33+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 21 350 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 21 350 31+ , srcInfoPoints = []+ }+ "WrappedOrd")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 32 350 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 350 32 350 33+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 3 351 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 351 3 351 11+ , SrcSpan "tests/examples/DerivingVia.hs" 351 20 351 21+ , SrcSpan "tests/examples/DerivingVia.hs" 351 23 351 24+ , SrcSpan "tests/examples/DerivingVia.hs" 351 28 351 29+ ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 12 351 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 21 351 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 21 351 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 21 351 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 21 351 23+ , srcInfoPoints = []+ }+ "Eq")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 25 351 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 25 351 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 25 351 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 351 25 351 28+ , srcInfoPoints = []+ }+ "Ord")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 353 1 358 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 353 1 353 9+ , SrcSpan "tests/examples/DerivingVia.hs" 353 39 353 44+ , SrcSpan "tests/examples/DerivingVia.hs" 354 3 354 3+ , SrcSpan "tests/examples/DerivingVia.hs" 355 3 355 3+ , SrcSpan "tests/examples/DerivingVia.hs" 356 3 356 3+ , SrcSpan "tests/examples/DerivingVia.hs" 358 1 358 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 10 353 38+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 10 353 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 353 16 353 18 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 10 353 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 353 16 353 18 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 10 353 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 353 16 353 18 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 10 353 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 353 16 353 18 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 10 353 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 10 353 13+ , srcInfoPoints = []+ }+ "Ord")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 14 353 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 14 353 15+ , srcInfoPoints = []+ }+ "a"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 19 353 38+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 19 353 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 19 353 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 19 353 26+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 27 353 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 353 27 353 28+ , SrcSpan "tests/examples/DerivingVia.hs" 353 37 353 38+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 28 353 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 28 353 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 28 353 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 28 353 35+ , srcInfoPoints = []+ }+ "WrapOrd")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 36 353 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 353 36 353 37+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 354 3 354 14+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 354 3 354 14+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 354 3 354 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 354 3 354 6+ , srcInfoPoints = []+ }+ "sup"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 354 9 354 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 354 9 354 10 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 354 11 354 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 354 11 354 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 354 11 354 14+ , srcInfoPoints = []+ }+ "max"))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 355 3 355 15+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 355 3 355 15+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 355 3 355 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 355 3 355 4+ , SrcSpan "tests/examples/DerivingVia.hs" 355 4 355 7+ , SrcSpan "tests/examples/DerivingVia.hs" 355 7 355 8+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 355 4 355 7+ , srcInfoPoints = []+ }+ ".>="))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 355 9 355 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 355 9 355 10 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 355 11 355 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 355 11 355 12+ , SrcSpan "tests/examples/DerivingVia.hs" 355 12 355 14+ , SrcSpan "tests/examples/DerivingVia.hs" 355 14 355 15+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 355 11 355 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 355 11 355 12+ , SrcSpan "tests/examples/DerivingVia.hs" 355 12 355 14+ , SrcSpan "tests/examples/DerivingVia.hs" 355 14 355 15+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 355 12 355 14+ , srcInfoPoints = []+ }+ ">="))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 356 3 356 14+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 356 3 356 14+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 356 3 356 7+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 356 3 356 4+ , SrcSpan "tests/examples/DerivingVia.hs" 356 4 356 6+ , SrcSpan "tests/examples/DerivingVia.hs" 356 6 356 7+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 356 4 356 6+ , srcInfoPoints = []+ }+ ".>"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 356 9 356 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 356 9 356 10 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 356 11 356 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 356 11 356 12+ , SrcSpan "tests/examples/DerivingVia.hs" 356 12 356 13+ , SrcSpan "tests/examples/DerivingVia.hs" 356 13 356 14+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 356 11 356 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 356 11 356 12+ , SrcSpan "tests/examples/DerivingVia.hs" 356 12 356 13+ , SrcSpan "tests/examples/DerivingVia.hs" 356 13 356 14+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 356 12 356 13+ , srcInfoPoints = []+ }+ ">"))))+ Nothing)+ ])+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 1 358 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 358 1 358 9+ , SrcSpan "tests/examples/DerivingVia.hs" 358 21 358 29+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 10 358 13+ , srcInfoPoints = []+ }+ (TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 14 358 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 358 14 358 15+ , SrcSpan "tests/examples/DerivingVia.hs" 358 16 358 17+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 15 358 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 15 358 16+ , srcInfoPoints = []+ }+ "a")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 30 358 59+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 30 358 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 358 45 358 47 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 30 358 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 358 45 358 47 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 30 358 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 358 45 358 47 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 30 358 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 358 45 358 47 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 30 358 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 30 358 33+ , srcInfoPoints = []+ }+ "Ord")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 34 358 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 34 358 35+ , srcInfoPoints = []+ }+ "a"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 48 358 59+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 48 358 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 48 358 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 48 358 55+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 56 358 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 358 56 358 57+ , SrcSpan "tests/examples/DerivingVia.hs" 358 58 358 59+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 57 358 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 358 57 358 58+ , srcInfoPoints = []+ }+ "a")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 1 359 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 359 1 359 9+ , SrcSpan "tests/examples/DerivingVia.hs" 359 21 359 29+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 10 359 13+ , srcInfoPoints = []+ }+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 14 359 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 359 14 359 15+ , SrcSpan "tests/examples/DerivingVia.hs" 359 16 359 17+ , SrcSpan "tests/examples/DerivingVia.hs" 359 19 359 20+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 15 359 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 15 359 16+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 18 359 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 18 359 19+ , srcInfoPoints = []+ }+ "b")+ ])))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 30 359 62+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 30 359 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 359 30 359 31+ , SrcSpan "tests/examples/DerivingVia.hs" 359 36 359 37+ , SrcSpan "tests/examples/DerivingVia.hs" 359 43 359 44+ , SrcSpan "tests/examples/DerivingVia.hs" 359 45 359 47+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 31 359 36+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 31 359 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 31 359 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 31 359 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 31 359 34+ , srcInfoPoints = []+ }+ "Ord")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 35 359 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 35 359 36+ , srcInfoPoints = []+ }+ "a")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 38 359 43+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 38 359 43+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 38 359 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 38 359 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 38 359 41+ , srcInfoPoints = []+ }+ "Ord")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 42 359 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 42 359 43+ , srcInfoPoints = []+ }+ "b")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 48 359 62+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 48 359 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 48 359 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 48 359 55+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 56 359 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 359 56 359 57+ , SrcSpan "tests/examples/DerivingVia.hs" 359 58 359 59+ , SrcSpan "tests/examples/DerivingVia.hs" 359 61 359 62+ ]+ }+ Boxed+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 57 359 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 57 359 58+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 60 359 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 359 60 359 61+ , srcInfoPoints = []+ }+ "b")+ ])))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 1 361 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 361 1 361 9+ , SrcSpan "tests/examples/DerivingVia.hs" 361 19 361 27+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 10 361 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 14 361 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 14 361 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 14 361 18+ , srcInfoPoints = []+ }+ "Bool")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 28 361 40+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 28 361 40+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 28 361 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 28 361 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 28 361 35+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 36 361 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 36 361 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 361 36 361 40+ , srcInfoPoints = []+ }+ "Bool")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 1 363 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 363 1 363 9+ , SrcSpan "tests/examples/DerivingVia.hs" 363 19 363 27+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 10 363 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 14 363 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 14 363 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 14 363 18+ , srcInfoPoints = []+ }+ "Char")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 28 363 40+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 28 363 40+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 28 363 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 28 363 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 28 363 35+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 36 363 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 36 363 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 363 36 363 40+ , srcInfoPoints = []+ }+ "Char")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 1 365 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 365 1 365 9+ , SrcSpan "tests/examples/DerivingVia.hs" 365 18 365 26+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 10 365 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 14 365 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 14 365 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 14 365 17+ , srcInfoPoints = []+ }+ "Int")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 27 365 38+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 27 365 38+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 27 365 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 27 365 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 27 365 34+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 35 365 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 35 365 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 365 35 365 38+ , srcInfoPoints = []+ }+ "Int")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 1 367 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 367 1 367 9+ , SrcSpan "tests/examples/DerivingVia.hs" 367 22 367 30+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 10 367 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 14 367 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 14 367 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 14 367 21+ , srcInfoPoints = []+ }+ "Integer")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 31 367 46+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 31 367 46+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 31 367 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 31 367 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 31 367 38+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 39 367 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 39 367 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 367 39 367 46+ , srcInfoPoints = []+ }+ "Integer")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 1 369 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 369 1 369 9+ , SrcSpan "tests/examples/DerivingVia.hs" 369 20 369 28+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 10 369 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 14 369 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 14 369 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 14 369 19+ , srcInfoPoints = []+ }+ "Float")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 29 369 42+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 29 369 42+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 29 369 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 29 369 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 29 369 36+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 37 369 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 37 369 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 369 37 369 42+ , srcInfoPoints = []+ }+ "Float")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 1 371 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 371 1 371 9+ , SrcSpan "tests/examples/DerivingVia.hs" 371 21 371 29+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 10 371 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 14 371 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 14 371 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 14 371 20+ , srcInfoPoints = []+ }+ "Double")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 30 371 44+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 30 371 44+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 30 371 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 30 371 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 30 371 37+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 38 371 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 38 371 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 371 38 371 44+ , srcInfoPoints = []+ }+ "Double")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 1 373 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 373 1 373 9+ , SrcSpan "tests/examples/DerivingVia.hs" 373 23 373 31+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 10 373 13+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 14 373 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 14 373 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 14 373 22+ , srcInfoPoints = []+ }+ "Rational")))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 32 373 48+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 32 373 48+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 32 373 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 32 373 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 32 373 39+ , srcInfoPoints = []+ }+ "Lattice")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 40 373 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 40 373 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 373 40 373 48+ , srcInfoPoints = []+ }+ "Rational")))))+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 1 386 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 380 1 380 6+ , SrcSpan "tests/examples/DerivingVia.hs" 380 31 380 36+ , SrcSpan "tests/examples/DerivingVia.hs" 381 3 381 3+ , SrcSpan "tests/examples/DerivingVia.hs" 382 3 382 3+ , SrcSpan "tests/examples/DerivingVia.hs" 383 3 383 3+ , SrcSpan "tests/examples/DerivingVia.hs" 384 3 384 3+ , SrcSpan "tests/examples/DerivingVia.hs" 385 3 385 3+ , SrcSpan "tests/examples/DerivingVia.hs" 386 3 386 3+ , SrcSpan "tests/examples/DerivingVia.hs" 388 1 388 0+ ]+ }+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 7 380 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 380 17 380 19 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 7 380 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 380 17 380 19 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 7 380 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 380 17 380 19 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 7 380 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 380 17 380 19 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 7 380 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 7 380 14+ , srcInfoPoints = []+ }+ "Functor")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 15 380 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 15 380 16+ , srcInfoPoints = []+ }+ "f"))))))+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 20 380 30+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 20 380 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 20 380 28+ , srcInfoPoints = []+ }+ "Additive"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 29 380 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 380 29 380 30+ , srcInfoPoints = []+ }+ "f")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 3 381 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 381 8 381 10 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 3 381 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 381 8 381 10 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 381 3 381 7+ , srcInfoPoints = []+ }+ "zero"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 11 381 23+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 11 381 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 381 17 381 19 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 11 381 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 381 17 381 19 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 11 381 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 381 17 381 19 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 11 381 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 381 17 381 19+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 11 381 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 381 11 381 14+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 15 381 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 15 381 16+ , srcInfoPoints = []+ }+ "a"))))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 20 381 23+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 20 381 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 20 381 21+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 22 381 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 381 22 381 23+ , srcInfoPoints = []+ }+ "a")))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 3 382 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 9 382 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 3 382 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 9 382 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 382 3 382 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 3 382 4+ , SrcSpan "tests/examples/DerivingVia.hs" 382 4 382 7+ , SrcSpan "tests/examples/DerivingVia.hs" 382 7 382 8+ ]+ }+ "^+^"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 12 382 38+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 12 382 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 18 382 20 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 12 382 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 18 382 20 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 12 382 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 18 382 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 12 382 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 18 382 20+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 12 382 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 382 12 382 15+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 16 382 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 16 382 17+ , srcInfoPoints = []+ }+ "a"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 21 382 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 25 382 27 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 21 382 24+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 21 382 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 21 382 22+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 23 382 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 23 382 24+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 28 382 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 382 32 382 34 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 28 382 31+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 28 382 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 28 382 29+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 30 382 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 30 382 31+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 35 382 38+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 35 382 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 35 382 36+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 37 382 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 382 37 382 38+ , srcInfoPoints = []+ }+ "a")))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 3 383 21+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 3 383 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 383 3 383 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 383 3 383 4+ , SrcSpan "tests/examples/DerivingVia.hs" 383 4 383 7+ , SrcSpan "tests/examples/DerivingVia.hs" 383 7 383 8+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 383 4 383 7+ , srcInfoPoints = []+ }+ "^+^"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 9 383 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 383 9 383 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 11 383 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 11 383 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 11 383 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 11 383 17+ , srcInfoPoints = []+ }+ "liftU2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 18 383 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 383 18 383 19+ , SrcSpan "tests/examples/DerivingVia.hs" 383 19 383 20+ , SrcSpan "tests/examples/DerivingVia.hs" 383 20 383 21+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 18 383 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 383 18 383 19+ , SrcSpan "tests/examples/DerivingVia.hs" 383 19 383 20+ , SrcSpan "tests/examples/DerivingVia.hs" 383 20 383 21+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 383 19 383 20+ , srcInfoPoints = []+ }+ "+")))))+ Nothing)+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 3 384 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 9 384 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 3 384 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 9 384 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 384 3 384 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 3 384 4+ , SrcSpan "tests/examples/DerivingVia.hs" 384 4 384 7+ , SrcSpan "tests/examples/DerivingVia.hs" 384 7 384 8+ ]+ }+ "^-^"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 12 384 38+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 12 384 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 18 384 20 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 12 384 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 18 384 20 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 12 384 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 18 384 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 12 384 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 18 384 20+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 12 384 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 384 12 384 15+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 16 384 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 16 384 17+ , srcInfoPoints = []+ }+ "a"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 21 384 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 25 384 27 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 21 384 24+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 21 384 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 21 384 22+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 23 384 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 23 384 24+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 28 384 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 384 32 384 34 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 28 384 31+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 28 384 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 28 384 29+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 30 384 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 30 384 31+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 35 384 38+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 35 384 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 35 384 36+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 37 384 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 384 37 384 38+ , srcInfoPoints = []+ }+ "a")))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 3 385 32+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 3 385 32+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 3 385 32+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 385 3 385 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 385 3 385 4+ , srcInfoPoints = []+ }+ "x"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 385 5 385 8+ , srcInfoPoints = []+ }+ "^-^")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 9 385 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 9 385 10+ , srcInfoPoints = []+ }+ "y")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 11 385 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 385 11 385 12 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 13 385 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 13 385 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 13 385 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 13 385 14+ , srcInfoPoints = []+ }+ "x")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 15 385 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 15 385 18+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 15 385 18+ , srcInfoPoints = []+ }+ "^+^")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 19 385 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 19 385 30+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 19 385 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 385 19 385 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 385 19 385 23+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 24 385 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 385 24 385 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 385 24 385 30+ , srcInfoPoints = []+ }+ "negate"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 31 385 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 385 31 385 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 385 31 385 32+ , srcInfoPoints = []+ }+ "y"))))))+ Nothing+ ])+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 3 386 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 10 386 12 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 3 386 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 10 386 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 386 3 386 9+ , srcInfoPoints = []+ }+ "liftU2"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 13 386 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 27 386 29 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 13 386 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 13 386 14+ , SrcSpan "tests/examples/DerivingVia.hs" 386 25 386 26+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 14 386 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 16 386 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 14 386 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 14 386 15+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 19 386 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 21 386 23 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 19 386 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 19 386 20+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 24 386 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 24 386 25+ , srcInfoPoints = []+ }+ "a")))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 30 386 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 34 386 36 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 30 386 33+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 30 386 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 30 386 31+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 32 386 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 32 386 33+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 37 386 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 386 41 386 43 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 37 386 40+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 37 386 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 37 386 38+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 39 386 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 39 386 40+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 44 386 47+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 44 386 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 44 386 45+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 46 386 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 386 46 386 47+ , srcInfoPoints = []+ }+ "a")))))))+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 388 1 395 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 388 1 388 9+ , SrcSpan "tests/examples/DerivingVia.hs" 388 22 388 27+ , SrcSpan "tests/examples/DerivingVia.hs" 389 3 389 3+ , SrcSpan "tests/examples/DerivingVia.hs" 390 3 390 3+ , SrcSpan "tests/examples/DerivingVia.hs" 395 1 395 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 10 388 21+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 10 388 21+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 10 388 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 10 388 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 10 388 18+ , srcInfoPoints = []+ }+ "Additive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 19 388 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 388 19 388 20+ , SrcSpan "tests/examples/DerivingVia.hs" 388 20 388 21+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 19 388 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 388 19 388 20+ , SrcSpan "tests/examples/DerivingVia.hs" 388 20 388 21+ ]+ }+ (ListCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 388 19 388 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 388 19 388 20+ , SrcSpan "tests/examples/DerivingVia.hs" 388 20 388 21+ ]+ })))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 389 3 389 12+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 389 3 389 12+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 389 3 389 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 389 3 389 7+ , srcInfoPoints = []+ }+ "zero"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 389 8 389 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 389 8 389 9 ]+ }+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 389 10 389 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 389 10 389 11+ , SrcSpan "tests/examples/DerivingVia.hs" 389 11 389 12+ ]+ }+ []))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 3 393 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 390 17 390 22 ]+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 3 393 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 390 17 390 22 ]+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 3 393 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 390 17 390 22 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 390 3 390 9+ , srcInfoPoints = []+ }+ "liftU2")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 10 390 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 10 390 11+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 12 390 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 390 12 390 13 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 14 390 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 14 390 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 390 14 390 16+ , srcInfoPoints = []+ }+ "go"))))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 391 5 393 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 391 5 391 5+ , SrcSpan "tests/examples/DerivingVia.hs" 392 5 392 5+ , SrcSpan "tests/examples/DerivingVia.hs" 393 5 393 5+ , SrcSpan "tests/examples/DerivingVia.hs" 395 1 395 0+ ]+ }+ [ FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 391 5 393 18+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 391 5 391 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 391 5 391 7+ , srcInfoPoints = []+ }+ "go")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 391 8 391 14+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 391 8 391 9+ , SrcSpan+ "tests/examples/DerivingVia.hs" 391 13 391 14+ ]+ }+ (PInfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 9 391 13+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 9 391 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 9+ 391+ 10+ , srcInfoPoints = []+ }+ "x"))+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 10+ 391+ 11+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 10+ 391+ 11+ , srcInfoPoints = []+ }))+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 11+ 391+ 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 11+ 391+ 13+ , srcInfoPoints = []+ }+ "xs")))+ , PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 15 391 21+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 391 15 391 16+ , SrcSpan+ "tests/examples/DerivingVia.hs" 391 20 391 21+ ]+ }+ (PInfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 16 391 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 16+ 391+ 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 16+ 391+ 17+ , srcInfoPoints = []+ }+ "y"))+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 17+ 391+ 18+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 17+ 391+ 18+ , srcInfoPoints = []+ }))+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 18+ 391+ 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 18+ 391+ 20+ , srcInfoPoints = []+ }+ "ys")))+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 391 22 391 40+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 391 22 391 23+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 24 391 40+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 24 391 29+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 24+ 391+ 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 24+ 391+ 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 24+ 391+ 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 24+ 391+ 25+ , srcInfoPoints = []+ }+ "f")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 26+ 391+ 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 26+ 391+ 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 26+ 391+ 27+ , srcInfoPoints = []+ }+ "x"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 28+ 391+ 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 28+ 391+ 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 28+ 391+ 29+ , srcInfoPoints = []+ }+ "y"))))+ (QConOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 30 391 31+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 30+ 391+ 31+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 30+ 391+ 31+ , srcInfoPoints = []+ })))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 391 32 391 40+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 32+ 391+ 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 32+ 391+ 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 32+ 391+ 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 32+ 391+ 34+ , srcInfoPoints = []+ }+ "go")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 35+ 391+ 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 35+ 391+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 35+ 391+ 37+ , srcInfoPoints = []+ }+ "xs"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 38+ 391+ 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 38+ 391+ 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 391+ 38+ 391+ 40+ , srcInfoPoints = []+ }+ "ys"))))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 392 5 392 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 392 5 392 7+ , srcInfoPoints = []+ }+ "go")+ [ PList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 392 8 392 10+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 392 8 392 9+ , SrcSpan+ "tests/examples/DerivingVia.hs" 392 9 392 10+ ]+ }+ []+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 392 11 392 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 392 11 392 13+ , srcInfoPoints = []+ }+ "ys")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 392 14 392 18+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 392 14 392 15+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 392 16 392 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 392 16 392 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 392+ 16+ 392+ 18+ , srcInfoPoints = []+ }+ "ys"))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 393 5 393 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 393 5 393 7+ , srcInfoPoints = []+ }+ "go")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 393 8 393 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 393 8 393 10+ , srcInfoPoints = []+ }+ "xs")+ , PList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 393 11 393 13+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 393 11 393 12+ , SrcSpan+ "tests/examples/DerivingVia.hs" 393 12 393 13+ ]+ }+ []+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 393 14 393 18+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DerivingVia.hs" 393 14 393 15+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 393 16 393 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 393 16 393 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 393+ 16+ 393+ 18+ , srcInfoPoints = []+ }+ "xs"))))+ Nothing+ ]+ ]))+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 395 1 401 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 395 1 395 9+ , SrcSpan "tests/examples/DerivingVia.hs" 395 25 395 30+ , SrcSpan "tests/examples/DerivingVia.hs" 396 3 396 3+ , SrcSpan "tests/examples/DerivingVia.hs" 397 3 397 3+ , SrcSpan "tests/examples/DerivingVia.hs" 398 3 398 3+ , SrcSpan "tests/examples/DerivingVia.hs" 399 3 399 3+ , SrcSpan "tests/examples/DerivingVia.hs" 401 1 401 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 10 395 24+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 10 395 24+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 10 395 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 10 395 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 10 395 18+ , srcInfoPoints = []+ }+ "Additive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 19 395 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 19 395 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 395 19 395 24+ , srcInfoPoints = []+ }+ "Maybe")))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 396 3 396 17+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 396 3 396 17+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 396 3 396 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 396 3 396 7+ , srcInfoPoints = []+ }+ "zero"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 396 8 396 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 396 8 396 9 ]+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 396 10 396 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 396 10 396 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 396 10 396 17+ , srcInfoPoints = []+ }+ "Nothing"))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 3 399 27+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 3 399 27+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 3 397 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 397 3 397 9+ , srcInfoPoints = []+ }+ "liftU2")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 10 397 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 10 397 11+ , srcInfoPoints = []+ }+ "f")+ , PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 12 397 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 397 12 397 13+ , SrcSpan "tests/examples/DerivingVia.hs" 397 19 397 20+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 13 397 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 13 397 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 13 397 17+ , srcInfoPoints = []+ }+ "Just"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 18 397 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 18 397 19+ , srcInfoPoints = []+ }+ "a")+ ])+ , PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 21 397 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 397 21 397 22+ , SrcSpan "tests/examples/DerivingVia.hs" 397 28 397 29+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 22 397 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 22 397 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 22 397 26+ , srcInfoPoints = []+ }+ "Just"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 27 397 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 27 397 28+ , srcInfoPoints = []+ }+ "b")+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 30 397 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 397 30 397 31 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 32 397 44+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 32 397 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 32 397 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 32 397 36+ , srcInfoPoints = []+ }+ "Just")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 37 397 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 397 37 397 38+ , SrcSpan "tests/examples/DerivingVia.hs" 397 43 397 44+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 38 397 43+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 38 397 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 397 38 397 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 397 38 397 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 397+ 38+ 397+ 39+ , srcInfoPoints = []+ }+ "f")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 397 40 397 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 397 40 397 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 397+ 40+ 397+ 41+ , srcInfoPoints = []+ }+ "a"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 397 42 397 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 397 42 397 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 397 42 397 43+ , srcInfoPoints = []+ }+ "b")))))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 3 398 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 398 3 398 9+ , srcInfoPoints = []+ }+ "liftU2")+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 10 398 11+ , srcInfoPoints = []+ }+ , PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 12 398 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 12 398 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 12 398 19+ , srcInfoPoints = []+ }+ "Nothing"))+ []+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 20 398 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 20 398 22+ , srcInfoPoints = []+ }+ "ys")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 23 398 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 398 23 398 24 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 25 398 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 25 398 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 398 25 398 27+ , srcInfoPoints = []+ }+ "ys"))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 3 399 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 399 3 399 9+ , srcInfoPoints = []+ }+ "liftU2")+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 10 399 11+ , srcInfoPoints = []+ }+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 12 399 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 12 399 14+ , srcInfoPoints = []+ }+ "xs")+ , PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 15 399 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 15 399 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 15 399 22+ , srcInfoPoints = []+ }+ "Nothing"))+ []+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 23 399 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 399 23 399 24 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 25 399 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 25 399 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 399 25 399 27+ , srcInfoPoints = []+ }+ "xs"))))+ Nothing+ ])+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 401 1 405 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 401 1 401 9+ , SrcSpan "tests/examples/DerivingVia.hs" 401 56 401 61+ , SrcSpan "tests/examples/DerivingVia.hs" 402 3 402 3+ , SrcSpan "tests/examples/DerivingVia.hs" 403 3 403 3+ , SrcSpan "tests/examples/DerivingVia.hs" 405 1 405 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 10 401 55+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 10 401 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 401 24 401 26 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 10 401 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 401 24 401 26 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 10 401 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 401 24 401 26 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 10 401 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 401 24 401 26 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 10 401 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 10 401 21+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 22 401 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 22 401 23+ , srcInfoPoints = []+ }+ "f"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 27 401 55+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 27 401 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 27 401 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 27 401 35+ , srcInfoPoints = []+ }+ "Additive")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 36 401 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 401 36 401 37+ , SrcSpan "tests/examples/DerivingVia.hs" 401 54 401 55+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 37 401 54+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 37 401 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 37 401 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 37 401 52+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 53 401 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 401 53 401 54+ , srcInfoPoints = []+ }+ "f"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 3 402 18+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 3 402 18+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 402 3 402 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 402 3 402 7+ , srcInfoPoints = []+ }+ "zero"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 10 402 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 402 10 402 11 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 12 402 18+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 12 402 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 12 402 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 12 402 16+ , srcInfoPoints = []+ }+ "pure")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 17 402 18+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 402 17 402 18+ , srcInfoPoints = []+ }+ 0+ "0"))))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 403 3 403 18+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 403 3 403 18+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 403 3 403 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 403 3 403 9+ , srcInfoPoints = []+ }+ "liftU2"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 403 10 403 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 403 10 403 11 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 403 12 403 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 403 12 403 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 403 12 403 18+ , srcInfoPoints = []+ }+ "liftA2"))))+ Nothing)+ ])+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 1 405 67+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 1 405 9+ , SrcSpan "tests/examples/DerivingVia.hs" 405 41 405 49+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 10 405 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 14 405 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 14 405 15+ , SrcSpan "tests/examples/DerivingVia.hs" 405 39 405 40+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 15 405 39+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 15 405 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 15 405 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 15 405 30+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 31 405 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 31 405 32+ , SrcSpan "tests/examples/DerivingVia.hs" 405 38 405 39+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 32 405 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 32 405 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 32 405 33+ , SrcSpan "tests/examples/DerivingVia.hs" 405 33 405 35+ , SrcSpan "tests/examples/DerivingVia.hs" 405 35 405 36+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 32 405 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 32 405 33+ , SrcSpan "tests/examples/DerivingVia.hs" 405 33 405 35+ , SrcSpan "tests/examples/DerivingVia.hs" 405 35 405 36+ ]+ }+ (FunCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 32 405 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 32 405 33+ , SrcSpan "tests/examples/DerivingVia.hs" 405 33 405 35+ , SrcSpan "tests/examples/DerivingVia.hs" 405 35 405 36+ ]+ })))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 37 405 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 37 405 38+ , srcInfoPoints = []+ }+ "a"))))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 50 405 67+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 50 405 67+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 50 405 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 50 405 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 50 405 58+ , srcInfoPoints = []+ }+ "Additive")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 59 405 67+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 59 405 60+ , SrcSpan "tests/examples/DerivingVia.hs" 405 66 405 67+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 60 405 66+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 60 405 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 60 405 61+ , SrcSpan "tests/examples/DerivingVia.hs" 405 61 405 63+ , SrcSpan "tests/examples/DerivingVia.hs" 405 63 405 64+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 60 405 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 60 405 61+ , SrcSpan "tests/examples/DerivingVia.hs" 405 61 405 63+ , SrcSpan "tests/examples/DerivingVia.hs" 405 63 405 64+ ]+ }+ (FunCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 60 405 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 405 60 405 61+ , SrcSpan "tests/examples/DerivingVia.hs" 405 61 405 63+ , SrcSpan "tests/examples/DerivingVia.hs" 405 63 405 64+ ]+ })))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 65 405 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 405 65 405 66+ , srcInfoPoints = []+ }+ "a"))))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 1 406 66+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 406 1 406 9+ , SrcSpan "tests/examples/DerivingVia.hs" 406 41 406 49+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 10 406 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 14 406 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 406 14 406 15+ , SrcSpan "tests/examples/DerivingVia.hs" 406 38 406 39+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 15 406 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 15 406 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 15 406 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 15 406 30+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 31 406 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 31 406 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 31 406 38+ , srcInfoPoints = []+ }+ "Complex")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 50 406 66+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 50 406 66+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 50 406 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 50 406 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 50 406 58+ , srcInfoPoints = []+ }+ "Additive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 59 406 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 59 406 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 406 59 406 66+ , srcInfoPoints = []+ }+ "Complex")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 1 407 67+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 407 1 407 9+ , SrcSpan "tests/examples/DerivingVia.hs" 407 41 407 49+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 10 407 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 14 407 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 407 14 407 15+ , SrcSpan "tests/examples/DerivingVia.hs" 407 39 407 40+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 15 407 39+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 15 407 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 15 407 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 15 407 30+ , srcInfoPoints = []+ }+ "WrapApplicative")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 31 407 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 31 407 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 31 407 39+ , srcInfoPoints = []+ }+ "Identity")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 50 407 67+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 50 407 67+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 50 407 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 50 407 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 50 407 58+ , srcInfoPoints = []+ }+ "Additive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 59 407 67+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 59 407 67+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 407 59 407 67+ , srcInfoPoints = []+ }+ "Identity")))))+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 409 1 413 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 409 1 409 9+ , SrcSpan "tests/examples/DerivingVia.hs" 409 27 409 32+ , SrcSpan "tests/examples/DerivingVia.hs" 410 3 410 3+ , SrcSpan "tests/examples/DerivingVia.hs" 411 3 411 3+ , SrcSpan "tests/examples/DerivingVia.hs" 413 1 413 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 10 409 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 10 409 26+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 10 409 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 10 409 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 10 409 18+ , srcInfoPoints = []+ }+ "Additive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 19 409 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 19 409 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 409 19 409 26+ , srcInfoPoints = []+ }+ "ZipList")))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 3 410 20+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 3 410 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 410 3 410 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 410 3 410 7+ , srcInfoPoints = []+ }+ "zero"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 8 410 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 410 8 410 9 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 10 410 20+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 10 410 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 10 410 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 10 410 17+ , srcInfoPoints = []+ }+ "ZipList")))+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 410 18 410 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 410 18 410 19+ , SrcSpan "tests/examples/DerivingVia.hs" 410 19 410 20+ ]+ }+ [])))+ Nothing)+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 3 411 64+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 3 411 64+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 3 411 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 411 3 411 9+ , srcInfoPoints = []+ }+ "liftU2")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 10 411 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 10 411 11+ , srcInfoPoints = []+ }+ "f")+ , PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 12 411 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 411 12 411 13+ , SrcSpan "tests/examples/DerivingVia.hs" 411 23 411 24+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 13 411 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 13 411 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 13 411 20+ , srcInfoPoints = []+ }+ "ZipList"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 21 411 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 21 411 23+ , srcInfoPoints = []+ }+ "xs")+ ])+ , PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 25 411 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 411 25 411 26+ , SrcSpan "tests/examples/DerivingVia.hs" 411 36 411 37+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 26 411 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 26 411 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 26 411 33+ , srcInfoPoints = []+ }+ "ZipList"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 34 411 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 34 411 36+ , srcInfoPoints = []+ }+ "ys")+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 38 411 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 411 38 411 39 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 40 411 64+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 40 411 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 40 411 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 40 411 47+ , srcInfoPoints = []+ }+ "ZipList")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 48 411 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 411 48 411 49+ , SrcSpan "tests/examples/DerivingVia.hs" 411 63 411 64+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 49 411 63+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 49 411 60+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 411 49 411 57+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 411 49 411 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 411+ 49+ 411+ 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 411+ 49+ 411+ 55+ , srcInfoPoints = []+ }+ "liftU2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 411 56 411 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 411+ 56+ 411+ 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 411+ 56+ 411+ 57+ , srcInfoPoints = []+ }+ "f"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 411 58 411 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 411 58 411 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs"+ 411+ 58+ 411+ 60+ , srcInfoPoints = []+ }+ "xs"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 411 61 411 63+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 411 61 411 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 411 61 411 63+ , srcInfoPoints = []+ }+ "ys")))))))+ Nothing+ ])+ ])+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 1 419 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 413 1 413 6+ , SrcSpan "tests/examples/DerivingVia.hs" 413 37 413 42+ , SrcSpan "tests/examples/DerivingVia.hs" 414 3 414 3+ , SrcSpan "tests/examples/DerivingVia.hs" 416 3 416 3+ , SrcSpan "tests/examples/DerivingVia.hs" 417 3 417 3+ , SrcSpan "tests/examples/DerivingVia.hs" 418 3 418 3+ , SrcSpan "tests/examples/DerivingVia.hs" 419 3 419 3+ , SrcSpan "tests/examples/DerivingVia.hs" 425 1 425 0+ ]+ }+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 7 413 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 413 25 413 27 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 7 413 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 413 25 413 27 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 7 413 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 413 25 413 27 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 7 413 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 413 25 413 27 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 7 413 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 7 413 15+ , srcInfoPoints = []+ }+ "Additive")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 16 413 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 413 16 413 17+ , SrcSpan "tests/examples/DerivingVia.hs" 413 23 413 24+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 17 413 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 17 413 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 17 413 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 17 413 21+ , srcInfoPoints = []+ }+ "Diff")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 22 413 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 22 413 23+ , srcInfoPoints = []+ }+ "p"))))))))+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 28 413 36+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 28 413 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 28 413 34+ , srcInfoPoints = []+ }+ "Affine"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 35 413 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 413 35 413 36+ , srcInfoPoints = []+ }+ "p")))+ []+ (Just+ [ ClsTyFam+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 3 414 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 414 3 414 7 ]+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 8 414 14+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 8 414 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 8 414 12+ , srcInfoPoints = []+ }+ "Diff"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 13 414 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 13 414 14+ , srcInfoPoints = []+ }+ "p")))+ (Just+ (KindSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 15 414 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 414 15 414 17 ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 18 414 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 414 23 414 25 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 18 414 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 18 414 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 18 414 22+ , srcInfoPoints = []+ }+ "Type")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 26 414 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 26 414 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 414 26 414 30+ , srcInfoPoints = []+ }+ "Type"))))))+ Nothing+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 3 416 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 9 416 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 3 416 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 9 416 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 416 3 416 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 3 416 4+ , SrcSpan "tests/examples/DerivingVia.hs" 416 4 416 7+ , SrcSpan "tests/examples/DerivingVia.hs" 416 7 416 8+ ]+ }+ ".-."+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 12 416 43+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 12 416 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 18 416 20 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 12 416 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 18 416 20 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 12 416 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 18 416 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 12 416 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 18 416 20+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 12 416 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 416 12 416 15+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 16 416 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 16 416 17+ , srcInfoPoints = []+ }+ "a"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 21 416 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 25 416 27 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 21 416 24+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 21 416 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 21 416 22+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 23 416 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 23 416 24+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 28 416 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 416 32 416 34 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 28 416 31+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 28 416 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 28 416 29+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 30 416 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 30 416 31+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 35 416 43+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 35 416 41+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 35 416 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 35 416 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 416 35 416 39+ , srcInfoPoints = []+ }+ "Diff")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 40 416 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 40 416 41+ , srcInfoPoints = []+ }+ "p")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 42 416 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 416 42 416 43+ , srcInfoPoints = []+ }+ "a")))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 3 417 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 9 417 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 3 417 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 9 417 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 417 3 417 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 3 417 4+ , SrcSpan "tests/examples/DerivingVia.hs" 417 4 417 7+ , SrcSpan "tests/examples/DerivingVia.hs" 417 7 417 8+ ]+ }+ ".+^"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 12 417 43+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 12 417 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 18 417 20 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 12 417 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 18 417 20 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 12 417 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 18 417 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 12 417 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 18 417 20+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 12 417 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 417 12 417 15+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 16 417 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 16 417 17+ , srcInfoPoints = []+ }+ "a"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 21 417 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 25 417 27 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 21 417 24+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 21 417 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 21 417 22+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 23 417 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 23 417 24+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 28 417 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 417 37 417 39 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 28 417 36+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 28 417 34+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 28 417 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 28 417 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 417 28 417 32+ , srcInfoPoints = []+ }+ "Diff")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 33 417 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 33 417 34+ , srcInfoPoints = []+ }+ "p")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 35 417 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 35 417 36+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 40 417 43+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 40 417 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 40 417 41+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 42 417 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 417 42 417 43+ , srcInfoPoints = []+ }+ "a")))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 3 418 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 9 418 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 3 418 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 9 418 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 418 3 418 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 3 418 4+ , SrcSpan "tests/examples/DerivingVia.hs" 418 4 418 7+ , SrcSpan "tests/examples/DerivingVia.hs" 418 7 418 8+ ]+ }+ ".-^"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 12 418 43+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 12 418 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 18 418 20 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 12 418 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 18 418 20 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 12 418 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 18 418 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 12 418 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 18 418 20+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 12 418 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 418 12 418 15+ , srcInfoPoints = []+ }+ "Num")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 16 418 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 16 418 17+ , srcInfoPoints = []+ }+ "a"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 21 418 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 25 418 27 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 21 418 24+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 21 418 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 21 418 22+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 23 418 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 23 418 24+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 28 418 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 418 37 418 39 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 28 418 36+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 28 418 34+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 28 418 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 28 418 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 418 28 418 32+ , srcInfoPoints = []+ }+ "Diff")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 33 418 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 33 418 34+ , srcInfoPoints = []+ }+ "p")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 35 418 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 35 418 36+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 40 418 43+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 40 418 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 40 418 41+ , srcInfoPoints = []+ }+ "p"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 42 418 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 418 42 418 43+ , srcInfoPoints = []+ }+ "a")))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 3 419 32+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 3 419 32+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 3 419 32+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 419 3 419 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 419 3 419 4+ , srcInfoPoints = []+ }+ "p"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 419 5 419 8+ , srcInfoPoints = []+ }+ ".-^")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 9 419 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 9 419 10+ , srcInfoPoints = []+ }+ "v")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 11 419 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 419 11 419 12 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 13 419 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 13 419 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 13 419 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 13 419 14+ , srcInfoPoints = []+ }+ "p")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 15 419 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 15 419 18+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 15 419 18+ , srcInfoPoints = []+ }+ ".+^")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 19 419 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 19 419 30+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 19 419 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 419 19 419 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 419 19 419 23+ , srcInfoPoints = []+ }+ "fmap")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 24 419 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 419 24 419 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 419 24 419 30+ , srcInfoPoints = []+ }+ "negate"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 31 419 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 419 31 419 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 419 31 419 32+ , srcInfoPoints = []+ }+ "v"))))))+ Nothing+ ])+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 1 425 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 425 26 425 27 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 425 1 425 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 9 425 25+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 9 425 23+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 9 425 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 9 425 21+ , srcInfoPoints = []+ }+ "WrapAdditive"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 22 425 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 22 425 23+ , srcInfoPoints = []+ }+ "f")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 24 425 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 24 425 25+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 28 425 49+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 28 425 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 28 425 43+ , srcInfoPoints = []+ }+ "WrappedAdditive")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 44 425 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 425 44 425 45+ , SrcSpan "tests/examples/DerivingVia.hs" 425 48 425 49+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 45 425 48+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 45 425 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 45 425 46+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 47 425 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 425 47 425 48+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ []+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 427 1 435 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 427 1 427 9+ , SrcSpan "tests/examples/DerivingVia.hs" 427 48 427 53+ , SrcSpan "tests/examples/DerivingVia.hs" 428 3 428 3+ , SrcSpan "tests/examples/DerivingVia.hs" 430 3 430 3+ , SrcSpan "tests/examples/DerivingVia.hs" 431 3 431 3+ , SrcSpan "tests/examples/DerivingVia.hs" 432 3 432 3+ , SrcSpan "tests/examples/DerivingVia.hs" 435 1 435 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 10 427 47+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 10 427 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 427 21 427 23 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 10 427 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 427 21 427 23 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 10 427 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 427 21 427 23 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 10 427 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 427 21 427 23 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 10 427 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 10 427 18+ , srcInfoPoints = []+ }+ "Additive")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 19 427 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 19 427 20+ , srcInfoPoints = []+ }+ "f"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 24 427 47+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 24 427 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 24 427 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 24 427 30+ , srcInfoPoints = []+ }+ "Affine")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 31 427 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 427 31 427 32+ , SrcSpan "tests/examples/DerivingVia.hs" 427 46 427 47+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 32 427 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 32 427 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 32 427 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 32 427 44+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 45 427 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 427 45 427 46+ , srcInfoPoints = []+ }+ "f"))))))+ (Just+ [ InsType+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 3 428 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 428 3 428 7+ , SrcSpan "tests/examples/DerivingVia.hs" 428 30 428 31+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 8 428 29+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 8 428 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 8 428 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 8 428 12+ , srcInfoPoints = []+ }+ "Diff")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 13 428 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 428 13 428 14+ , SrcSpan "tests/examples/DerivingVia.hs" 428 28 428 29+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 14 428 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 14 428 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 14 428 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 14 428 26+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 27 428 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 27 428 28+ , srcInfoPoints = []+ }+ "f")))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 32 428 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 428 32 428 33+ , srcInfoPoints = []+ }+ "f"))+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 3 430 52+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 3 430 52+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 3 430 52+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 3 430 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 3 430 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 3 430 18+ , srcInfoPoints = []+ }+ "WrappedAdditive"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 19 430 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 19 430 20+ , srcInfoPoints = []+ }+ "a")+ ])+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 21 430 24+ , srcInfoPoints = []+ }+ ".-.")+ [ PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 25 430 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 25 430 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 25 430 40+ , srcInfoPoints = []+ }+ "WrappedAdditive"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 41 430 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 41 430 42+ , srcInfoPoints = []+ }+ "b")+ ]+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 43 430 52+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 430 43 430 44 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 45 430 52+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 45 430 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 45 430 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 45 430 46+ , srcInfoPoints = []+ }+ "a")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 47 430 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 47 430 50+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 47 430 50+ , srcInfoPoints = []+ }+ "^-^")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 51 430 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 51 430 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 430 51 430 52+ , srcInfoPoints = []+ }+ "b")))))+ Nothing+ ])+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 3 431 54+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 3 431 54+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 3 431 54+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 3 431 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 3 431 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 3 431 18+ , srcInfoPoints = []+ }+ "WrappedAdditive"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 19 431 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 19 431 20+ , srcInfoPoints = []+ }+ "a")+ ])+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 21 431 24+ , srcInfoPoints = []+ }+ ".+^")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 25 431 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 25 431 26+ , srcInfoPoints = []+ }+ "b")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 27 431 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 431 27 431 28 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 29 431 54+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 29 431 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 29 431 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 29 431 44+ , srcInfoPoints = []+ }+ "WrappedAdditive")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 45 431 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 431 45 431 46+ , SrcSpan "tests/examples/DerivingVia.hs" 431 53 431 54+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 46 431 53+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 46 431 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 431 46 431 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 431 46 431 47+ , srcInfoPoints = []+ }+ "a")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 48 431 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 431 48 431 51+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 431 48 431 51+ , srcInfoPoints = []+ }+ "^+^")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 431 52 431 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 431 52 431 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 431 52 431 53+ , srcInfoPoints = []+ }+ "b")))))))+ Nothing+ ])+ , InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 3 432 54+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 3 432 54+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 3 432 54+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 3 432 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 3 432 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 3 432 18+ , srcInfoPoints = []+ }+ "WrappedAdditive"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 19 432 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 19 432 20+ , srcInfoPoints = []+ }+ "a")+ ])+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 21 432 24+ , srcInfoPoints = []+ }+ ".-^")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 25 432 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 25 432 26+ , srcInfoPoints = []+ }+ "b")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 27 432 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 432 27 432 28 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 29 432 54+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 29 432 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 29 432 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 29 432 44+ , srcInfoPoints = []+ }+ "WrappedAdditive")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 45 432 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 432 45 432 46+ , SrcSpan "tests/examples/DerivingVia.hs" 432 53 432 54+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 46 432 53+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 46 432 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 432 46 432 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 432 46 432 47+ , srcInfoPoints = []+ }+ "a")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 48 432 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 432 48 432 51+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 432 48 432 51+ , srcInfoPoints = []+ }+ "^-^")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 432 52 432 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 432 52 432 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia.hs" 432 52 432 53+ , srcInfoPoints = []+ }+ "b")))))))+ Nothing+ ])+ ])+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 1 435 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 1 435 9+ , SrcSpan "tests/examples/DerivingVia.hs" 435 38 435 46+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 10 435 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 14 435 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 14 435 15+ , SrcSpan "tests/examples/DerivingVia.hs" 435 36 435 37+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 15 435 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 15 435 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 15 435 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 15 435 27+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 28 435 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 28 435 29+ , SrcSpan "tests/examples/DerivingVia.hs" 435 35 435 36+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 29 435 35+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 29 435 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 29 435 30+ , SrcSpan "tests/examples/DerivingVia.hs" 435 30 435 32+ , SrcSpan "tests/examples/DerivingVia.hs" 435 32 435 33+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 29 435 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 29 435 30+ , SrcSpan "tests/examples/DerivingVia.hs" 435 30 435 32+ , SrcSpan "tests/examples/DerivingVia.hs" 435 32 435 33+ ]+ }+ (FunCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 29 435 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 29 435 30+ , SrcSpan "tests/examples/DerivingVia.hs" 435 30 435 32+ , SrcSpan "tests/examples/DerivingVia.hs" 435 32 435 33+ ]+ })))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 34 435 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 34 435 35+ , srcInfoPoints = []+ }+ "a"))))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 47 435 62+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 47 435 62+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 47 435 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 47 435 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 47 435 53+ , srcInfoPoints = []+ }+ "Affine")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 54 435 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 54 435 55+ , SrcSpan "tests/examples/DerivingVia.hs" 435 61 435 62+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 55 435 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 55 435 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 55 435 56+ , SrcSpan "tests/examples/DerivingVia.hs" 435 56 435 58+ , SrcSpan "tests/examples/DerivingVia.hs" 435 58 435 59+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 55 435 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 55 435 56+ , SrcSpan "tests/examples/DerivingVia.hs" 435 56 435 58+ , SrcSpan "tests/examples/DerivingVia.hs" 435 58 435 59+ ]+ }+ (FunCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 55 435 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 435 55 435 56+ , SrcSpan "tests/examples/DerivingVia.hs" 435 56 435 58+ , SrcSpan "tests/examples/DerivingVia.hs" 435 58 435 59+ ]+ })))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 60 435 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 435 60 435 61+ , srcInfoPoints = []+ }+ "a"))))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 1 437 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 1 437 9+ , SrcSpan "tests/examples/DerivingVia.hs" 437 38 437 46+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 10 437 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 14 437 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 14 437 15+ , SrcSpan "tests/examples/DerivingVia.hs" 437 30 437 31+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 15 437 30+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 15 437 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 15 437 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 15 437 27+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 28 437 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 28 437 29+ , SrcSpan "tests/examples/DerivingVia.hs" 437 29 437 30+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 28 437 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 28 437 29+ , SrcSpan "tests/examples/DerivingVia.hs" 437 29 437 30+ ]+ }+ (ListCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 28 437 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 28 437 29+ , SrcSpan "tests/examples/DerivingVia.hs" 437 29 437 30+ ]+ })))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 47 437 56+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 47 437 56+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 47 437 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 47 437 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 47 437 53+ , srcInfoPoints = []+ }+ "Affine")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 54 437 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 54 437 55+ , SrcSpan "tests/examples/DerivingVia.hs" 437 55 437 56+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 54 437 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 54 437 55+ , SrcSpan "tests/examples/DerivingVia.hs" 437 55 437 56+ ]+ }+ (ListCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 437 54 437 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 437 54 437 55+ , SrcSpan "tests/examples/DerivingVia.hs" 437 55 437 56+ ]+ })))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 1 439 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 439 1 439 9+ , SrcSpan "tests/examples/DerivingVia.hs" 439 38 439 46+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 10 439 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 14 439 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 439 14 439 15+ , SrcSpan "tests/examples/DerivingVia.hs" 439 35 439 36+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 15 439 35+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 15 439 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 15 439 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 15 439 27+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 28 439 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 28 439 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 28 439 35+ , srcInfoPoints = []+ }+ "Complex")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 47 439 61+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 47 439 61+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 47 439 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 47 439 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 47 439 53+ , srcInfoPoints = []+ }+ "Affine")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 54 439 61+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 54 439 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 439 54 439 61+ , srcInfoPoints = []+ }+ "Complex")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 1 441 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 441 1 441 9+ , SrcSpan "tests/examples/DerivingVia.hs" 441 38 441 46+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 10 441 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 14 441 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 441 14 441 15+ , SrcSpan "tests/examples/DerivingVia.hs" 441 33 441 34+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 15 441 33+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 15 441 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 15 441 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 15 441 27+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 28 441 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 28 441 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 28 441 33+ , srcInfoPoints = []+ }+ "Maybe")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 47 441 59+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 47 441 59+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 47 441 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 47 441 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 47 441 53+ , srcInfoPoints = []+ }+ "Affine")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 54 441 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 54 441 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 441 54 441 59+ , srcInfoPoints = []+ }+ "Maybe")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 1 443 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 443 1 443 9+ , SrcSpan "tests/examples/DerivingVia.hs" 443 38 443 46+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 10 443 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 14 443 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 443 14 443 15+ , SrcSpan "tests/examples/DerivingVia.hs" 443 35 443 36+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 15 443 35+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 15 443 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 15 443 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 15 443 27+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 28 443 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 28 443 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 28 443 35+ , srcInfoPoints = []+ }+ "ZipList")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 47 443 61+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 47 443 61+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 47 443 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 47 443 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 47 443 53+ , srcInfoPoints = []+ }+ "Affine")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 54 443 61+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 54 443 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 443 54 443 61+ , srcInfoPoints = []+ }+ "ZipList")))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 1 445 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 445 1 445 9+ , SrcSpan "tests/examples/DerivingVia.hs" 445 38 445 46+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 10 445 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 14 445 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 445 14 445 15+ , SrcSpan "tests/examples/DerivingVia.hs" 445 36 445 37+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 15 445 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 15 445 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 15 445 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 15 445 27+ , srcInfoPoints = []+ }+ "WrapAdditive")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 28 445 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 28 445 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 28 445 36+ , srcInfoPoints = []+ }+ "Identity")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 47 445 62+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 47 445 62+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 47 445 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 47 445 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 47 445 53+ , srcInfoPoints = []+ }+ "Affine")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 54 445 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 54 445 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 445 54 445 62+ , srcInfoPoints = []+ }+ "Identity")))))+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 1 452 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 451 1 451 6+ , SrcSpan "tests/examples/DerivingVia.hs" 451 16 451 21+ , SrcSpan "tests/examples/DerivingVia.hs" 452 3 452 3+ , SrcSpan "tests/examples/DerivingVia.hs" 454 1 454 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 7 451 15+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 7 451 13+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 7 451 11+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 451 7 451 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 451 7 451 9+ , srcInfoPoints = []+ }+ "C2"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 10 451 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 10 451 11+ , srcInfoPoints = []+ }+ "a")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 12 451 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 12 451 13+ , srcInfoPoints = []+ }+ "b")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 14 451 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 451 14 451 15+ , srcInfoPoints = []+ }+ "c")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 3 452 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 452 6 452 8 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 3 452 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 452 6 452 8 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 452 3 452 5+ , srcInfoPoints = []+ }+ "c2"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 9 452 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 452 11 452 13 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 9 452 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 9 452 10+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 14 452 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 452 16 452 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 14 452 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 14 452 15+ , srcInfoPoints = []+ }+ "b"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 19 452 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 452 19 452 20+ , srcInfoPoints = []+ }+ "c")))))+ ])+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 454 1 457 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 454 1 454 9+ , SrcSpan "tests/examples/DerivingVia.hs" 454 29 454 34+ , SrcSpan "tests/examples/DerivingVia.hs" 455 3 455 3+ , SrcSpan "tests/examples/DerivingVia.hs" 457 1 457 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 10 454 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 10 454 28+ , srcInfoPoints = []+ }+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 10 454 16+ , srcInfoPoints = []+ }+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 10 454 14+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 10 454 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 10 454 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 10 454 12+ , srcInfoPoints = []+ }+ "C2")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 13 454 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 13 454 14+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 15 454 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 15 454 16+ , srcInfoPoints = []+ }+ "b")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 17 454 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 454 17 454 18+ , SrcSpan "tests/examples/DerivingVia.hs" 454 27 454 28+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 18 454 27+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 18 454 25+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 18 454 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 18 454 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 18 454 23+ , srcInfoPoints = []+ }+ "Const")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 24 454 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 24 454 25+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 26 454 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 454 26 454 27+ , srcInfoPoints = []+ }+ "b"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 3 455 19+ , srcInfoPoints = []+ }+ (FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 3 455 19+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 3 455 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 455 3 455 5+ , srcInfoPoints = []+ }+ "c2")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 455 6 455 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 455 6 455 7+ , srcInfoPoints = []+ }+ "x")+ , PWildCard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 455 8 455 9+ , srcInfoPoints = []+ }+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 10 455 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 455 10 455 11 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 12 455 19+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 12 455 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 12 455 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 12 455 17+ , srcInfoPoints = []+ }+ "Const")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 18 455 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 18 455 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 455 18 455 19+ , srcInfoPoints = []+ }+ "x")))))+ Nothing+ ])+ ])+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 1 458 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 457 18 457 19 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia.hs" 457 1 457 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 9 457 17+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 9 457 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 9 457 15+ , srcInfoPoints = []+ }+ "Fweemp"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 16 457 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 16 457 17+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 20 457 28+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 20 457 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 20 457 26+ , srcInfoPoints = []+ }+ "Fweemp")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 27 457 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 457 27 457 28+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 3 458 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 458 3 458 11 ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 8 459 11+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 12 459 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 459 12 459 13+ , SrcSpan "tests/examples/DerivingVia.hs" 459 32 459 33+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 13 459 32+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 13 459 20+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 13 459 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 13 459 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 13 459 18+ , srcInfoPoints = []+ }+ "Const")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 19 459 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 19 459 20+ , srcInfoPoints = []+ }+ "a")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 21 459 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 459 21 459 22+ , SrcSpan "tests/examples/DerivingVia.hs" 459 24 459 26+ , SrcSpan "tests/examples/DerivingVia.hs" 459 31 459 32+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 22 459 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 22 459 23+ , srcInfoPoints = []+ }+ "b"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 27 459 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 27 459 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 459 27 459 31+ , srcInfoPoints = []+ }+ "Type"))))))))+ [ IParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 12 458 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia.hs" 458 12 458 13+ , SrcSpan "tests/examples/DerivingVia.hs" 458 19 458 20+ ]+ }+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 13 458 19+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 13 458 19+ , srcInfoPoints = []+ }+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 13 458 17+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 13 458 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 13 458 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 13 458 15+ , srcInfoPoints = []+ }+ "C2")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 16 458 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 16 458 17+ , srcInfoPoints = []+ }+ "a")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 18 458 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia.hs" 458 18 458 19+ , srcInfoPoints = []+ }+ "b"))))+ ]+ ]+ ]+ , [ Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 38 1 38 6) "---"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 39 1 39 18)+ " Simple example"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 40 1 40 6) "---"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 46 1 46 6) "---"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 47 1 47 25)+ " Eta reduction at work"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 48 1 48 6) "---"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 62 1 62 6) "---"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 63 1 63 22)+ " Monad transformers"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 64 1 64 6) "---"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 68 1 68 22)+ " From `constraints'"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 78 1 78 52)+ " With `-XQuantifiedConstraints' this just becomes"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 79 1 79 3) ""+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 80 1 80 68)+ " type Lifting cls trans = forall mm. cls mm => cls (trans mm)"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 81 1 81 3) ""+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 82 1 82 52)+ " type LiftingMonad trans = Lifting Monad trans"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 83 1 83 3) ""+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 142 1 142 6) "---"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 143 1 143 32)+ " Using tuples in a `via` type"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 144 1 144 6) "---"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 153 1 153 6) "---"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 154 1 154 23)+ " Abstract data types"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 155 1 155 6) "---"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 167 1 167 5) "--"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 168 1 168 18)+ " Testing parser"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 169 1 169 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 183 1 183 5) "--"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 184 1 184 23)+ " From Baldur's notes"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 185 1 185 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 187 1 187 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 188 1 188 5) " 1"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 189 1 189 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 227 1 227 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 228 1 228 5) " 2"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 229 1 229 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 243 1 243 8) " data"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 262 1 262 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 263 1 263 5) " 3"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 264 1 264 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 290 1 290 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 291 1 291 5) " 4"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 292 1 292 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 324 1 324 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 325 1 325 5) " 5"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 326 1 326 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 340 1 340 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 341 1 341 5) " 6"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 342 1 342 5) "--"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 343 1 343 116)+ " https://github.com/mikeizbicki/subhask/blob/f53fd8f465747681c88276c7dabe3646fbdf7d50/src/SubHask/Algebra.hs#L635"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 360 1 360 19)+ "mkLattice_(Bool)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 362 1 362 19)+ "mkLattice_(Char)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 364 1 364 18)+ "mkLattice_(Int)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 366 1 366 22)+ "mkLattice_(Integer)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 368 1 368 20)+ "mkLattice_(Float)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 370 1 370 21)+ "mkLattice_(Double)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 372 1 372 23)+ "mkLattice_(Rational)"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 375 1 375 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 376 1 376 5) " 7"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 377 1 377 5) "--"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 378 1 378 81)+ " https://hackage.haskell.org/package/linear-1.20.7/docs/src/Linear-Affine.html"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 421 1 421 79)+ " #define ADDITIVEC(CTX,T) instance CTX => Affine T where type Diff T = T ; \\"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 422 1 422 85)+ " (.-.) = (^-^) ; {-# INLINE (.-.) #-} ; (.+^) = (^+^) ; {-# INLINE (.+^) #-} ; \\"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 423 1 423 42)+ " (.-^) = (^-^) ; {-# INLINE (.-^) #-}"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 424 1 424 40)+ " #define ADDITIVE(T) ADDITIVEC((), T)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 434 1 434 22)+ " ADDITIVE(((->) a))"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 436 1 436 16)+ " ADDITIVE([])"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 438 1 438 21)+ " ADDITIVE(Complex)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 440 1 440 19)+ " ADDITIVE(Maybe)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 442 1 442 21)+ " ADDITIVE(ZipList)"+ , Comment+ False+ (SrcSpan "tests/examples/DerivingVia.hs" 444 1 444 22)+ " ADDITIVE(Identity)"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 447 1 447 5) "--"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 448 1 448 5) " 8"+ , Comment+ False (SrcSpan "tests/examples/DerivingVia.hs" 449 1 449 5) "--"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,418 @@+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE TypeInType #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE UndecidableInstances #-}+module DerivingVia where+import Data.Void+import Data.Complex+import Data.Functor.Const+import Data.Functor.Identity+import Data.Ratio+import Control.Monad.Reader+import Control.Monad.State+import Control.Monad.Writer+import Control.Applicative hiding (WrappedMonad(..))+import Data.Bifunctor+import Data.Monoid+import Data.Kind++type f ~> g = forall xx . f xx -> g xx++data Foo a = MkFoo a a+ deriving Show via (Identity (Foo a))++newtype Flip p a b = Flip{runFlip :: p b a}++instance Bifunctor p => Bifunctor (Flip p) where+ bimap f g = Flip . bimap g f . runFlip++instance Bifunctor p => Functor (Flip p a) where+ fmap f = Flip . first f . runFlip++newtype Bar a = MkBar (Either a Int)+ deriving Functor via (Flip Either Int)++type MTrans = (Type -> Type) -> (Type -> Type)++data Dict c where+ Dict :: c => Dict c++newtype a :- b = Sub (a => Dict b)++infixl 1 \\++(\\) :: a => (b => r) -> (a :- b) -> r+r \\ Sub Dict = r++class LiftingMonad (trans :: MTrans) where+ proof :: Monad m :- Monad (trans m)++instance LiftingMonad (StateT s :: MTrans) where+ proof :: Monad m :- Monad (StateT s m)+ proof = Sub Dict++instance Monoid w => LiftingMonad (WriterT w :: MTrans) where+ proof :: Monad m :- Monad (WriterT w m)+ proof = Sub Dict++instance (LiftingMonad trans, LiftingMonad trans') =>+ LiftingMonad (ComposeT trans trans' :: MTrans)+ where+ proof :: forall m . Monad m :- Monad (ComposeT trans trans' m)+ proof = Sub (Dict \\ proof @trans @(trans' m) \\ proof @trans' @m)++newtype Stack :: MTrans where+ Stack ::+ ReaderT Int (StateT Bool (WriterT String m)) a -> Stack m a+ deriving newtype (Functor, Applicative, Monad, MonadReader Int,+ MonadState Bool, MonadWriter String)+ deriving (MonadTrans, MFunctor) via (ReaderT Int `ComposeT`+ StateT Bool `ComposeT` WriterT String)++class MFunctor (trans :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (trans m ~> trans m')++instance MFunctor (ReaderT r :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (ReaderT r m ~> ReaderT r m')+ hoist nat = ReaderT . fmap nat . runReaderT++instance MFunctor (StateT s :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (StateT s m ~> StateT s m')+ hoist nat = StateT . fmap nat . runStateT++instance MFunctor (WriterT w :: MTrans) where+ hoist :: Monad m => (m ~> m') -> (WriterT w m ~> WriterT w m')+ hoist nat = WriterT . nat . runWriterT++infixr 9 `ComposeT`++newtype ComposeT :: MTrans -> MTrans -> MTrans where+ ComposeT :: {getComposeT :: f (g m) a} -> ComposeT f g m a+ deriving newtype (Functor, Applicative, Monad)++instance (MonadTrans f, MonadTrans g, LiftingMonad g) =>+ MonadTrans (ComposeT f g)+ where+ lift :: forall m . Monad m => m ~> ComposeT f g m+ lift = ComposeT . lift . lift \\ proof @g @m++instance (MFunctor f, MFunctor g, LiftingMonad g) =>+ MFunctor (ComposeT f g)+ where+ hoist ::+ forall m m' . Monad m =>+ (m ~> m') -> (ComposeT f g m ~> ComposeT f g m')+ hoist f = ComposeT . hoist (hoist f) . getComposeT \\ proof @g @m++newtype X a = X (a, a)+ deriving (Semigroup, Monoid) via (Product a, Sum a)+ deriving (Show, Eq) via (a, a)++class C f where+ c :: f a -> Int++newtype X2 f a = X2 (f a)++instance C (X2 f) where+ c = const 0++deriving via (X2 IO) instance C IO++newtype P0 a = P0 a+ deriving Show via a++newtype P1 a = P1 [a]+ deriving Show via [a]++newtype P2 a = P2 (a, a)+ deriving Show via (a, a)++newtype P3 a = P3 (Maybe a)+ deriving Show via (First a)++newtype P4 a = P4 (Maybe a)+ deriving Show via (First $ a)++newtype P5 a = P5 a+ deriving Show via (Identity $ a)++newtype P6 a = P6 [a]+ deriving Show via ([] $ a)++newtype P7 a = P7 (a, a)+ deriving Show via (Identity $ (a, a))++newtype P8 a = P8 (Either () a)+ deriving Functor via (($) (Either ()))++newtype f $ a = APP (f a)+ deriving newtype Show+ deriving newtype Functor++newtype WrapApplicative f a = WrappedApplicative (f a)+ deriving (Functor, Applicative)++instance (Applicative f, Num a) => Num (WrapApplicative f a) where+ (+) = liftA2 (+)+ (*) = liftA2 (*)+ negate = fmap negate+ fromInteger = pure . fromInteger+ abs = fmap abs+ signum = fmap signum++instance (Applicative f, Fractional a) =>+ Fractional (WrapApplicative f a)+ where+ recip = fmap recip+ fromRational = pure . fromRational++instance (Applicative f, Floating a) =>+ Floating (WrapApplicative f a)+ where+ pi = pure pi+ sqrt = fmap sqrt+ exp = fmap exp+ log = fmap log+ sin = fmap sin+ cos = fmap cos+ asin = fmap asin+ atan = fmap atan+ acos = fmap acos+ sinh = fmap sinh+ cosh = fmap cosh+ asinh = fmap asinh+ atanh = fmap atanh+ acosh = fmap acosh++instance (Applicative f, Semigroup s) =>+ Semigroup (WrapApplicative f s)+ where+ (<>) = liftA2 (<>)++instance (Applicative f, Monoid m) => Monoid (WrapApplicative f m)+ where+ mempty = pure mempty++class Pointed p where+ pointed :: a -> p a++newtype WrapMonad f a = WrappedMonad (f a)+ deriving newtype (Pointed, Monad)++instance (Monad m, Pointed m) => Functor (WrapMonad m) where+ fmap = liftM++instance (Monad m, Pointed m) => Applicative (WrapMonad m) where+ pure = pointed+ (<*>) = ap++data Sorted a = Sorted a a a+ deriving (Functor, Applicative) via (WrapMonad Sorted)+ deriving (Num, Fractional, Floating, Semigroup,+ Monoid) via (WrapApplicative Sorted a)++instance Monad Sorted where+ (>>=) :: Sorted a -> (a -> Sorted b) -> Sorted b+ Sorted a b c >>= f = Sorted a' b' c'+ where Sorted a' _ _ = f a+ Sorted _ b' _ = f b+ Sorted _ _ c' = f c++instance Pointed Sorted where+ pointed :: a -> Sorted a+ pointed a = Sorted a a a++class IsZero a where+ isZero :: a -> Bool++newtype WrappedNumEq a = WrappedNumEq a++newtype WrappedShow a = WrappedShow a++newtype WrappedNumEq2 a = WrappedNumEq2 a++instance (Num a, Eq a) => IsZero (WrappedNumEq a) where+ isZero :: WrappedNumEq a -> Bool+ isZero (WrappedNumEq a) = 0 == a++instance Show a => IsZero (WrappedShow a) where+ isZero :: WrappedShow a -> Bool+ isZero (WrappedShow a) = "0" == show a++instance (Num a, Eq a) => IsZero (WrappedNumEq2 a) where+ isZero :: WrappedNumEq2 a -> Bool+ isZero (WrappedNumEq2 a) = a + a == a++newtype INT = INT Int+ deriving newtype Show+ deriving IsZero via (WrappedNumEq Int)++newtype VOID = VOID Void+ deriving IsZero via (WrappedShow Void)++class Bifunctor p => Biapplicative p where+ bipure :: a -> b -> p a b+ + biliftA2 ::+ (a -> b -> c) -> (a' -> b' -> c') -> p a a' -> p b b' -> p c c'++instance Biapplicative (,) where+ bipure = (,)+ biliftA2 f f' (a, a') (b, b') = (f a b, f' a' b')++newtype WrapBiapp p a b = WrapBiap (p a b)+ deriving newtype (Bifunctor, Biapplicative, Eq)++instance (Biapplicative p, Num a, Num b) => Num (WrapBiapp p a b)+ where+ (+) = biliftA2 (+) (+)+ (-) = biliftA2 (*) (*)+ (*) = biliftA2 (*) (*)+ negate = bimap negate negate+ abs = bimap abs abs+ signum = bimap signum signum+ fromInteger n = fromInteger n `bipure` fromInteger n++newtype INT2 = INT2 (Int, Int)+ deriving IsZero via (WrappedNumEq2 (WrapBiapp (,) Int Int))++class Monoid a => MonoidNull a where+ null :: a -> Bool++newtype WrpMonNull a = WRM a+ deriving (Eq, Semigroup, Monoid)++instance (Eq a, Monoid a) => MonoidNull (WrpMonNull a) where+ null :: WrpMonNull a -> Bool+ null = (== mempty)++deriving via (WrpMonNull Any) instance MonoidNull Any++deriving via () instance MonoidNull ()++deriving via Ordering instance MonoidNull Ordering++class Lattice a where+ sup :: a -> a -> a+ + (.>=) :: a -> a -> Bool+ + (.>) :: a -> a -> Bool++newtype WrapOrd a = WrappedOrd a+ deriving newtype (Eq, Ord)++instance Ord a => Lattice (WrapOrd a) where+ sup = max+ (.>=) = (>=)+ (.>) = (>)++deriving via [a] instance Ord a => Lattice [a]++deriving via (a, b) instance (Ord a, Ord b) => Lattice (a, b)++deriving via Bool instance Lattice Bool++deriving via Char instance Lattice Char++deriving via Int instance Lattice Int++deriving via Integer instance Lattice Integer++deriving via Float instance Lattice Float++deriving via Double instance Lattice Double++deriving via Rational instance Lattice Rational++class Functor f => Additive f where+ zero :: Num a => f a+ + (^+^) :: Num a => f a -> f a -> f a+ (^+^) = liftU2 (+)+ + (^-^) :: Num a => f a -> f a -> f a+ x ^-^ y = x ^+^ fmap negate y+ + liftU2 :: (a -> a -> a) -> f a -> f a -> f a++instance Additive [] where+ zero = []+ liftU2 f = go+ where go (x : xs) (y : ys) = f x y : go xs ys+ go [] ys = ys+ go xs [] = xs++instance Additive Maybe where+ zero = Nothing+ liftU2 f (Just a) (Just b) = Just (f a b)+ liftU2 _ Nothing ys = ys+ liftU2 _ xs Nothing = xs++instance Applicative f => Additive (WrapApplicative f) where+ zero = pure 0+ liftU2 = liftA2++deriving via (WrapApplicative ((->) a)) instance Additive ((->) a)++deriving via (WrapApplicative Complex) instance Additive Complex++deriving via (WrapApplicative Identity) instance Additive Identity++instance Additive ZipList where+ zero = ZipList []+ liftU2 f (ZipList xs) (ZipList ys) = ZipList (liftU2 f xs ys)++class Additive (Diff p) => Affine p where+ type Diff p :: Type -> Type+ + (.-.) :: Num a => p a -> p a -> Diff p a+ + (.+^) :: Num a => p a -> Diff p a -> p a+ + (.-^) :: Num a => p a -> Diff p a -> p a+ p .-^ v = p .+^ fmap negate v++newtype WrapAdditive f a = WrappedAdditive (f a)++instance Additive f => Affine (WrapAdditive f) where+ type Diff (WrapAdditive f) = f+ WrappedAdditive a .-. WrappedAdditive b = a ^-^ b+ WrappedAdditive a .+^ b = WrappedAdditive (a ^+^ b)+ WrappedAdditive a .-^ b = WrappedAdditive (a ^-^ b)++deriving via (WrapAdditive ((->) a)) instance Affine ((->) a)++deriving via (WrapAdditive []) instance Affine []++deriving via (WrapAdditive Complex) instance Affine Complex++deriving via (WrapAdditive Maybe) instance Affine Maybe++deriving via (WrapAdditive ZipList) instance Affine ZipList++deriving via (WrapAdditive Identity) instance Affine Identity++class C2 a b c where+ c2 :: a -> b -> c++instance C2 a b (Const a b) where+ c2 x _ = Const x++newtype Fweemp a = Fweemp a+ deriving (C2 a b) via (Const a (b :: Type))
@@ -0,0 +1,41 @@+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE StandaloneDeriving #-}+module DerivingVia2 where++import Control.Applicative+import Data.Functor.Compose+import Data.Proxy+import Data.Semigroup++newtype App (f :: * -> *) a = App (f a)+ deriving newtype+ (Functor, Applicative)++instance (Applicative f, Semigroup a) => Semigroup (App f a) where+ (<>) = liftA2 (<>)++deriving via (App (Compose (f :: * -> *) g) a)+ instance (Applicative f, Applicative g, Semigroup a)+ => Semigroup (Compose f g a)++class C (a :: k -> *)+instance C Proxy++newtype MyProxy a = MyProxy (Proxy a)+deriving via (Proxy :: * -> *) instance C MyProxy++class Z a b+data T a+data X1 a+data X2 a+data X3 a++deriving via (forall a. T a) instance Z a (X1 b)+deriving via (T a) instance forall b. Z a (X2 b)+deriving via (forall a. T a) instance forall b. Z a (X3 b)
@@ -0,0 +1,42 @@+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE StandaloneDeriving #-}+module DerivingVia2 where++import Control.Applicative+import Data.Functor.Compose+import Data.Proxy+import Data.Semigroup++newtype App (f :: * -> *) a = App (f a)+ deriving newtype+ (Functor, Applicative)++instance (Applicative f, Semigroup a) => Semigroup (App f a) where+ (<>) = liftA2 (<>)++deriving via( App (Compose (f :: * -> *) g) a)+ instance (Applicative f, Applicative g, Semigroup a)+ => Semigroup (Compose f g a)++class C (a :: k -> *)+instance C Proxy++newtype MyProxy a = MyProxy (Proxy a)+deriving via( Proxy :: * -> *) instance C MyProxy++class Z a b+data T a+data X1 a+data X2 a+data X3 a++deriving via( forall a. T a) instance Z a (X1 b)+deriving via( T a) instance forall b. Z a (X2 b)+deriving via( forall a. T a) instance forall b. Z a (X3 b)+
@@ -0,0 +1,2346 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 1 1 42 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 2 1 2 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 3 1 3 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 4 1 4 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 5 1 5 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 6 1 6 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 7 1 7 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 8 1 8 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 9 1 9 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 9 1 9 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 11 1 11 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 12 1 12 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 13 1 13 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 14 1 14 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 16 1 16 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 20 1 20 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 23 1 23 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 27 1 27 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 28 1 28 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 30 1 30 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 31 1 31 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 33 1 33 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 34 1 34 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 35 1 35 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 36 1 36 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 37 1 37 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 39 1 39 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 40 1 40 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 41 1 41 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 42 1 42 1+ , SrcSpan "tests/examples/DerivingVia2.hs" 42 1 42 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 9 1 9 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 9 1 9 7+ , SrcSpan "tests/examples/DerivingVia2.hs" 9 21 9 26+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 9 8 9 20+ , srcInfoPoints = []+ }+ "DerivingVia2")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 1 1 1 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 1 1 1 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 1 33 1 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 1 14 1 32+ , srcInfoPoints = []+ }+ "DerivingStrategies"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 2 1 2 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 2 1 2 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 2 26 2 29+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 2 14 2 25+ , srcInfoPoints = []+ }+ "DerivingVia"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 3 1 3 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 3 1 3 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 3 32 3 35+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 3 14 3 31+ , srcInfoPoints = []+ }+ "FlexibleInstances"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 4 1 4 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 4 1 4 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 4 41 4 44+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 4 14 4 40+ , srcInfoPoints = []+ }+ "GeneralizedNewtypeDeriving"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 5 1 5 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 5 1 5 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 5 36 5 39+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 5 14 5 35+ , srcInfoPoints = []+ }+ "MultiParamTypeClasses"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 6 1 6 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 6 1 6 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 6 24 6 27+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 6 14 6 23+ , srcInfoPoints = []+ }+ "PolyKinds"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 7 1 7 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 7 1 7 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 7 25 7 28+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 7 14 7 24+ , srcInfoPoints = []+ }+ "RankNTypes"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 8 1 8 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 8 1 8 13+ , SrcSpan "tests/examples/DerivingVia2.hs" 8 33 8 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 8 14 8 32+ , srcInfoPoints = []+ }+ "StandaloneDeriving"+ ]+ ]+ [ ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 11 1 11 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 11 1 11 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 11 8 11 27+ , srcInfoPoints = []+ }+ "Control.Applicative"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 12 1 12 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 12 1 12 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 12 8 12 28+ , srcInfoPoints = []+ }+ "Data.Functor.Compose"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 13 1 13 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 13 1 13 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 13 8 13 18+ , srcInfoPoints = []+ }+ "Data.Proxy"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 14 1 14 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 14 1 14 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 14 8 14 22+ , srcInfoPoints = []+ }+ "Data.Semigroup"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ ]+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 16 1 18 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 16 29 16 30 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 16 1 16 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 16 9 16 28+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 16 9 16 26+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 16 9 16 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 16 9 16 12+ , srcInfoPoints = []+ }+ "App"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 13 16 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 16 13 16 14+ , SrcSpan "tests/examples/DerivingVia2.hs" 16 16 16 18+ , SrcSpan "tests/examples/DerivingVia2.hs" 16 25 16 26+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 14 16 15+ , srcInfoPoints = []+ }+ "f")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 19 16 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 16 21 16 23 ]+ }+ (TyStar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 19 16 20+ , srcInfoPoints = []+ })+ (TyStar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 24 16 25+ , srcInfoPoints = []+ }))))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 27 16 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 27 16 28+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 31 16 40+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 31 16 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 31 16 34+ , srcInfoPoints = []+ }+ "App")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 35 16 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 16 35 16 36+ , SrcSpan "tests/examples/DerivingVia2.hs" 16 39 16 40+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 36 16 39+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 36 16 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 36 16 37+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 38 16 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 16 38 16 39+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 17 3 18 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 17 3 17 11+ , SrcSpan "tests/examples/DerivingVia2.hs" 18 5 18 6+ , SrcSpan "tests/examples/DerivingVia2.hs" 18 13 18 14+ , SrcSpan "tests/examples/DerivingVia2.hs" 18 26 18 27+ ]+ }+ (Just+ (DerivNewtype+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 17 12 17 19+ , srcInfoPoints = []+ }))+ [ IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 18 6 18 13+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 18 6 18 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 18 6 18 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 18 6 18 13+ , srcInfoPoints = []+ }+ "Functor")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 18 15 18 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 18 15 18 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 18 15 18 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 18 15 18 26+ , srcInfoPoints = []+ }+ "Applicative")))+ ]+ ]+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 20 1 23 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 20 1 20 9+ , SrcSpan "tests/examples/DerivingVia2.hs" 20 62 20 67+ , SrcSpan "tests/examples/DerivingVia2.hs" 21 3 21 3+ , SrcSpan "tests/examples/DerivingVia2.hs" 23 1 23 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 10 20 61+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 10 20 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 20 10 20 11+ , SrcSpan "tests/examples/DerivingVia2.hs" 20 24 20 25+ , SrcSpan "tests/examples/DerivingVia2.hs" 20 37 20 38+ , SrcSpan "tests/examples/DerivingVia2.hs" 20 39 20 41+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 11 20 24+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 11 20 24+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 11 20 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 11 20 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 11 20 22+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 23 20 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 23 20 24+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 26 20 37+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 26 20 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 26 20 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 26 20 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 26 20 35+ , srcInfoPoints = []+ }+ "Semigroup")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 36 20 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 36 20 37+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 42 20 61+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 42 20 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 42 20 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 42 20 51+ , srcInfoPoints = []+ }+ "Semigroup")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 52 20 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 20 52 20 53+ , SrcSpan "tests/examples/DerivingVia2.hs" 20 60 20 61+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 53 20 60+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 53 20 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 53 20 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 53 20 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 53 20 56+ , srcInfoPoints = []+ }+ "App")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 57 20 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 57 20 58+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 59 20 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 20 59 20 60+ , srcInfoPoints = []+ }+ "a"))))))+ (Just+ [ InsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 21 3 21 21+ , srcInfoPoints = []+ }+ (PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 21 3 21 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 21 3 21 7+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 21 3 21 4+ , SrcSpan "tests/examples/DerivingVia2.hs" 21 4 21 6+ , SrcSpan "tests/examples/DerivingVia2.hs" 21 6 21 7+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 21 4 21 6+ , srcInfoPoints = []+ }+ "<>"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 21 8 21 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 21 8 21 9 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 21 10 21 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 21 10 21 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 21 10 21 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 21 10 21 16+ , srcInfoPoints = []+ }+ "liftA2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 21 17 21 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 21 17 21 18+ , SrcSpan "tests/examples/DerivingVia2.hs" 21 18 21 20+ , SrcSpan "tests/examples/DerivingVia2.hs" 21 20 21 21+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 21 17 21 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 21 17 21 18+ , SrcSpan "tests/examples/DerivingVia2.hs" 21 18 21 20+ , SrcSpan "tests/examples/DerivingVia2.hs" 21 20 21 21+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 21 18 21 20+ , srcInfoPoints = []+ }+ "<>")))))+ Nothing)+ ])+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 23 1 25 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 23 1 23 9+ , SrcSpan "tests/examples/DerivingVia2.hs" 24 10 24 18+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 10 23 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 14 23 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 23 14 23 15+ , SrcSpan "tests/examples/DerivingVia2.hs" 23 46 23 47+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 15 23 46+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 15 23 44+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 15 23 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 15 23 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 15 23 18+ , srcInfoPoints = []+ }+ "App")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 19 23 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 23 19 23 20+ , SrcSpan "tests/examples/DerivingVia2.hs" 23 43 23 44+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 20 23 43+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 20 23 41+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 20 23 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 20 23 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia2.hs" 23 20 23 27+ , srcInfoPoints = []+ }+ "Compose")))+ (TyKind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 28 23 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 23 28 23 29+ , SrcSpan "tests/examples/DerivingVia2.hs" 23 31 23 33+ , SrcSpan "tests/examples/DerivingVia2.hs" 23 40 23 41+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 29 23 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia2.hs" 23 29 23 30+ , srcInfoPoints = []+ }+ "f"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 34 23 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 23 36 23 38+ ]+ }+ (TyStar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia2.hs" 23 34 23 35+ , srcInfoPoints = []+ })+ (TyStar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DerivingVia2.hs" 23 39 23 40+ , srcInfoPoints = []+ }))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 42 23 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 42 23 43+ , srcInfoPoints = []+ }+ "g")))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 45 23 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 23 45 23 46+ , srcInfoPoints = []+ }+ "a"))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 19 25 44+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 19 25 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 24 19 24 20+ , SrcSpan "tests/examples/DerivingVia2.hs" 24 33 24 34+ , SrcSpan "tests/examples/DerivingVia2.hs" 24 48 24 49+ , SrcSpan "tests/examples/DerivingVia2.hs" 24 61 24 62+ , SrcSpan "tests/examples/DerivingVia2.hs" 25 16 25 18+ ]+ }+ [ TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 20 24 33+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 20 24 33+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 20 24 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 20 24 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 20 24 31+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 32 24 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 32 24 33+ , srcInfoPoints = []+ }+ "f")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 35 24 48+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 35 24 48+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 35 24 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 35 24 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 35 24 46+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 47 24 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 47 24 48+ , srcInfoPoints = []+ }+ "g")))+ , TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 50 24 61+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 50 24 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 50 24 61+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 50 24 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 50 24 59+ , srcInfoPoints = []+ }+ "Semigroup")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 60 24 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 24 60 24 61+ , srcInfoPoints = []+ }+ "a")))+ ]))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 19 25 44+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 19 25 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 19 25 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 19 25 28+ , srcInfoPoints = []+ }+ "Semigroup")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 29 25 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 25 29 25 30+ , SrcSpan "tests/examples/DerivingVia2.hs" 25 43 25 44+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 30 25 43+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 30 25 41+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 30 25 39+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 30 25 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 30 25 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 30 25 37+ , srcInfoPoints = []+ }+ "Compose")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 38 25 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 38 25 39+ , srcInfoPoints = []+ }+ "f")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 40 25 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 40 25 41+ , srcInfoPoints = []+ }+ "g")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 42 25 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 25 42 25 43+ , srcInfoPoints = []+ }+ "a"))))))+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 27 1 27 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 27 1 27 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 27 7 27 22+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 27 7 27 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 27 7 27 8+ , srcInfoPoints = []+ }+ "C"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 27 9 27 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 27 9 27 10+ , SrcSpan "tests/examples/DerivingVia2.hs" 27 12 27 14+ , SrcSpan "tests/examples/DerivingVia2.hs" 27 21 27 22+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 27 10 27 11+ , srcInfoPoints = []+ }+ "a")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 27 15 27 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 27 17 27 19 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 27 15 27 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 27 15 27 16+ , srcInfoPoints = []+ }+ "k"))+ (TyStar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 27 20 27 21+ , srcInfoPoints = []+ }))))+ []+ Nothing+ , InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 28 1 28 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 28 1 28 9 ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 10 28 17+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 10 28 17+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 10 28 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 10 28 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 10 28 11+ , srcInfoPoints = []+ }+ "C")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 12 28 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 12 28 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 28 12 28 17+ , srcInfoPoints = []+ }+ "Proxy")))))+ Nothing+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 30 1 30 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 30 19 30 20 ]+ }+ (NewType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 30 1 30 8+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 30 9 30 18+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 30 9 30 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 30 9 30 16+ , srcInfoPoints = []+ }+ "MyProxy"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 17 30 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 17 30 18+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 21 30 38+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 21 30 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 21 30 28+ , srcInfoPoints = []+ }+ "MyProxy")+ [ TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 29 30 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 30 29 30 30+ , SrcSpan "tests/examples/DerivingVia2.hs" 30 37 30 38+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 30 30 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 30 30 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 30 30 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 30 30 35+ , srcInfoPoints = []+ }+ "Proxy")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 36 30 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 30 36 30 37+ , srcInfoPoints = []+ }+ "a")))+ ])+ ]+ []+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 31 1 31 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 31 1 31 9+ , SrcSpan "tests/examples/DerivingVia2.hs" 31 32 31 40+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 10 31 13+ , srcInfoPoints = []+ }+ (TyKind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 14 31 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 31 14 31 15+ , SrcSpan "tests/examples/DerivingVia2.hs" 31 21 31 23+ , SrcSpan "tests/examples/DerivingVia2.hs" 31 30 31 31+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 15 31 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 15 31 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 15 31 20+ , srcInfoPoints = []+ }+ "Proxy")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 24 31 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 31 26 31 28 ]+ }+ (TyStar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 24 31 25+ , srcInfoPoints = []+ })+ (TyStar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 29 31 30+ , srcInfoPoints = []+ })))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 41 31 50+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 41 31 50+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 41 31 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 41 31 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 41 31 42+ , srcInfoPoints = []+ }+ "C")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 43 31 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 43 31 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 31 43 31 50+ , srcInfoPoints = []+ }+ "MyProxy")))))+ , ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 33 1 33 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 33 1 33 6 ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 33 7 33 12+ , srcInfoPoints = []+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 33 7 33 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 33 7 33 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 33 7 33 8+ , srcInfoPoints = []+ }+ "Z"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 33 9 33 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 33 9 33 10+ , srcInfoPoints = []+ }+ "a")))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 33 11 33 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 33 11 33 12+ , srcInfoPoints = []+ }+ "b")))+ []+ Nothing+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 34 1 34 5+ , srcInfoPoints = []+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 34 1 34 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 34 6 34 9+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 34 6 34 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 34 6 34 7+ , srcInfoPoints = []+ }+ "T"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 34 8 34 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 34 8 34 9+ , srcInfoPoints = []+ }+ "a")))+ []+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 35 1 35 5+ , srcInfoPoints = []+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 35 1 35 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 35 6 35 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 35 6 35 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 35 6 35 8+ , srcInfoPoints = []+ }+ "X1"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 35 9 35 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 35 9 35 10+ , srcInfoPoints = []+ }+ "a")))+ []+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 36 1 36 5+ , srcInfoPoints = []+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 36 1 36 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 36 6 36 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 36 6 36 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 36 6 36 8+ , srcInfoPoints = []+ }+ "X2"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 36 9 36 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 36 9 36 10+ , srcInfoPoints = []+ }+ "a")))+ []+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 37 1 37 5+ , srcInfoPoints = []+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 37 1 37 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 37 6 37 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 37 6 37 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 37 6 37 8+ , srcInfoPoints = []+ }+ "X3"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 37 9 37 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 37 9 37 10+ , srcInfoPoints = []+ }+ "a")))+ []+ []+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 39 1 39 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 39 1 39 9+ , SrcSpan "tests/examples/DerivingVia2.hs" 39 30 39 38+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 10 39 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 14 39 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 39 14 39 15+ , SrcSpan "tests/examples/DerivingVia2.hs" 39 28 39 29+ ]+ }+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 15 39 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 39 15 39 21+ , SrcSpan "tests/examples/DerivingVia2.hs" 39 23 39 24+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 22 39 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 22 39 23+ , srcInfoPoints = []+ }+ "a")+ ])+ Nothing+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 25 39 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 25 39 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 25 39 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 25 39 26+ , srcInfoPoints = []+ }+ "T")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 27 39 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 27 39 28+ , srcInfoPoints = []+ }+ "a")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 49 39 59+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 49 39 59+ , srcInfoPoints = []+ }+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 49 39 52+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 49 39 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 49 39 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 49 39 50+ , srcInfoPoints = []+ }+ "Z")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 51 39 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 51 39 52+ , srcInfoPoints = []+ }+ "a")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 53 39 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 39 53 39 54+ , SrcSpan "tests/examples/DerivingVia2.hs" 39 58 39 59+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 54 39 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 54 39 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 54 39 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 54 39 56+ , srcInfoPoints = []+ }+ "X1")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 57 39 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 39 57 39 58+ , srcInfoPoints = []+ }+ "b"))))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 40 1 40 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 40 1 40 9+ , SrcSpan "tests/examples/DerivingVia2.hs" 40 30 40 38+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 10 40 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 24 40 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 40 24 40 25+ , SrcSpan "tests/examples/DerivingVia2.hs" 40 28 40 29+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 25 40 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 25 40 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 25 40 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 25 40 26+ , srcInfoPoints = []+ }+ "T")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 27 40 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 27 40 28+ , srcInfoPoints = []+ }+ "a"))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 39 40 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 40 39 40 45+ , SrcSpan "tests/examples/DerivingVia2.hs" 40 47 40 48+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 46 40 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 46 40 47+ , srcInfoPoints = []+ }+ "b")+ ])+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 49 40 59+ , srcInfoPoints = []+ }+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 49 40 52+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 49 40 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 49 40 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 49 40 50+ , srcInfoPoints = []+ }+ "Z")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 51 40 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 51 40 52+ , srcInfoPoints = []+ }+ "a")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 53 40 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 40 53 40 54+ , SrcSpan "tests/examples/DerivingVia2.hs" 40 58 40 59+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 54 40 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 54 40 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 54 40 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 54 40 56+ , srcInfoPoints = []+ }+ "X2")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 57 40 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 40 57 40 58+ , srcInfoPoints = []+ }+ "b"))))))+ , DerivDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DerivingVia2.hs" 41 1 41 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 41 1 41 9+ , SrcSpan "tests/examples/DerivingVia2.hs" 41 30 41 38+ ]+ }+ (Just+ (DerivVia+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 10 41 13+ , srcInfoPoints = []+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 14 41 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 41 14 41 15+ , SrcSpan "tests/examples/DerivingVia2.hs" 41 28 41 29+ ]+ }+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 15 41 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 41 15 41 21+ , SrcSpan "tests/examples/DerivingVia2.hs" 41 23 41 24+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 22 41 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 22 41 23+ , srcInfoPoints = []+ }+ "a")+ ])+ Nothing+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 25 41 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 25 41 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 25 41 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 25 41 26+ , srcInfoPoints = []+ }+ "T")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 27 41 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 27 41 28+ , srcInfoPoints = []+ }+ "a")))))))+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 39 41 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 41 39 41 45+ , SrcSpan "tests/examples/DerivingVia2.hs" 41 47 41 48+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 46 41 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 46 41 47+ , srcInfoPoints = []+ }+ "b")+ ])+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 49 41 59+ , srcInfoPoints = []+ }+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 49 41 52+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 49 41 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 49 41 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 49 41 50+ , srcInfoPoints = []+ }+ "Z")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 51 41 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 51 41 52+ , srcInfoPoints = []+ }+ "a")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 53 41 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingVia2.hs" 41 53 41 54+ , SrcSpan "tests/examples/DerivingVia2.hs" 41 58 41 59+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 54 41 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 54 41 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 54 41 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 54 41 56+ , srcInfoPoints = []+ }+ "X3")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 57 41 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingVia2.hs" 41 57 41 58+ , srcInfoPoints = []+ }+ "b"))))))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,47 @@+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE StandaloneDeriving #-}+module DerivingVia2 where+import Control.Applicative+import Data.Functor.Compose+import Data.Proxy+import Data.Semigroup++newtype App (f :: * -> *) a = App (f a)+ deriving newtype (Functor, Applicative)++instance (Applicative f, Semigroup a) => Semigroup (App f a) where+ (<>) = liftA2 (<>)++deriving via (App (Compose (f :: * -> *) g) a) instance+ (Applicative f, Applicative g, Semigroup a) =>+ Semigroup (Compose f g a)++class C (a :: k -> *)++instance C Proxy++newtype MyProxy a = MyProxy (Proxy a)++deriving via (Proxy :: * -> *) instance C MyProxy++class Z a b++data T a++data X1 a++data X2 a++data X3 a++deriving via (forall a . T a) instance Z a (X1 b)++deriving via (T a) instance forall b . Z a (X2 b)++deriving via (forall a . T a) instance forall b . Z a (X3 b)
@@ -0,0 +1,5 @@+module DerivingViaStealing where++via = ()+stock = ()+anyclass = ()
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,201 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 1 1 1 1+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 3 1 3 1+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 4 1 4 1+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 5 1 5 1+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 6 1 6 1+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 6 1 6 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 1 1 1 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 1 1 1 7+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 1 28 1 33+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 1 8 1 27+ , srcInfoPoints = []+ }+ "DerivingViaStealing")+ Nothing+ Nothing))+ []+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 1 3 9+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 1 3 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 1 3 4+ , srcInfoPoints = []+ }+ "via"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 5 3 9+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 5 3 6 ]+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 7 3 9+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 7 3 8+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 3 8 3 9+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 7 3 9+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 7 3 8+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 3 8 3 9+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 7 3 9+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 3 7 3 8+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 3 8 3 9+ ]+ }))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 1 4 11+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 1 4 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 1 4 6+ , srcInfoPoints = []+ }+ "stock"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 7 4 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 7 4 8 ]+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 9 4 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 9 4 10+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 4 10 4 11+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 9 4 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 9 4 10+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 4 10 4 11+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 9 4 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 4 9 4 10+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 4 10 4 11+ ]+ }))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 1 5 14+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 1 5 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 1 5 9+ , srcInfoPoints = []+ }+ "anyclass"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 10 5 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 10 5 11 ]+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 12 5 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 12 5 13+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 5 13 5 14+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 12 5 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 12 5 13+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 5 13 5 14+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 12 5 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DerivingViaStealing.hs" 5 12 5 13+ , SrcSpan "tests/examples/DerivingViaStealing.hs" 5 13 5 14+ ]+ }))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+module DerivingViaStealing where+via = ()+stock = ()+anyclass = ()
@@ -0,0 +1,913 @@+{-# LANGUAGE ForeignFunctionInterface, NondecreasingIndentation #-}++-----------------------------------------------------------------------------+-- |+-- Module : System.Directory+-- Copyright : (c) The University of Glasgow 2001+-- License : BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer : libraries@haskell.org+-- Stability : stable+-- Portability : portable+--+-- System-independent interface to directory manipulation.+--+-----------------------------------------------------------------------------++module System.Directory+ (+ -- $intro++ -- * Actions on directories+ createDirectory -- :: FilePath -> IO ()+ , createDirectoryIfMissing -- :: Bool -> FilePath -> IO ()+ , removeDirectory -- :: FilePath -> IO ()+ , removeDirectoryRecursive -- :: FilePath -> IO ()+ , renameDirectory -- :: FilePath -> FilePath -> IO ()++ , getDirectoryContents -- :: FilePath -> IO [FilePath]+ , getCurrentDirectory -- :: IO FilePath+ , setCurrentDirectory -- :: FilePath -> IO ()++ -- * Pre-defined directories+ , getHomeDirectory+ , getAppUserDataDirectory+ , getUserDocumentsDirectory+ , getTemporaryDirectory++ -- * Actions on files+ , removeFile -- :: FilePath -> IO ()+ , renameFile -- :: FilePath -> FilePath -> IO ()+ , copyFile -- :: FilePath -> FilePath -> IO ()++ , canonicalizePath+ , makeRelativeToCurrentDirectory+ , findExecutable++ -- * Existence tests+ , doesFileExist -- :: FilePath -> IO Bool+ , doesDirectoryExist -- :: FilePath -> IO Bool++ -- * Permissions++ -- $permissions++ , Permissions(+ Permissions,+ readable, -- :: Permissions -> Bool+ writable, -- :: Permissions -> Bool+ executable, -- :: Permissions -> Bool+ searchable -- :: Permissions -> Bool+ )++ , getPermissions -- :: FilePath -> IO Permissions+ , setPermissions -- :: FilePath -> Permissions -> IO ()+ , copyPermissions++ -- * Timestamps++ , getModificationTime -- :: FilePath -> IO ClockTime+ ) where++import Prelude hiding ( catch )+import qualified Prelude++import Control.Monad (guard)+import System.Environment ( getEnv )+import System.FilePath+import System.IO+import System.IO.Error hiding ( catch, try )+import Control.Monad ( when, unless )+import Control.Exception.Base++import Foreign+import Foreign.C++{-# CFILES cbits/directory.c #-}++import System.Time ( ClockTime(..) )++import GHC.IO.Exception ( IOException(..), IOErrorType(..), ioException )++import System.Posix.Types+import System.Posix.Internals+import qualified System.Win32 as Win32++{- $intro+A directory contains a series of entries, each of which is a named+reference to a file system object (file, directory etc.). Some+entries may be hidden, inaccessible, or have some administrative+function (e.g. `.' or `..' under POSIX+<http://www.opengroup.org/onlinepubs/009695399/>), but in+this standard all such entries are considered to form part of the+directory contents. Entries in sub-directories are not, however,+considered to form part of the directory contents.++Each file system object is referenced by a /path/. There is+normally at least one absolute path to each file system object. In+some operating systems, it may also be possible to have paths which+are relative to the current directory.+-}++-----------------------------------------------------------------------------+-- Permissions++{- $permissions++ The 'Permissions' type is used to record whether certain operations are+ permissible on a file\/directory. 'getPermissions' and 'setPermissions'+ get and set these permissions, respectively. Permissions apply both to+ files and directories. For directories, the executable field will be+ 'False', and for files the searchable field will be 'False'. Note that+ directories may be searchable without being readable, if permission has+ been given to use them as part of a path, but not to examine the+ directory contents.++Note that to change some, but not all permissions, a construct on the following lines must be used.++> makeReadable f = do+> p <- getPermissions f+> setPermissions f (p {readable = True})++-}++data Permissions+ = Permissions {+ readable, writable,+ executable, searchable :: Bool+ } deriving (Eq, Ord, Read, Show)++{- |The 'getPermissions' operation returns the+permissions for the file or directory.++The operation may fail with:++* 'isPermissionError' if the user is not permitted to access+ the permissions; or++* 'isDoesNotExistError' if the file or directory does not exist.++-}++getPermissions :: FilePath -> IO Permissions+getPermissions name = do+ withFilePath name $ \s -> do+ -- stat() does a better job of guessing the permissions on Windows+ -- than access() does. e.g. for execute permission, it looks at the+ -- filename extension :-)+ --+ -- I tried for a while to do this properly, using the Windows security API,+ -- and eventually gave up. getPermissions is a flawed API anyway. -- SimonM+ allocaBytes sizeof_stat $ \ p_stat -> do+ throwErrnoIfMinus1_ "getPermissions" $ c_stat s p_stat+ mode <- st_mode p_stat+ let usr_read = mode .&. s_IRUSR+ let usr_write = mode .&. s_IWUSR+ let usr_exec = mode .&. s_IXUSR+ let is_dir = mode .&. s_IFDIR+ return (+ Permissions {+ readable = usr_read /= 0,+ writable = usr_write /= 0,+ executable = is_dir == 0 && usr_exec /= 0,+ searchable = is_dir /= 0 && usr_exec /= 0+ }+ )++{- |The 'setPermissions' operation sets the+permissions for the file or directory.++The operation may fail with:++* 'isPermissionError' if the user is not permitted to set+ the permissions; or++* 'isDoesNotExistError' if the file or directory does not exist.++-}++setPermissions :: FilePath -> Permissions -> IO ()+setPermissions name (Permissions r w e s) = do+ allocaBytes sizeof_stat $ \ p_stat -> do+ withFilePath name $ \p_name -> do+ throwErrnoIfMinus1_ "setPermissions" $ do+ c_stat p_name p_stat+ mode <- st_mode p_stat+ let mode1 = modifyBit r mode s_IRUSR+ let mode2 = modifyBit w mode1 s_IWUSR+ let mode3 = modifyBit (e || s) mode2 s_IXUSR+ c_wchmod p_name mode3+ where+ modifyBit :: Bool -> CMode -> CMode -> CMode+ modifyBit False m b = m .&. (complement b)+ modifyBit True m b = m .|. b++foreign import ccall unsafe "_wchmod"+ c_wchmod :: CWString -> CMode -> IO CInt++copyPermissions :: FilePath -> FilePath -> IO ()+copyPermissions source dest = do+ allocaBytes sizeof_stat $ \ p_stat -> do+ withFilePath source $ \p_source -> do+ withFilePath dest $ \p_dest -> do+ throwErrnoIfMinus1_ "copyPermissions" $ c_stat p_source p_stat+ mode <- st_mode p_stat+ throwErrnoIfMinus1_ "copyPermissions" $ c_wchmod p_dest mode++-----------------------------------------------------------------------------+-- Implementation++{- |@'createDirectory' dir@ creates a new directory @dir@ which is+initially empty, or as near to empty as the operating system+allows.++The operation may fail with:++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EROFS, EACCES]@++* 'isAlreadyExistsError' \/ 'AlreadyExists'+The operand refers to a directory that already exists.+@ [EEXIST]@++* 'HardwareFault'+A physical I\/O error has occurred.+@[EIO]@++* 'InvalidArgument'+The operand is not a valid directory name.+@[ENAMETOOLONG, ELOOP]@++* 'NoSuchThing'+There is no path to the directory.+@[ENOENT, ENOTDIR]@++* 'ResourceExhausted'+Insufficient resources (virtual memory, process file descriptors,+physical disk space, etc.) are available to perform the operation.+@[EDQUOT, ENOSPC, ENOMEM, EMLINK]@++* 'InappropriateType'+The path refers to an existing non-directory object.+@[EEXIST]@++-}++createDirectory :: FilePath -> IO ()+createDirectory path = do+ Win32.createDirectory path Nothing++-- | @'createDirectoryIfMissing' parents dir@ creates a new directory+-- @dir@ if it doesn\'t exist. If the first argument is 'True'+-- the function will also create all parent directories if they are missing.+createDirectoryIfMissing :: Bool -- ^ Create its parents too?+ -> FilePath -- ^ The path to the directory you want to make+ -> IO ()+createDirectoryIfMissing create_parents path0+ | create_parents = createDirs (parents path0)+ | otherwise = createDirs (take 1 (parents path0))+ where+ parents = reverse . scanl1 (</>) . splitDirectories . normalise++ createDirs [] = return ()+ createDirs (dir:[]) = createDir dir throw+ createDirs (dir:dirs) =+ createDir dir $ \_ -> do+ createDirs dirs+ createDir dir throw++ createDir :: FilePath -> (IOException -> IO ()) -> IO ()+ createDir dir notExistHandler = do+ r <- try $ createDirectory dir+ case (r :: Either IOException ()) of+ Right () -> return ()+ Left e+ | isDoesNotExistError e -> notExistHandler e+ -- createDirectory (and indeed POSIX mkdir) does not distinguish+ -- between a dir already existing and a file already existing. So we+ -- check for it here. Unfortunately there is a slight race condition+ -- here, but we think it is benign. It could report an exeption in+ -- the case that the dir did exist but another process deletes the+ -- directory and creates a file in its place before we can check+ -- that the directory did indeed exist.+ | isAlreadyExistsError e -> (do+ withFileStatus "createDirectoryIfMissing" dir $ \st -> do+ isDir <- isDirectory st+ if isDir then return ()+ else throw e+ ) `catch` ((\_ -> return ()) :: IOException -> IO ())+ | otherwise -> throw e++{- | @'removeDirectory' dir@ removes an existing directory /dir/. The+implementation may specify additional constraints which must be+satisfied before a directory can be removed (e.g. the directory has to+be empty, or may not be in use by other processes). It is not legal+for an implementation to partially remove a directory unless the+entire directory is removed. A conformant implementation need not+support directory removal in all situations (e.g. removal of the root+directory).++The operation may fail with:++* 'HardwareFault'+A physical I\/O error has occurred.+EIO++* 'InvalidArgument'+The operand is not a valid directory name.+[ENAMETOOLONG, ELOOP]++* 'isDoesNotExistError' \/ 'NoSuchThing'+The directory does not exist.+@[ENOENT, ENOTDIR]@++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EROFS, EACCES, EPERM]@++* 'UnsatisfiedConstraints'+Implementation-dependent constraints are not satisfied.+@[EBUSY, ENOTEMPTY, EEXIST]@++* 'UnsupportedOperation'+The implementation does not support removal in this situation.+@[EINVAL]@++* 'InappropriateType'+The operand refers to an existing non-directory object.+@[ENOTDIR]@++-}++removeDirectory :: FilePath -> IO ()+removeDirectory path =+ Win32.removeDirectory path++-- | @'removeDirectoryRecursive' dir@ removes an existing directory /dir/+-- together with its content and all subdirectories. Be careful,+-- if the directory contains symlinks, the function will follow them.+removeDirectoryRecursive :: FilePath -> IO ()+removeDirectoryRecursive startLoc = do+ cont <- getDirectoryContents startLoc+ sequence_ [rm (startLoc </> x) | x <- cont, x /= "." && x /= ".."]+ removeDirectory startLoc+ where+ rm :: FilePath -> IO ()+ rm f = do temp <- try (removeFile f)+ case temp of+ Left e -> do isDir <- doesDirectoryExist f+ -- If f is not a directory, re-throw the error+ unless isDir $ throw (e :: SomeException)+ removeDirectoryRecursive f+ Right _ -> return ()++{- |'removeFile' /file/ removes the directory entry for an existing file+/file/, where /file/ is not itself a directory. The+implementation may specify additional constraints which must be+satisfied before a file can be removed (e.g. the file may not be in+use by other processes).++The operation may fail with:++* 'HardwareFault'+A physical I\/O error has occurred.+@[EIO]@++* 'InvalidArgument'+The operand is not a valid file name.+@[ENAMETOOLONG, ELOOP]@++* 'isDoesNotExistError' \/ 'NoSuchThing'+The file does not exist.+@[ENOENT, ENOTDIR]@++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EROFS, EACCES, EPERM]@++* 'UnsatisfiedConstraints'+Implementation-dependent constraints are not satisfied.+@[EBUSY]@++* 'InappropriateType'+The operand refers to an existing directory.+@[EPERM, EINVAL]@++-}++removeFile :: FilePath -> IO ()+removeFile path =+ Win32.deleteFile path++{- |@'renameDirectory' old new@ changes the name of an existing+directory from /old/ to /new/. If the /new/ directory+already exists, it is atomically replaced by the /old/ directory.+If the /new/ directory is neither the /old/ directory nor an+alias of the /old/ directory, it is removed as if by+'removeDirectory'. A conformant implementation need not support+renaming directories in all situations (e.g. renaming to an existing+directory, or across different physical devices), but the constraints+must be documented.++On Win32 platforms, @renameDirectory@ fails if the /new/ directory already+exists.++The operation may fail with:++* 'HardwareFault'+A physical I\/O error has occurred.+@[EIO]@++* 'InvalidArgument'+Either operand is not a valid directory name.+@[ENAMETOOLONG, ELOOP]@++* 'isDoesNotExistError' \/ 'NoSuchThing'+The original directory does not exist, or there is no path to the target.+@[ENOENT, ENOTDIR]@++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EROFS, EACCES, EPERM]@++* 'ResourceExhausted'+Insufficient resources are available to perform the operation.+@[EDQUOT, ENOSPC, ENOMEM, EMLINK]@++* 'UnsatisfiedConstraints'+Implementation-dependent constraints are not satisfied.+@[EBUSY, ENOTEMPTY, EEXIST]@++* 'UnsupportedOperation'+The implementation does not support renaming in this situation.+@[EINVAL, EXDEV]@++* 'InappropriateType'+Either path refers to an existing non-directory object.+@[ENOTDIR, EISDIR]@++-}++renameDirectory :: FilePath -> FilePath -> IO ()+renameDirectory opath npath = do+ -- XXX this test isn't performed atomically with the following rename+ -- ToDo: use Win32 API+ withFileStatus "renameDirectory" opath $ \st -> do+ is_dir <- isDirectory st+ if (not is_dir)+ then ioException (ioeSetErrorString+ (mkIOError InappropriateType "renameDirectory" Nothing (Just opath))+ "not a directory")+ else do+ Win32.moveFileEx opath npath Win32.mOVEFILE_REPLACE_EXISTING++{- |@'renameFile' old new@ changes the name of an existing file system+object from /old/ to /new/. If the /new/ object already+exists, it is atomically replaced by the /old/ object. Neither+path may refer to an existing directory. A conformant implementation+need not support renaming files in all situations (e.g. renaming+across different physical devices), but the constraints must be+documented.++The operation may fail with:++* 'HardwareFault'+A physical I\/O error has occurred.+@[EIO]@++* 'InvalidArgument'+Either operand is not a valid file name.+@[ENAMETOOLONG, ELOOP]@++* 'isDoesNotExistError' \/ 'NoSuchThing'+The original file does not exist, or there is no path to the target.+@[ENOENT, ENOTDIR]@++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EROFS, EACCES, EPERM]@++* 'ResourceExhausted'+Insufficient resources are available to perform the operation.+@[EDQUOT, ENOSPC, ENOMEM, EMLINK]@++* 'UnsatisfiedConstraints'+Implementation-dependent constraints are not satisfied.+@[EBUSY]@++* 'UnsupportedOperation'+The implementation does not support renaming in this situation.+@[EXDEV]@++* 'InappropriateType'+Either path refers to an existing directory.+@[ENOTDIR, EISDIR, EINVAL, EEXIST, ENOTEMPTY]@++-}++renameFile :: FilePath -> FilePath -> IO ()+renameFile opath npath = do+ -- XXX this test isn't performed atomically with the following rename+ -- ToDo: use Win32 API+ withFileOrSymlinkStatus "renameFile" opath $ \st -> do+ is_dir <- isDirectory st+ if is_dir+ then ioException (ioeSetErrorString+ (mkIOError InappropriateType "renameFile" Nothing (Just opath))+ "is a directory")+ else do+ Win32.moveFileEx opath npath Win32.mOVEFILE_REPLACE_EXISTING++{- |@'copyFile' old new@ copies the existing file from /old/ to /new/.+If the /new/ file already exists, it is atomically replaced by the /old/ file.+Neither path may refer to an existing directory. The permissions of /old/ are+copied to /new/, if possible.+-}++copyFile :: FilePath -> FilePath -> IO ()+copyFile fromFPath toFPath =+ copy `Prelude.catch` (\exc -> throw $ ioeSetLocation exc "copyFile")+ where copy = bracket (openBinaryFile fromFPath ReadMode) hClose $ \hFrom ->+ bracketOnError openTmp cleanTmp $ \(tmpFPath, hTmp) ->+ do allocaBytes bufferSize $ copyContents hFrom hTmp+ hClose hTmp+ ignoreIOExceptions $ copyPermissions fromFPath tmpFPath+ renameFile tmpFPath toFPath+ openTmp = openBinaryTempFile (takeDirectory toFPath) ".copyFile.tmp"+ cleanTmp (tmpFPath, hTmp)+ = do ignoreIOExceptions $ hClose hTmp+ ignoreIOExceptions $ removeFile tmpFPath+ bufferSize = 1024++ copyContents hFrom hTo buffer = do+ count <- hGetBuf hFrom buffer bufferSize+ when (count > 0) $ do+ hPutBuf hTo buffer count+ copyContents hFrom hTo buffer++ ignoreIOExceptions io = io `catch` ioExceptionIgnorer+ ioExceptionIgnorer :: IOException -> IO ()+ ioExceptionIgnorer _ = return ()++-- | Given path referring to a file or directory, returns a+-- canonicalized path, with the intent that two paths referring+-- to the same file\/directory will map to the same canonicalized+-- path. Note that it is impossible to guarantee that the+-- implication (same file\/dir \<=\> same canonicalizedPath) holds+-- in either direction: this function can make only a best-effort+-- attempt.+canonicalizePath :: FilePath -> IO FilePath+canonicalizePath fpath =+ do path <- Win32.getFullPathName fpath+ return (normalise path)+ -- normalise does more stuff, like upper-casing the drive letter+++-- | 'makeRelative' the current directory.+makeRelativeToCurrentDirectory :: FilePath -> IO FilePath+makeRelativeToCurrentDirectory x = do+ cur <- getCurrentDirectory+ return $ makeRelative cur x++-- | Given an executable file name, searches for such file in the+-- directories listed in system PATH. The returned value is the path+-- to the found executable or Nothing if an executable with the given+-- name was not found. For example (findExecutable \"ghc\") gives you+-- the path to GHC.+--+-- The path returned by 'findExecutable' corresponds to the+-- program that would be executed by 'System.Process.createProcess'+-- when passed the same string (as a RawCommand, not a ShellCommand).+--+-- On Windows, 'findExecutable' calls the Win32 function 'SearchPath',+-- which may search other places before checking the directories in+-- @PATH@. Where it actually searches depends on registry settings,+-- but notably includes the directory containing the current+-- executable. See+-- <http://msdn.microsoft.com/en-us/library/aa365527.aspx> for more+-- details.+--+findExecutable :: String -> IO (Maybe FilePath)+findExecutable binary =+ Win32.searchPath Nothing binary ('.':exeExtension)+++{- |@'getDirectoryContents' dir@ returns a list of /all/ entries+in /dir/.++The operation may fail with:++* 'HardwareFault'+A physical I\/O error has occurred.+@[EIO]@++* 'InvalidArgument'+The operand is not a valid directory name.+@[ENAMETOOLONG, ELOOP]@++* 'isDoesNotExistError' \/ 'NoSuchThing'+The directory does not exist.+@[ENOENT, ENOTDIR]@++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EACCES]@++* 'ResourceExhausted'+Insufficient resources are available to perform the operation.+@[EMFILE, ENFILE]@++* 'InappropriateType'+The path refers to an existing non-directory object.+@[ENOTDIR]@++-}++getDirectoryContents :: FilePath -> IO [FilePath]+getDirectoryContents path =+ modifyIOError ((`ioeSetFileName` path) .+ (`ioeSetLocation` "getDirectoryContents")) $ do+ bracket+ (Win32.findFirstFile (path </> "*"))+ (\(h,_) -> Win32.findClose h)+ (\(h,fdat) -> loop h fdat [])+ where+ -- we needn't worry about empty directories: adirectory always+ -- has at least "." and ".." entries+ loop :: Win32.HANDLE -> Win32.FindData -> [FilePath] -> IO [FilePath]+ loop h fdat acc = do+ filename <- Win32.getFindDataFileName fdat+ more <- Win32.findNextFile h fdat+ if more+ then loop h fdat (filename:acc)+ else return (filename:acc)+ -- no need to reverse, ordering is undefined++{- |If the operating system has a notion of current directories,+'getCurrentDirectory' returns an absolute path to the+current directory of the calling process.++The operation may fail with:++* 'HardwareFault'+A physical I\/O error has occurred.+@[EIO]@++* 'isDoesNotExistError' \/ 'NoSuchThing'+There is no path referring to the current directory.+@[EPERM, ENOENT, ESTALE...]@++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EACCES]@++* 'ResourceExhausted'+Insufficient resources are available to perform the operation.++* 'UnsupportedOperation'+The operating system has no notion of current directory.++-}+getCurrentDirectory :: IO FilePath+getCurrentDirectory = do+ Win32.getCurrentDirectory++{- |If the operating system has a notion of current directories,+@'setCurrentDirectory' dir@ changes the current+directory of the calling process to /dir/.++The operation may fail with:++* 'HardwareFault'+A physical I\/O error has occurred.+@[EIO]@++* 'InvalidArgument'+The operand is not a valid directory name.+@[ENAMETOOLONG, ELOOP]@++* 'isDoesNotExistError' \/ 'NoSuchThing'+The directory does not exist.+@[ENOENT, ENOTDIR]@++* 'isPermissionError' \/ 'PermissionDenied'+The process has insufficient privileges to perform the operation.+@[EACCES]@++* 'UnsupportedOperation'+The operating system has no notion of current directory, or the+current directory cannot be dynamically changed.++* 'InappropriateType'+The path refers to an existing non-directory object.+@[ENOTDIR]@++-}++setCurrentDirectory :: FilePath -> IO ()+setCurrentDirectory path =+ Win32.setCurrentDirectory path++{- |The operation 'doesDirectoryExist' returns 'True' if the argument file+exists and is a directory, and 'False' otherwise.+-}++doesDirectoryExist :: FilePath -> IO Bool+doesDirectoryExist name =+ (withFileStatus "doesDirectoryExist" name $ \st -> isDirectory st)+ `catch` ((\ _ -> return False) :: IOException -> IO Bool)++{- |The operation 'doesFileExist' returns 'True'+if the argument file exists and is not a directory, and 'False' otherwise.+-}++doesFileExist :: FilePath -> IO Bool+doesFileExist name =+ (withFileStatus "doesFileExist" name $ \st -> do b <- isDirectory st; return (not b))+ `catch` ((\ _ -> return False) :: IOException -> IO Bool)++{- |The 'getModificationTime' operation returns the+clock time at which the file or directory was last modified.++The operation may fail with:++* 'isPermissionError' if the user is not permitted to access+ the modification time; or++* 'isDoesNotExistError' if the file or directory does not exist.++-}++getModificationTime :: FilePath -> IO ClockTime+getModificationTime name = do+ -- ToDo: use Win32 API+ withFileStatus "getModificationTime" name $ \ st -> do+ modificationTime st+++withFileStatus :: String -> FilePath -> (Ptr CStat -> IO a) -> IO a+withFileStatus loc name f = do+ modifyIOError (`ioeSetFileName` name) $+ allocaBytes sizeof_stat $ \p ->+ withFilePath (fileNameEndClean name) $ \s -> do+ throwErrnoIfMinus1Retry_ loc (c_stat s p)++withFileOrSymlinkStatus :: String -> FilePath -> (Ptr CStat -> IO a) -> IO a+withFileOrSymlinkStatus loc name f = do+ modifyIOError (`ioeSetFileName` name) $+ allocaBytes sizeof_stat $ \p ->+ withFilePath name $ \s -> do+ throwErrnoIfMinus1Retry_ loc (lstat s p)++modificationTime :: Ptr CStat -> IO ClockTime+modificationTime stat = do+ mtime <- st_mtime stat+ let realToInteger = round . realToFrac :: Real a => a -> Integer+ return (TOD (realToInteger (mtime :: CTime)) 0)++isDirectory :: Ptr CStat -> IO Bool+isDirectory stat = do+ mode <- st_mode stat+ return (s_isdir mode)++fileNameEndClean :: String -> String+fileNameEndClean name = if isDrive name then addTrailingPathSeparator name+ else dropTrailingPathSeparator name++foreign import ccall unsafe "HsDirectory.h __hscore_S_IRUSR" s_IRUSR :: CMode+foreign import ccall unsafe "HsDirectory.h __hscore_S_IWUSR" s_IWUSR :: CMode+foreign import ccall unsafe "HsDirectory.h __hscore_S_IXUSR" s_IXUSR :: CMode+foreign import ccall unsafe "__hscore_S_IFDIR" s_IFDIR :: CMode+++foreign import ccall unsafe "__hscore_long_path_size"+ long_path_size :: Int++{- | Returns the current user's home directory.++The directory returned is expected to be writable by the current user,+but note that it isn't generally considered good practice to store+application-specific data here; use 'getAppUserDataDirectory'+instead.++On Unix, 'getHomeDirectory' returns the value of the @HOME@+environment variable. On Windows, the system is queried for a+suitable path; a typical path might be+@C:/Documents And Settings/user@.++The operation may fail with:++* 'UnsupportedOperation'+The operating system has no notion of home directory.++* 'isDoesNotExistError'+The home directory for the current user does not exist, or+cannot be found.+-}+getHomeDirectory :: IO FilePath+getHomeDirectory =+ modifyIOError ((`ioeSetLocation` "getHomeDirectory")) $ do+ r <- try $ Win32.sHGetFolderPath nullPtr Win32.cSIDL_PROFILE nullPtr 0+ case (r :: Either IOException String) of+ Right s -> return s+ Left _ -> do+ r1 <- try $ Win32.sHGetFolderPath nullPtr Win32.cSIDL_WINDOWS nullPtr 0+ case r1 of+ Right s -> return s+ Left e -> ioError (e :: IOException)++{- | Returns the pathname of a directory in which application-specific+data for the current user can be stored. The result of+'getAppUserDataDirectory' for a given application is specific to+the current user.++The argument should be the name of the application, which will be used+to construct the pathname (so avoid using unusual characters that+might result in an invalid pathname).++Note: the directory may not actually exist, and may need to be created+first. It is expected that the parent directory exists and is+writable.++On Unix, this function returns @$HOME\/.appName@. On Windows, a+typical path might be++> C:/Documents And Settings/user/Application Data/appName++The operation may fail with:++* 'UnsupportedOperation'+The operating system has no notion of application-specific data directory.++* 'isDoesNotExistError'+The home directory for the current user does not exist, or+cannot be found.+-}+getAppUserDataDirectory :: String -> IO FilePath+getAppUserDataDirectory appName = do+ modifyIOError ((`ioeSetLocation` "getAppUserDataDirectory")) $ do+ s <- Win32.sHGetFolderPath nullPtr Win32.cSIDL_APPDATA nullPtr 0+ return (s++'\\':appName)++{- | Returns the current user's document directory.++The directory returned is expected to be writable by the current user,+but note that it isn't generally considered good practice to store+application-specific data here; use 'getAppUserDataDirectory'+instead.++On Unix, 'getUserDocumentsDirectory' returns the value of the @HOME@+environment variable. On Windows, the system is queried for a+suitable path; a typical path might be+@C:\/Documents and Settings\/user\/My Documents@.++The operation may fail with:++* 'UnsupportedOperation'+The operating system has no notion of document directory.++* 'isDoesNotExistError'+The document directory for the current user does not exist, or+cannot be found.+-}+getUserDocumentsDirectory :: IO FilePath+getUserDocumentsDirectory = do+ modifyIOError ((`ioeSetLocation` "getUserDocumentsDirectory")) $ do+ Win32.sHGetFolderPath nullPtr Win32.cSIDL_PERSONAL nullPtr 0++{- | Returns the current directory for temporary files.++On Unix, 'getTemporaryDirectory' returns the value of the @TMPDIR@+environment variable or \"\/tmp\" if the variable isn\'t defined.+On Windows, the function checks for the existence of environment variables in+the following order and uses the first path found:++*+TMP environment variable.++*+TEMP environment variable.++*+USERPROFILE environment variable.++*+The Windows directory++The operation may fail with:++* 'UnsupportedOperation'+The operating system has no notion of temporary directory.++The function doesn\'t verify whether the path exists.+-}+getTemporaryDirectory :: IO FilePath+getTemporaryDirectory = do+ Win32.getTemporaryDirectory++-- ToDo: This should be determined via autoconf (AC_EXEEXT)+-- | Extension for executable files+-- (typically @\"\"@ on Unix and @\"exe\"@ on Windows or OS\/2)+exeExtension :: String+exeExtension = "exe"
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,29264 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 1 1 914 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 1 1 1 1+ , SrcSpan "tests/examples/Directory.hs" 17 1 17 1+ , SrcSpan "tests/examples/Directory.hs" 17 1 17 1+ , SrcSpan "tests/examples/Directory.hs" 72 1 72 1+ , SrcSpan "tests/examples/Directory.hs" 73 1 73 1+ , SrcSpan "tests/examples/Directory.hs" 75 1 75 1+ , SrcSpan "tests/examples/Directory.hs" 76 1 76 1+ , SrcSpan "tests/examples/Directory.hs" 77 1 77 1+ , SrcSpan "tests/examples/Directory.hs" 78 1 78 1+ , SrcSpan "tests/examples/Directory.hs" 79 1 79 1+ , SrcSpan "tests/examples/Directory.hs" 80 1 80 1+ , SrcSpan "tests/examples/Directory.hs" 81 1 81 1+ , SrcSpan "tests/examples/Directory.hs" 83 1 83 1+ , SrcSpan "tests/examples/Directory.hs" 84 1 84 1+ , SrcSpan "tests/examples/Directory.hs" 88 1 88 1+ , SrcSpan "tests/examples/Directory.hs" 90 1 90 1+ , SrcSpan "tests/examples/Directory.hs" 92 1 92 1+ , SrcSpan "tests/examples/Directory.hs" 93 1 93 1+ , SrcSpan "tests/examples/Directory.hs" 94 1 94 1+ , SrcSpan "tests/examples/Directory.hs" 134 1 134 1+ , SrcSpan "tests/examples/Directory.hs" 152 1 152 1+ , SrcSpan "tests/examples/Directory.hs" 153 1 153 1+ , SrcSpan "tests/examples/Directory.hs" 189 1 189 1+ , SrcSpan "tests/examples/Directory.hs" 190 1 190 1+ , SrcSpan "tests/examples/Directory.hs" 205 1 205 1+ , SrcSpan "tests/examples/Directory.hs" 208 1 208 1+ , SrcSpan "tests/examples/Directory.hs" 209 1 209 1+ , SrcSpan "tests/examples/Directory.hs" 257 1 257 1+ , SrcSpan "tests/examples/Directory.hs" 258 1 258 1+ , SrcSpan "tests/examples/Directory.hs" 264 1 264 1+ , SrcSpan "tests/examples/Directory.hs" 267 1 267 1+ , SrcSpan "tests/examples/Directory.hs" 343 1 343 1+ , SrcSpan "tests/examples/Directory.hs" 344 1 344 1+ , SrcSpan "tests/examples/Directory.hs" 350 1 350 1+ , SrcSpan "tests/examples/Directory.hs" 351 1 351 1+ , SrcSpan "tests/examples/Directory.hs" 399 1 399 1+ , SrcSpan "tests/examples/Directory.hs" 400 1 400 1+ , SrcSpan "tests/examples/Directory.hs" 452 1 452 1+ , SrcSpan "tests/examples/Directory.hs" 453 1 453 1+ , SrcSpan "tests/examples/Directory.hs" 509 1 509 1+ , SrcSpan "tests/examples/Directory.hs" 510 1 510 1+ , SrcSpan "tests/examples/Directory.hs" 528 1 528 1+ , SrcSpan "tests/examples/Directory.hs" 529 1 529 1+ , SrcSpan "tests/examples/Directory.hs" 560 1 560 1+ , SrcSpan "tests/examples/Directory.hs" 561 1 561 1+ , SrcSpan "tests/examples/Directory.hs" 568 1 568 1+ , SrcSpan "tests/examples/Directory.hs" 569 1 569 1+ , SrcSpan "tests/examples/Directory.hs" 591 1 591 1+ , SrcSpan "tests/examples/Directory.hs" 592 1 592 1+ , SrcSpan "tests/examples/Directory.hs" 627 1 627 1+ , SrcSpan "tests/examples/Directory.hs" 628 1 628 1+ , SrcSpan "tests/examples/Directory.hs" 672 1 672 1+ , SrcSpan "tests/examples/Directory.hs" 673 1 673 1+ , SrcSpan "tests/examples/Directory.hs" 708 1 708 1+ , SrcSpan "tests/examples/Directory.hs" 709 1 709 1+ , SrcSpan "tests/examples/Directory.hs" 716 1 716 1+ , SrcSpan "tests/examples/Directory.hs" 717 1 717 1+ , SrcSpan "tests/examples/Directory.hs" 725 1 725 1+ , SrcSpan "tests/examples/Directory.hs" 726 1 726 1+ , SrcSpan "tests/examples/Directory.hs" 742 1 742 1+ , SrcSpan "tests/examples/Directory.hs" 743 1 743 1+ , SrcSpan "tests/examples/Directory.hs" 749 1 749 1+ , SrcSpan "tests/examples/Directory.hs" 750 1 750 1+ , SrcSpan "tests/examples/Directory.hs" 756 1 756 1+ , SrcSpan "tests/examples/Directory.hs" 757 1 757 1+ , SrcSpan "tests/examples/Directory.hs" 763 1 763 1+ , SrcSpan "tests/examples/Directory.hs" 764 1 764 1+ , SrcSpan "tests/examples/Directory.hs" 769 1 769 1+ , SrcSpan "tests/examples/Directory.hs" 770 1 770 1+ , SrcSpan "tests/examples/Directory.hs" 774 1 774 1+ , SrcSpan "tests/examples/Directory.hs" 775 1 775 1+ , SrcSpan "tests/examples/Directory.hs" 778 1 778 1+ , SrcSpan "tests/examples/Directory.hs" 779 1 779 1+ , SrcSpan "tests/examples/Directory.hs" 780 1 780 1+ , SrcSpan "tests/examples/Directory.hs" 781 1 781 1+ , SrcSpan "tests/examples/Directory.hs" 784 1 784 1+ , SrcSpan "tests/examples/Directory.hs" 808 1 808 1+ , SrcSpan "tests/examples/Directory.hs" 809 1 809 1+ , SrcSpan "tests/examples/Directory.hs" 847 1 847 1+ , SrcSpan "tests/examples/Directory.hs" 848 1 848 1+ , SrcSpan "tests/examples/Directory.hs" 874 1 874 1+ , SrcSpan "tests/examples/Directory.hs" 875 1 875 1+ , SrcSpan "tests/examples/Directory.hs" 905 1 905 1+ , SrcSpan "tests/examples/Directory.hs" 906 1 906 1+ , SrcSpan "tests/examples/Directory.hs" 912 1 912 1+ , SrcSpan "tests/examples/Directory.hs" 913 1 913 1+ , SrcSpan "tests/examples/Directory.hs" 914 1 914 1+ , SrcSpan "tests/examples/Directory.hs" 914 1 914 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 17 1 70 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 17 1 17 7+ , SrcSpan "tests/examples/Directory.hs" 70 6 70 11+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 17 8 17 24+ , srcInfoPoints = []+ }+ "System.Directory")+ Nothing+ (Just+ (ExportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 18 4 70 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 18 4 18 5+ , SrcSpan "tests/examples/Directory.hs" 23 5 23 6+ , SrcSpan "tests/examples/Directory.hs" 24 5 24 6+ , SrcSpan "tests/examples/Directory.hs" 25 5 25 6+ , SrcSpan "tests/examples/Directory.hs" 26 5 26 6+ , SrcSpan "tests/examples/Directory.hs" 28 5 28 6+ , SrcSpan "tests/examples/Directory.hs" 29 5 29 6+ , SrcSpan "tests/examples/Directory.hs" 30 5 30 6+ , SrcSpan "tests/examples/Directory.hs" 33 5 33 6+ , SrcSpan "tests/examples/Directory.hs" 34 5 34 6+ , SrcSpan "tests/examples/Directory.hs" 35 5 35 6+ , SrcSpan "tests/examples/Directory.hs" 36 5 36 6+ , SrcSpan "tests/examples/Directory.hs" 39 5 39 6+ , SrcSpan "tests/examples/Directory.hs" 40 5 40 6+ , SrcSpan "tests/examples/Directory.hs" 41 5 41 6+ , SrcSpan "tests/examples/Directory.hs" 43 5 43 6+ , SrcSpan "tests/examples/Directory.hs" 44 5 44 6+ , SrcSpan "tests/examples/Directory.hs" 45 5 45 6+ , SrcSpan "tests/examples/Directory.hs" 48 5 48 6+ , SrcSpan "tests/examples/Directory.hs" 49 5 49 6+ , SrcSpan "tests/examples/Directory.hs" 55 5 55 6+ , SrcSpan "tests/examples/Directory.hs" 63 5 63 6+ , SrcSpan "tests/examples/Directory.hs" 64 5 64 6+ , SrcSpan "tests/examples/Directory.hs" 65 5 65 6+ , SrcSpan "tests/examples/Directory.hs" 69 5 69 6+ , SrcSpan "tests/examples/Directory.hs" 70 4 70 5+ ]+ }+ [ EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 22 7 22 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 22 7 22 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 22 7 22 22+ , srcInfoPoints = []+ }+ "createDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 23 7 23 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 23 7 23 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 23 7 23 31+ , srcInfoPoints = []+ }+ "createDirectoryIfMissing"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 24 7 24 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 24 7 24 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 24 7 24 22+ , srcInfoPoints = []+ }+ "removeDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 25 7 25 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 25 7 25 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 25 7 25 31+ , srcInfoPoints = []+ }+ "removeDirectoryRecursive"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 26 7 26 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 26 7 26 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 26 7 26 22+ , srcInfoPoints = []+ }+ "renameDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 28 7 28 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 28 7 28 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 28 7 28 27+ , srcInfoPoints = []+ }+ "getDirectoryContents"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 29 7 29 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 29 7 29 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 29 7 29 26+ , srcInfoPoints = []+ }+ "getCurrentDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 30 7 30 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 30 7 30 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 30 7 30 26+ , srcInfoPoints = []+ }+ "setCurrentDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 33 7 33 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 33 7 33 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 33 7 33 23+ , srcInfoPoints = []+ }+ "getHomeDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 34 7 34 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 34 7 34 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 34 7 34 30+ , srcInfoPoints = []+ }+ "getAppUserDataDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 35 7 35 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 35 7 35 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 35 7 35 32+ , srcInfoPoints = []+ }+ "getUserDocumentsDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 36 7 36 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 36 7 36 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 36 7 36 28+ , srcInfoPoints = []+ }+ "getTemporaryDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 39 7 39 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 39 7 39 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 39 7 39 17+ , srcInfoPoints = []+ }+ "removeFile"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 40 7 40 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 40 7 40 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 40 7 40 17+ , srcInfoPoints = []+ }+ "renameFile"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 41 7 41 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 41 7 41 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 41 7 41 15+ , srcInfoPoints = []+ }+ "copyFile"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 43 7 43 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 43 7 43 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 43 7 43 23+ , srcInfoPoints = []+ }+ "canonicalizePath"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 44 7 44 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 44 7 44 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 44 7 44 37+ , srcInfoPoints = []+ }+ "makeRelativeToCurrentDirectory"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 45 7 45 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 45 7 45 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 45 7 45 21+ , srcInfoPoints = []+ }+ "findExecutable"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 48 7 48 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 48 7 48 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 48 7 48 20+ , srcInfoPoints = []+ }+ "doesFileExist"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 49 7 49 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 49 7 49 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 49 7 49 25+ , srcInfoPoints = []+ }+ "doesDirectoryExist"))+ , EThingWith+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 55 7 61 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 55 18 55 19+ , SrcSpan "tests/examples/Directory.hs" 56 16 56 17+ , SrcSpan "tests/examples/Directory.hs" 57 13 57 14+ , SrcSpan "tests/examples/Directory.hs" 58 13 58 14+ , SrcSpan "tests/examples/Directory.hs" 59 15 59 16+ , SrcSpan "tests/examples/Directory.hs" 61 7 61 8+ ]+ }+ (NoWildcard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "" (-1) (-1) (-1) (-1)+ , srcInfoPoints = []+ })+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 55 7 55 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 55 7 55 18+ , srcInfoPoints = []+ }+ "Permissions"))+ [ ConName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 56 5 56 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 56 5 56 16+ , srcInfoPoints = []+ }+ "Permissions")+ , VarName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 57 5 57 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 57 5 57 13+ , srcInfoPoints = []+ }+ "readable")+ , VarName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 58 5 58 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 58 5 58 13+ , srcInfoPoints = []+ }+ "writable")+ , VarName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 59 5 59 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 59 5 59 15+ , srcInfoPoints = []+ }+ "executable")+ , VarName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 60 5 60 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 60 5 60 15+ , srcInfoPoints = []+ }+ "searchable")+ ]+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 63 7 63 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 63 7 63 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 63 7 63 21+ , srcInfoPoints = []+ }+ "getPermissions"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 64 7 64 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 64 7 64 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 64 7 64 21+ , srcInfoPoints = []+ }+ "setPermissions"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 65 7 65 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 65 7 65 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 65 7 65 22+ , srcInfoPoints = []+ }+ "copyPermissions"))+ , EVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 69 7 69 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 69 7 69 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 69 7 69 26+ , srcInfoPoints = []+ }+ "getModificationTime"))+ ]))))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 1 1 1 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 1 1 1 13+ , SrcSpan "tests/examples/Directory.hs" 1 38 1 39+ , SrcSpan "tests/examples/Directory.hs" 1 65 1 68+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 1 14 1 38+ , srcInfoPoints = []+ }+ "ForeignFunctionInterface"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 1 40 1 64+ , srcInfoPoints = []+ }+ "NondecreasingIndentation"+ ]+ ]+ [ ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 72 1 72 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 72 1 72 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 72 8 72 15+ , srcInfoPoints = []+ }+ "Prelude"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 72 16 72 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 72 16 72 22+ , SrcSpan "tests/examples/Directory.hs" 72 23 72 24+ , SrcSpan "tests/examples/Directory.hs" 72 31 72 32+ ]+ }+ True+ [ IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 72 25 72 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 72 25 72 30+ , srcInfoPoints = []+ }+ "catch")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 73 1 73 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 73 1 73 7+ , SrcSpan "tests/examples/Directory.hs" 73 8 73 17+ ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 73 18 73 25+ , srcInfoPoints = []+ }+ "Prelude"+ , importQualified = True+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 75 1 75 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 75 1 75 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 75 8 75 21+ , srcInfoPoints = []+ }+ "Control.Monad"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 75 22 75 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 75 22 75 23+ , SrcSpan "tests/examples/Directory.hs" 75 28 75 29+ ]+ }+ False+ [ IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 75 23 75 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 75 23 75 28+ , srcInfoPoints = []+ }+ "guard")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 76 1 76 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 76 1 76 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 76 8 76 26+ , srcInfoPoints = []+ }+ "System.Environment"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 76 32 76 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 76 32 76 33+ , SrcSpan "tests/examples/Directory.hs" 76 41 76 42+ ]+ }+ False+ [ IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 76 34 76 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 76 34 76 40+ , srcInfoPoints = []+ }+ "getEnv")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 77 1 77 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 77 1 77 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 77 8 77 23+ , srcInfoPoints = []+ }+ "System.FilePath"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 78 1 78 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 78 1 78 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 78 8 78 17+ , srcInfoPoints = []+ }+ "System.IO"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 79 1 79 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 79 1 79 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 79 8 79 23+ , srcInfoPoints = []+ }+ "System.IO.Error"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 79 24 79 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 79 24 79 30+ , SrcSpan "tests/examples/Directory.hs" 79 31 79 32+ , SrcSpan "tests/examples/Directory.hs" 79 38 79 39+ , SrcSpan "tests/examples/Directory.hs" 79 44 79 45+ ]+ }+ True+ [ IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 79 33 79 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 79 33 79 38+ , srcInfoPoints = []+ }+ "catch")+ , IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 79 40 79 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 79 40 79 43+ , srcInfoPoints = []+ }+ "try")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 80 1 80 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 80 1 80 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 80 8 80 21+ , srcInfoPoints = []+ }+ "Control.Monad"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 80 32 80 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 80 32 80 33+ , SrcSpan "tests/examples/Directory.hs" 80 38 80 39+ , SrcSpan "tests/examples/Directory.hs" 80 47 80 48+ ]+ }+ False+ [ IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 80 34 80 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 80 34 80 38+ , srcInfoPoints = []+ }+ "when")+ , IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 80 40 80 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 80 40 80 46+ , srcInfoPoints = []+ }+ "unless")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 81 1 81 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 81 1 81 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 81 8 81 30+ , srcInfoPoints = []+ }+ "Control.Exception.Base"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 83 1 83 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 83 1 83 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 83 8 83 15+ , srcInfoPoints = []+ }+ "Foreign"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 84 1 84 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 84 1 84 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 84 8 84 17+ , srcInfoPoints = []+ }+ "Foreign.C"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 88 1 88 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 88 1 88 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 88 8 88 19+ , srcInfoPoints = []+ }+ "System.Time"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 88 32 88 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 88 32 88 33+ , SrcSpan "tests/examples/Directory.hs" 88 48 88 49+ ]+ }+ False+ [ IThingAll+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 88 34 88 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 88 43 88 44+ , SrcSpan "tests/examples/Directory.hs" 88 44 88 46+ , SrcSpan "tests/examples/Directory.hs" 88 46 88 47+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 88 34 88 43+ , srcInfoPoints = []+ }+ "ClockTime")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 1 90 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 90 1 90 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 8 90 24+ , srcInfoPoints = []+ }+ "GHC.IO.Exception"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 25 90 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 90 25 90 26+ , SrcSpan "tests/examples/Directory.hs" 90 42 90 43+ , SrcSpan "tests/examples/Directory.hs" 90 59 90 60+ , SrcSpan "tests/examples/Directory.hs" 90 73 90 74+ ]+ }+ False+ [ IThingAll+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 27 90 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 90 38 90 39+ , SrcSpan "tests/examples/Directory.hs" 90 39 90 41+ , SrcSpan "tests/examples/Directory.hs" 90 41 90 42+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 27 90 38+ , srcInfoPoints = []+ }+ "IOException")+ , IThingAll+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 44 90 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 90 55 90 56+ , SrcSpan "tests/examples/Directory.hs" 90 56 90 58+ , SrcSpan "tests/examples/Directory.hs" 90 58 90 59+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 44 90 55+ , srcInfoPoints = []+ }+ "IOErrorType")+ , IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 61 90 72+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 90 61 90 72+ , srcInfoPoints = []+ }+ "ioException")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 92 1 92 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 92 1 92 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 92 8 92 26+ , srcInfoPoints = []+ }+ "System.Posix.Types"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 93 1 93 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 93 1 93 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 93 8 93 30+ , srcInfoPoints = []+ }+ "System.Posix.Internals"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 94 1 94 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 94 1 94 7+ , SrcSpan "tests/examples/Directory.hs" 94 8 94 17+ , SrcSpan "tests/examples/Directory.hs" 94 31 94 33+ ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 94 18 94 30+ , srcInfoPoints = []+ }+ "System.Win32"+ , importQualified = True+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs =+ Just+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 94 34 94 39+ , srcInfoPoints = []+ }+ "Win32")+ , importSpecs = Nothing+ }+ ]+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 134 1 138 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 135 2 135 3 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 134 1 134 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 134 6 134 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 134 6 134 17+ , srcInfoPoints = []+ }+ "Permissions"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 135 4 138 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 135 16 135 17+ , SrcSpan "tests/examples/Directory.hs" 138 4 138 5+ ]+ }+ Nothing+ Nothing+ (RecDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 135 4 138 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 135 16 135 17+ , SrcSpan "tests/examples/Directory.hs" 138 4 138 5+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 135 4 135 15+ , srcInfoPoints = []+ }+ "Permissions")+ [ FieldDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 136 5 137 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 136 13 136 14+ , SrcSpan "tests/examples/Directory.hs" 136 25 136 26+ , SrcSpan "tests/examples/Directory.hs" 137 15 137 16+ , SrcSpan "tests/examples/Directory.hs" 137 28 137 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 136 5 136 13+ , srcInfoPoints = []+ }+ "readable"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 136 17 136 25+ , srcInfoPoints = []+ }+ "writable"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 137 5 137 15+ , srcInfoPoints = []+ }+ "executable"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 137 17 137 27+ , srcInfoPoints = []+ }+ "searchable"+ ]+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 137 31 137 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 137 31 137 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 137 31 137 35+ , srcInfoPoints = []+ }+ "Bool")))+ ])+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 6 138 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 138 6 138 14+ , SrcSpan "tests/examples/Directory.hs" 138 15 138 16+ , SrcSpan "tests/examples/Directory.hs" 138 18 138 19+ , SrcSpan "tests/examples/Directory.hs" 138 23 138 24+ , SrcSpan "tests/examples/Directory.hs" 138 29 138 30+ , SrcSpan "tests/examples/Directory.hs" 138 35 138 36+ ]+ }+ Nothing+ [ IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 16 138 18+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 16 138 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 16 138 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 16 138 18+ , srcInfoPoints = []+ }+ "Eq")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 20 138 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 20 138 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 20 138 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 20 138 23+ , srcInfoPoints = []+ }+ "Ord")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 25 138 29+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 25 138 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 25 138 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 25 138 29+ , srcInfoPoints = []+ }+ "Read")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 31 138 35+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 31 138 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 31 138 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 138 31 138 35+ , srcInfoPoints = []+ }+ "Show")))+ ]+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 1 152 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 152 16 152 18 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 1 152 15+ , srcInfoPoints = []+ }+ "getPermissions"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 19 152 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 152 28 152 30 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 19 152 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 19 152 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 19 152 27+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 31 152 45+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 31 152 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 31 152 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 31 152 33+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 34 152 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 34 152 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 152 34 152 45+ , srcInfoPoints = []+ }+ "Permissions")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 153 1 175 5+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 153 1 175 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 153 1 153 15+ , srcInfoPoints = []+ }+ "getPermissions")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 153 16 153 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 153 16 153 20+ , srcInfoPoints = []+ }+ "name")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 153 21 175 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 153 21 153 22 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 153 23 175 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 153 23 153 25+ , SrcSpan "tests/examples/Directory.hs" 154 3 154 3+ , SrcSpan "tests/examples/Directory.hs" 189 1 189 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 154 3 175 5+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 154 3 175 5+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 154 3 154 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 3 154 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 3 154 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 3 154 15+ , srcInfoPoints = []+ }+ "withFilePath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 16 154 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 16 154 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 16 154 20+ , srcInfoPoints = []+ }+ "name"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 154 21 154 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 21 154 22+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 21 154 22+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 154 23 175 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 154 23 154 24+ , SrcSpan "tests/examples/Directory.hs" 154 26 154 28+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 24 154 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 24 154 25+ , srcInfoPoints = []+ }+ "s")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 154 29 175 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 154 29 154 31+ , SrcSpan "tests/examples/Directory.hs" 161 3 161 3+ , SrcSpan "tests/examples/Directory.hs" 161 3 161 3+ , SrcSpan "tests/examples/Directory.hs" 189 1 189 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 161 3 175 5+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 161 3 175 5+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 161 3 161 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 3 161 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 3 161 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 161+ 3+ 161+ 14+ , srcInfoPoints = []+ }+ "allocaBytes")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 15 161 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 15 161 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 161+ 15+ 161+ 26+ , srcInfoPoints = []+ }+ "sizeof_stat"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 161 27 161 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 27 161 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 27 161 28+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 161 29 175 5+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 161 29 161 30+ , SrcSpan+ "tests/examples/Directory.hs" 161 38 161 40+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 31 161 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 161+ 31+ 161+ 37+ , srcInfoPoints = []+ }+ "p_stat")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 161 41 175 5+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 161 41 161 43+ , SrcSpan+ "tests/examples/Directory.hs" 162 3 162 3+ , SrcSpan+ "tests/examples/Directory.hs" 162 3 162 3+ , SrcSpan+ "tests/examples/Directory.hs" 163 3 163 3+ , SrcSpan+ "tests/examples/Directory.hs" 164 3 164 3+ , SrcSpan+ "tests/examples/Directory.hs" 165 3 165 3+ , SrcSpan+ "tests/examples/Directory.hs" 166 3 166 3+ , SrcSpan+ "tests/examples/Directory.hs" 167 3 167 3+ , SrcSpan+ "tests/examples/Directory.hs" 168 3 168 3+ , SrcSpan+ "tests/examples/Directory.hs" 189 1 189 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 162 3 162 57+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 3+ 162+ 57+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 3+ 162+ 39+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 3+ 162+ 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 3+ 162+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 3+ 162+ 22+ , srcInfoPoints = []+ }+ "throwErrnoIfMinus1_")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 23+ 162+ 39+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 23+ 162+ 39+ , srcInfoPoints = []+ }+ "getPermissions"+ "getPermissions")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 40+ 162+ 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 40+ 162+ 41+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 40+ 162+ 41+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 42+ 162+ 57+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 42+ 162+ 50+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 42+ 162+ 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 42+ 162+ 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 42+ 162+ 48+ , srcInfoPoints = []+ }+ "c_stat")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 49+ 162+ 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 49+ 162+ 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 49+ 162+ 50+ , srcInfoPoints = []+ }+ "s"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 51+ 162+ 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 51+ 162+ 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 162+ 51+ 162+ 57+ , srcInfoPoints = []+ }+ "p_stat")))))+ , Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 163 3 163 25+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 8+ 163+ 10+ ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 3+ 163+ 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 3+ 163+ 7+ , srcInfoPoints = []+ }+ "mode"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 11+ 163+ 25+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 11+ 163+ 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 11+ 163+ 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 11+ 163+ 18+ , srcInfoPoints = []+ }+ "st_mode")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 19+ 163+ 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 19+ 163+ 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 163+ 19+ 163+ 25+ , srcInfoPoints = []+ }+ "p_stat"))))+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 164 3 164 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 3+ 164+ 6+ ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 7+ 164+ 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 7+ 164+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 165+ 3+ 165+ 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 7+ 164+ 36+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 7+ 164+ 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 7+ 164+ 15+ , srcInfoPoints = []+ }+ "usr_read"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 18+ 164+ 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 18+ 164+ 19+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 20+ 164+ 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 20+ 164+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 20+ 164+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 20+ 164+ 24+ , srcInfoPoints = []+ }+ "mode")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 25+ 164+ 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 25+ 164+ 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 25+ 164+ 28+ , srcInfoPoints = []+ }+ ".&.")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 29+ 164+ 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 29+ 164+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 164+ 29+ 164+ 36+ , srcInfoPoints = []+ }+ "s_IRUSR")))))+ Nothing+ ])+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 165 3 165 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 3+ 165+ 6+ ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 7+ 165+ 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 7+ 165+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 166+ 3+ 166+ 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 7+ 165+ 36+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 7+ 165+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 7+ 165+ 16+ , srcInfoPoints = []+ }+ "usr_write"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 18+ 165+ 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 18+ 165+ 19+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 20+ 165+ 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 20+ 165+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 20+ 165+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 20+ 165+ 24+ , srcInfoPoints = []+ }+ "mode")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 25+ 165+ 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 25+ 165+ 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 25+ 165+ 28+ , srcInfoPoints = []+ }+ ".&.")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 29+ 165+ 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 29+ 165+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 165+ 29+ 165+ 36+ , srcInfoPoints = []+ }+ "s_IWUSR")))))+ Nothing+ ])+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 166 3 166 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 3+ 166+ 6+ ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 7+ 166+ 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 7+ 166+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 167+ 3+ 167+ 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 7+ 166+ 36+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 7+ 166+ 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 7+ 166+ 15+ , srcInfoPoints = []+ }+ "usr_exec"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 18+ 166+ 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 18+ 166+ 19+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 20+ 166+ 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 20+ 166+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 20+ 166+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 20+ 166+ 24+ , srcInfoPoints = []+ }+ "mode")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 25+ 166+ 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 25+ 166+ 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 25+ 166+ 28+ , srcInfoPoints = []+ }+ ".&.")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 29+ 166+ 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 29+ 166+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 166+ 29+ 166+ 36+ , srcInfoPoints = []+ }+ "s_IXUSR")))))+ Nothing+ ])+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 167 3 167 32+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 3+ 167+ 6+ ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 7+ 167+ 32+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 7+ 167+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 168+ 3+ 168+ 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 7+ 167+ 32+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 7+ 167+ 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 7+ 167+ 13+ , srcInfoPoints = []+ }+ "is_dir"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 14+ 167+ 32+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 14+ 167+ 15+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 16+ 167+ 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 16+ 167+ 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 16+ 167+ 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 16+ 167+ 20+ , srcInfoPoints = []+ }+ "mode")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 21+ 167+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 21+ 167+ 24+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 21+ 167+ 24+ , srcInfoPoints = []+ }+ ".&.")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 25+ 167+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 25+ 167+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 167+ 25+ 167+ 32+ , srcInfoPoints = []+ }+ "s_IFDIR")))))+ Nothing+ ])+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 168 3 175 5+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 168+ 3+ 175+ 5+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 168+ 3+ 168+ 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 168+ 3+ 168+ 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 168+ 3+ 168+ 9+ , srcInfoPoints = []+ }+ "return")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 168+ 10+ 175+ 5+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 168+ 10+ 168+ 11+ , SrcSpan+ "tests/examples/Directory.hs"+ 175+ 4+ 175+ 5+ ]+ }+ (RecConstr+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 169+ 5+ 174+ 6+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 169+ 17+ 169+ 18+ , SrcSpan+ "tests/examples/Directory.hs"+ 170+ 34+ 170+ 35+ , SrcSpan+ "tests/examples/Directory.hs"+ 171+ 34+ 171+ 35+ , SrcSpan+ "tests/examples/Directory.hs"+ 172+ 48+ 172+ 49+ , SrcSpan+ "tests/examples/Directory.hs"+ 174+ 5+ 174+ 6+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 169+ 5+ 169+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 169+ 5+ 169+ 16+ , srcInfoPoints = []+ }+ "Permissions"))+ [ FieldUpdate+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 7+ 170+ 34+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 18+ 170+ 19+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 7+ 170+ 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 7+ 170+ 15+ , srcInfoPoints = []+ }+ "readable"))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 20+ 170+ 34+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 20+ 170+ 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 20+ 170+ 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 20+ 170+ 28+ , srcInfoPoints = []+ }+ "usr_read")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 30+ 170+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 30+ 170+ 32+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 30+ 170+ 32+ , srcInfoPoints = []+ }+ "/=")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 33+ 170+ 34+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 170+ 33+ 170+ 34+ , srcInfoPoints = []+ }+ 0+ "0")))+ , FieldUpdate+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 7+ 171+ 34+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 18+ 171+ 19+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 7+ 171+ 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 7+ 171+ 15+ , srcInfoPoints = []+ }+ "writable"))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 20+ 171+ 34+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 20+ 171+ 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 20+ 171+ 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 20+ 171+ 29+ , srcInfoPoints = []+ }+ "usr_write")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 30+ 171+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 30+ 171+ 32+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 30+ 171+ 32+ , srcInfoPoints = []+ }+ "/=")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 33+ 171+ 34+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 171+ 33+ 171+ 34+ , srcInfoPoints = []+ }+ 0+ "0")))+ , FieldUpdate+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 7+ 172+ 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 18+ 172+ 19+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 7+ 172+ 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 7+ 172+ 17+ , srcInfoPoints = []+ }+ "executable"))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 20+ 172+ 48+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 20+ 172+ 31+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 20+ 172+ 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 20+ 172+ 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 20+ 172+ 26+ , srcInfoPoints = []+ }+ "is_dir")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 27+ 172+ 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 27+ 172+ 29+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 27+ 172+ 29+ , srcInfoPoints = []+ }+ "==")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 30+ 172+ 31+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 30+ 172+ 31+ , srcInfoPoints = []+ }+ 0+ "0")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 32+ 172+ 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 32+ 172+ 34+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 32+ 172+ 34+ , srcInfoPoints = []+ }+ "&&")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 35+ 172+ 48+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 35+ 172+ 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 35+ 172+ 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 35+ 172+ 43+ , srcInfoPoints = []+ }+ "usr_exec")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 44+ 172+ 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 44+ 172+ 46+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 44+ 172+ 46+ , srcInfoPoints = []+ }+ "/=")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 47+ 172+ 48+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 172+ 47+ 172+ 48+ , srcInfoPoints = []+ }+ 0+ "0"))))+ , FieldUpdate+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 7+ 173+ 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 18+ 173+ 19+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 7+ 173+ 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 7+ 173+ 17+ , srcInfoPoints = []+ }+ "searchable"))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 20+ 173+ 48+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 20+ 173+ 31+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 20+ 173+ 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 20+ 173+ 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 20+ 173+ 26+ , srcInfoPoints = []+ }+ "is_dir")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 27+ 173+ 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 27+ 173+ 29+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 27+ 173+ 29+ , srcInfoPoints = []+ }+ "/=")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 30+ 173+ 31+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 30+ 173+ 31+ , srcInfoPoints = []+ }+ 0+ "0")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 32+ 173+ 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 32+ 173+ 34+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 32+ 173+ 34+ , srcInfoPoints = []+ }+ "&&")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 35+ 173+ 48+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 35+ 173+ 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 35+ 173+ 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 35+ 173+ 43+ , srcInfoPoints = []+ }+ "usr_exec")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 44+ 173+ 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 44+ 173+ 46+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 44+ 173+ 46+ , srcInfoPoints = []+ }+ "/=")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 47+ 173+ 48+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 173+ 47+ 173+ 48+ , srcInfoPoints = []+ }+ 0+ "0"))))+ ])))+ ])))+ ])))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 1 189 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 189 16 189 18 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 1 189 15+ , srcInfoPoints = []+ }+ "setPermissions"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 19 189 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 189 28 189 30 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 19 189 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 19 189 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 19 189 27+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 31 189 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 189 43 189 45 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 31 189 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 31 189 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 31 189 42+ , srcInfoPoints = []+ }+ "Permissions")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 46 189 51+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 46 189 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 46 189 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 46 189 48+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 49 189 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 189 49 189 50+ , SrcSpan "tests/examples/Directory.hs" 189 50 189 51+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 49 189 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 189 49 189 50+ , SrcSpan "tests/examples/Directory.hs" 189 50 189 51+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 189 49 189 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 189 49 189 50+ , SrcSpan "tests/examples/Directory.hs" 189 50 189 51+ ]+ }))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 1 203 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 200 2 200 7 ]+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 1 203 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 200 2 200 7 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 1 190 15+ , srcInfoPoints = []+ }+ "setPermissions")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 16 190 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 16 190 20+ , srcInfoPoints = []+ }+ "name")+ , PParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 21 190 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 190 21 190 22+ , SrcSpan "tests/examples/Directory.hs" 190 41 190 42+ ]+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 22 190 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 22 190 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 22 190 33+ , srcInfoPoints = []+ }+ "Permissions"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 34 190 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 34 190 35+ , srcInfoPoints = []+ }+ "r")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 36 190 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 36 190 37+ , srcInfoPoints = []+ }+ "w")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 38 190 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 38 190 39+ , srcInfoPoints = []+ }+ "e")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 40 190 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 40 190 41+ , srcInfoPoints = []+ }+ "s")+ ])+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 43 199 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 190 43 190 44 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 190 45 199 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 190 45 190 47+ , SrcSpan "tests/examples/Directory.hs" 191 3 191 3+ , SrcSpan "tests/examples/Directory.hs" 200 2 200 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 191 3 199 28+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 191 3 199 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 191 3 191 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 3 191 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 3 191 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 3 191 14+ , srcInfoPoints = []+ }+ "allocaBytes")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 15 191 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 15 191 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 15 191 26+ , srcInfoPoints = []+ }+ "sizeof_stat"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 191 27 191 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 27 191 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 27 191 28+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 191 29 199 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 191 29 191 30+ , SrcSpan "tests/examples/Directory.hs" 191 38 191 40+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 31 191 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 31 191 37+ , srcInfoPoints = []+ }+ "p_stat")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 191 41 199 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 191 41 191 43+ , SrcSpan "tests/examples/Directory.hs" 192 3 192 3+ , SrcSpan "tests/examples/Directory.hs" 192 3 192 3+ , SrcSpan "tests/examples/Directory.hs" 200 2 200 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 192 3 199 28+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 192 3 199 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 192 3 192 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 3 192 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 3 192 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 192+ 3+ 192+ 15+ , srcInfoPoints = []+ }+ "withFilePath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 16 192 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 16 192 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 192+ 16+ 192+ 20+ , srcInfoPoints = []+ }+ "name"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 192 21 192 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 21 192 22+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 21 192 22+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 192 23 199 28+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 192 23 192 24+ , SrcSpan+ "tests/examples/Directory.hs" 192 31 192 33+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 24 192 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 192+ 24+ 192+ 30+ , srcInfoPoints = []+ }+ "p_name")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 192 34 199 28+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 192 34 192 36+ , SrcSpan+ "tests/examples/Directory.hs" 193 5 193 5+ , SrcSpan+ "tests/examples/Directory.hs" 200 2 200 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 193 5 199 28+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 5+ 199+ 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 5+ 193+ 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 5+ 193+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 5+ 193+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 5+ 193+ 24+ , srcInfoPoints = []+ }+ "throwErrnoIfMinus1_")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 25+ 193+ 41+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 25+ 193+ 41+ , srcInfoPoints = []+ }+ "setPermissions"+ "setPermissions")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 42+ 193+ 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 42+ 193+ 43+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 42+ 193+ 43+ , srcInfoPoints = []+ }+ "$")))+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 44+ 199+ 28+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 193+ 44+ 193+ 46+ , SrcSpan+ "tests/examples/Directory.hs"+ 194+ 7+ 194+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 195+ 7+ 195+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 196+ 7+ 196+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 197+ 7+ 197+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 198+ 7+ 198+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 7+ , SrcSpan+ "tests/examples/Directory.hs"+ 200+ 2+ 200+ 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 7+ 194+ 27+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 7+ 194+ 27+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 7+ 194+ 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 7+ 194+ 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 7+ 194+ 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 7+ 194+ 13+ , srcInfoPoints = []+ }+ "c_stat")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 14+ 194+ 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 14+ 194+ 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 14+ 194+ 20+ , srcInfoPoints = []+ }+ "p_name"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 21+ 194+ 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 21+ 194+ 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 194+ 21+ 194+ 27+ , srcInfoPoints = []+ }+ "p_stat"))))+ , Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 7+ 195+ 29+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 12+ 195+ 14+ ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 7+ 195+ 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 7+ 195+ 11+ , srcInfoPoints = []+ }+ "mode"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 15+ 195+ 29+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 15+ 195+ 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 15+ 195+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 15+ 195+ 22+ , srcInfoPoints = []+ }+ "st_mode")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 23+ 195+ 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 23+ 195+ 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 195+ 23+ 195+ 29+ , srcInfoPoints = []+ }+ "p_stat"))))+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 7+ 196+ 43+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 7+ 196+ 10+ ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 11+ 196+ 43+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 11+ 196+ 11+ , SrcSpan+ "tests/examples/Directory.hs"+ 197+ 7+ 197+ 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 11+ 196+ 43+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 11+ 196+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 11+ 196+ 16+ , srcInfoPoints = []+ }+ "mode1"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 17+ 196+ 43+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 17+ 196+ 18+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 19+ 196+ 43+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 19+ 196+ 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 19+ 196+ 30+ , srcInfoPoints =+ []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 19+ 196+ 28+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 19+ 196+ 28+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 19+ 196+ 28+ , srcInfoPoints =+ []+ }+ "modifyBit")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 29+ 196+ 30+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 29+ 196+ 30+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 29+ 196+ 30+ , srcInfoPoints =+ []+ }+ "r"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 31+ 196+ 35+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 31+ 196+ 35+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 31+ 196+ 35+ , srcInfoPoints =+ []+ }+ "mode"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 36+ 196+ 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 36+ 196+ 43+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 196+ 36+ 196+ 43+ , srcInfoPoints =+ []+ }+ "s_IRUSR")))))+ Nothing+ ])+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 7+ 197+ 44+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 7+ 197+ 10+ ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 11+ 197+ 44+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 11+ 197+ 11+ , SrcSpan+ "tests/examples/Directory.hs"+ 198+ 7+ 198+ 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 11+ 197+ 44+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 11+ 197+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 11+ 197+ 16+ , srcInfoPoints = []+ }+ "mode2"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 17+ 197+ 44+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 17+ 197+ 18+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 19+ 197+ 44+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 19+ 197+ 36+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 19+ 197+ 30+ , srcInfoPoints =+ []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 19+ 197+ 28+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 19+ 197+ 28+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 19+ 197+ 28+ , srcInfoPoints =+ []+ }+ "modifyBit")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 29+ 197+ 30+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 29+ 197+ 30+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 29+ 197+ 30+ , srcInfoPoints =+ []+ }+ "w"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 31+ 197+ 36+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 31+ 197+ 36+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 31+ 197+ 36+ , srcInfoPoints =+ []+ }+ "mode1"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 37+ 197+ 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 37+ 197+ 44+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 197+ 37+ 197+ 44+ , srcInfoPoints =+ []+ }+ "s_IWUSR")))))+ Nothing+ ])+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 7+ 198+ 51+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 7+ 198+ 10+ ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 11+ 198+ 51+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 11+ 198+ 11+ , SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 11+ 198+ 51+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 11+ 198+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 11+ 198+ 16+ , srcInfoPoints = []+ }+ "mode3"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 17+ 198+ 51+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 17+ 198+ 18+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 19+ 198+ 51+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 19+ 198+ 43+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 19+ 198+ 37+ , srcInfoPoints =+ []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 19+ 198+ 28+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 19+ 198+ 28+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 19+ 198+ 28+ , srcInfoPoints =+ []+ }+ "modifyBit")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 29+ 198+ 37+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 29+ 198+ 30+ , SrcSpan+ "tests/examples/Directory.hs"+ 198+ 36+ 198+ 37+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 30+ 198+ 36+ , srcInfoPoints =+ []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 30+ 198+ 31+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 30+ 198+ 31+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 30+ 198+ 31+ , srcInfoPoints =+ []+ }+ "e")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 32+ 198+ 34+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 32+ 198+ 34+ , srcInfoPoints =+ []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 32+ 198+ 34+ , srcInfoPoints =+ []+ }+ "||")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 35+ 198+ 36+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 35+ 198+ 36+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 35+ 198+ 36+ , srcInfoPoints =+ []+ }+ "s"))))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 38+ 198+ 43+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 38+ 198+ 43+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 38+ 198+ 43+ , srcInfoPoints =+ []+ }+ "mode2"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 44+ 198+ 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 44+ 198+ 51+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 198+ 44+ 198+ 51+ , srcInfoPoints =+ []+ }+ "s_IXUSR")))))+ Nothing+ ])+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 22+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 7+ 199+ 15+ , srcInfoPoints = []+ }+ "c_wchmod")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 16+ 199+ 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 16+ 199+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 16+ 199+ 22+ , srcInfoPoints = []+ }+ "p_name"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 23+ 199+ 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 23+ 199+ 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 199+ 23+ 199+ 28+ , srcInfoPoints = []+ }+ "mode3"))))+ ]))+ ])))+ ])))+ ]))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 201 4 203 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 201 4 201 4+ , SrcSpan "tests/examples/Directory.hs" 202 4 202 4+ , SrcSpan "tests/examples/Directory.hs" 203 4 203 4+ , SrcSpan "tests/examples/Directory.hs" 205 1 205 0+ ]+ }+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 201 4 201 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 201 14 201 16 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 201 4 201 13+ , srcInfoPoints = []+ }+ "modifyBit"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 201 17 201 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 201 22 201 24 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 201 17 201 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 17 201 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 17 201 21+ , srcInfoPoints = []+ }+ "Bool")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 201 25 201 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 201 31 201 33 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 25 201 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 25 201 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 25 201 30+ , srcInfoPoints = []+ }+ "CMode")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 34 201 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 201 40 201 42 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 34 201 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 34 201 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 34 201 39+ , srcInfoPoints = []+ }+ "CMode")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 43 201 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 43 201 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 201 43 201 48+ , srcInfoPoints = []+ }+ "CMode"))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 202 4 203 33+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 202 4 202 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 202 4 202 13+ , srcInfoPoints = []+ }+ "modifyBit")+ [ PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 14 202 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 14 202 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 14 202 19+ , srcInfoPoints = []+ }+ "False"))+ []+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 20 202 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 20 202 21+ , srcInfoPoints = []+ }+ "m")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 22 202 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 22 202 23+ , srcInfoPoints = []+ }+ "b")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 202 24 202 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 202 24 202 25 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 26 202 46+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 26 202 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 26 202 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 26 202 27+ , srcInfoPoints = []+ }+ "m")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 28 202 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 28 202 31+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 28 202 31+ , srcInfoPoints = []+ }+ ".&.")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 32 202 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 202 32 202 33+ , SrcSpan "tests/examples/Directory.hs" 202 45 202 46+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 33 202 45+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 33 202 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 202 33 202 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 202 33 202 43+ , srcInfoPoints = []+ }+ "complement")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 202 44 202 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 202 44 202 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 202 44 202 45+ , srcInfoPoints = []+ }+ "b")))))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 203 4 203 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 203 4 203 13+ , srcInfoPoints = []+ }+ "modifyBit")+ [ PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 14 203 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 14 203 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 14 203 18+ , srcInfoPoints = []+ }+ "True"))+ []+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 20 203 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 20 203 21+ , srcInfoPoints = []+ }+ "m")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 22 203 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 22 203 23+ , srcInfoPoints = []+ }+ "b")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 203 24 203 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 203 24 203 25 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 26 203 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 26 203 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 26 203 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 26 203 27+ , srcInfoPoints = []+ }+ "m")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 28 203 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 28 203 31+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 28 203 31+ , srcInfoPoints = []+ }+ ".|.")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 32 203 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 32 203 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 203 32 203 33+ , srcInfoPoints = []+ }+ "b")))))+ Nothing+ ]+ ]))+ ]+ , ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 205 1 206 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 205 1 205 8+ , SrcSpan "tests/examples/Directory.hs" 205 9 205 15+ , SrcSpan "tests/examples/Directory.hs" 205 29 205 38+ , SrcSpan "tests/examples/Directory.hs" 206 13 206 15+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 205 16 205 21+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 205 22 205 28+ , srcInfoPoints = []+ }))+ (Just "_wchmod")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 4 206 12+ , srcInfoPoints = []+ }+ "c_wchmod")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 16 206 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 206 25 206 27 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 16 206 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 16 206 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 16 206 24+ , srcInfoPoints = []+ }+ "CWString")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 28 206 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 206 34 206 36 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 28 206 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 28 206 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 28 206 33+ , srcInfoPoints = []+ }+ "CMode")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 37 206 44+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 37 206 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 37 206 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 37 206 39+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 40 206 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 40 206 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 206 40 206 44+ , srcInfoPoints = []+ }+ "CInt"))))))+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 1 208 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 208 17 208 19 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 1 208 16+ , srcInfoPoints = []+ }+ "copyPermissions"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 20 208 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 208 29 208 31 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 20 208 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 20 208 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 20 208 28+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 32 208 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 208 41 208 43 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 32 208 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 32 208 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 32 208 40+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 44 208 49+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 44 208 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 44 208 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 44 208 46+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 47 208 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 208 47 208 48+ , SrcSpan "tests/examples/Directory.hs" 208 48 208 49+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 47 208 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 208 47 208 48+ , SrcSpan "tests/examples/Directory.hs" 208 48 208 49+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 208 47 208 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 208 47 208 48+ , SrcSpan "tests/examples/Directory.hs" 208 48 208 49+ ]+ }))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 1 215 65+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 1 215 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 1 209 16+ , srcInfoPoints = []+ }+ "copyPermissions")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 17 209 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 17 209 23+ , srcInfoPoints = []+ }+ "source")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 24 209 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 24 209 28+ , srcInfoPoints = []+ }+ "dest")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 29 215 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 209 29 209 30 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 209 31 215 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 209 31 209 33+ , SrcSpan "tests/examples/Directory.hs" 210 3 210 3+ , SrcSpan "tests/examples/Directory.hs" 257 1 257 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 210 3 215 65+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 210 3 215 65+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 210 3 210 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 3 210 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 3 210 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 3 210 14+ , srcInfoPoints = []+ }+ "allocaBytes")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 15 210 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 15 210 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 15 210 26+ , srcInfoPoints = []+ }+ "sizeof_stat"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 210 27 210 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 27 210 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 27 210 28+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 210 29 215 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 210 29 210 30+ , SrcSpan "tests/examples/Directory.hs" 210 38 210 40+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 31 210 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 31 210 37+ , srcInfoPoints = []+ }+ "p_stat")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 210 41 215 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 210 41 210 43+ , SrcSpan "tests/examples/Directory.hs" 211 3 211 3+ , SrcSpan "tests/examples/Directory.hs" 211 3 211 3+ , SrcSpan "tests/examples/Directory.hs" 257 1 257 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 211 3 215 65+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 211 3 215 65+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 211 3 211 22+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 3 211 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 3 211 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 211+ 3+ 211+ 15+ , srcInfoPoints = []+ }+ "withFilePath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 16 211 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 16 211 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 211+ 16+ 211+ 22+ , srcInfoPoints = []+ }+ "source"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 211 23 211 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 23 211 24+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 23 211 24+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 211 25 215 65+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 211 25 211 26+ , SrcSpan+ "tests/examples/Directory.hs" 211 35 211 37+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 26 211 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 211+ 26+ 211+ 34+ , srcInfoPoints = []+ }+ "p_source")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 211 38 215 65+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 211 38 211 40+ , SrcSpan+ "tests/examples/Directory.hs" 212 3 212 3+ , SrcSpan+ "tests/examples/Directory.hs" 212 3 212 3+ , SrcSpan+ "tests/examples/Directory.hs" 257 1 257 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 212 3 215 65+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 3+ 215+ 65+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 3+ 212+ 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 3+ 212+ 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 3+ 212+ 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 3+ 212+ 15+ , srcInfoPoints = []+ }+ "withFilePath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 16+ 212+ 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 16+ 212+ 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 16+ 212+ 20+ , srcInfoPoints = []+ }+ "dest"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 21+ 212+ 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 21+ 212+ 22+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 21+ 212+ 22+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 23+ 215+ 65+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 23+ 212+ 24+ , SrcSpan+ "tests/examples/Directory.hs"+ 212+ 31+ 212+ 33+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 24+ 212+ 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 24+ 212+ 30+ , srcInfoPoints = []+ }+ "p_dest")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 34+ 215+ 65+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 212+ 34+ 212+ 36+ , SrcSpan+ "tests/examples/Directory.hs"+ 213+ 5+ 213+ 5+ , SrcSpan+ "tests/examples/Directory.hs"+ 214+ 5+ 214+ 5+ , SrcSpan+ "tests/examples/Directory.hs"+ 215+ 5+ 215+ 5+ , SrcSpan+ "tests/examples/Directory.hs"+ 257+ 1+ 257+ 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 5+ 213+ 67+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 5+ 213+ 67+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 5+ 213+ 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 5+ 213+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 5+ 213+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 5+ 213+ 24+ , srcInfoPoints = []+ }+ "throwErrnoIfMinus1_")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 25+ 213+ 42+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 25+ 213+ 42+ , srcInfoPoints = []+ }+ "copyPermissions"+ "copyPermissions")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 43+ 213+ 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 43+ 213+ 44+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 43+ 213+ 44+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 45+ 213+ 67+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 45+ 213+ 60+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 45+ 213+ 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 45+ 213+ 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 45+ 213+ 51+ , srcInfoPoints =+ []+ }+ "c_stat")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 52+ 213+ 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 52+ 213+ 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 52+ 213+ 60+ , srcInfoPoints =+ []+ }+ "p_source"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 61+ 213+ 67+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 61+ 213+ 67+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 213+ 61+ 213+ 67+ , srcInfoPoints = []+ }+ "p_stat")))))+ , Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 5+ 214+ 27+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 10+ 214+ 12+ ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 5+ 214+ 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 5+ 214+ 9+ , srcInfoPoints = []+ }+ "mode"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 13+ 214+ 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 13+ 214+ 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 13+ 214+ 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 13+ 214+ 20+ , srcInfoPoints = []+ }+ "st_mode")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 21+ 214+ 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 21+ 214+ 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 214+ 21+ 214+ 27+ , srcInfoPoints = []+ }+ "p_stat"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 5+ 215+ 65+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 5+ 215+ 65+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 5+ 215+ 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 5+ 215+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 5+ 215+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 5+ 215+ 24+ , srcInfoPoints = []+ }+ "throwErrnoIfMinus1_")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 25+ 215+ 42+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 25+ 215+ 42+ , srcInfoPoints = []+ }+ "copyPermissions"+ "copyPermissions")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 43+ 215+ 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 43+ 215+ 44+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 43+ 215+ 44+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 45+ 215+ 65+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 45+ 215+ 60+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 45+ 215+ 53+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 45+ 215+ 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 45+ 215+ 53+ , srcInfoPoints =+ []+ }+ "c_wchmod")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 54+ 215+ 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 54+ 215+ 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 54+ 215+ 60+ , srcInfoPoints =+ []+ }+ "p_dest"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 61+ 215+ 65+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 61+ 215+ 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 215+ 61+ 215+ 65+ , srcInfoPoints = []+ }+ "mode")))))+ ])))+ ])))+ ])))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 1 257 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 257 17 257 19 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 1 257 16+ , srcInfoPoints = []+ }+ "createDirectory"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 20 257 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 257 29 257 31 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 20 257 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 20 257 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 20 257 28+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 32 257 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 32 257 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 32 257 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 32 257 34+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 35 257 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 257 35 257 36+ , SrcSpan "tests/examples/Directory.hs" 257 36 257 37+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 35 257 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 257 35 257 36+ , SrcSpan "tests/examples/Directory.hs" 257 36 257 37+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 257 35 257 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 257 35 257 36+ , SrcSpan "tests/examples/Directory.hs" 257 36 257 37+ ]+ })))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 258 1 259 37+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 258 1 259 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 258 1 258 16+ , srcInfoPoints = []+ }+ "createDirectory")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 258 17 258 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 258 17 258 21+ , srcInfoPoints = []+ }+ "path")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 258 22 259 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 258 22 258 23 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 258 24 259 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 258 24 258 26+ , SrcSpan "tests/examples/Directory.hs" 259 3 259 3+ , SrcSpan "tests/examples/Directory.hs" 264 1 264 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 259 3 259 37+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 259 3 259 37+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 259 3 259 29+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 3 259 24+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 3 259 24+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 3 259 24+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 3 259 24+ , srcInfoPoints = []+ }+ "createDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 25 259 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 25 259 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 25 259 29+ , srcInfoPoints = []+ }+ "path"))))+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 259 30 259 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 30 259 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 259 30 259 37+ , srcInfoPoints = []+ }+ "Nothing"))))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 264 1 266 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 264 26 264 28 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 264 1 264 25+ , srcInfoPoints = []+ }+ "createDirectoryIfMissing"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 264 29 266 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 265 18 265 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 264 29 264 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 264 29 264 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 264 29 264 33+ , srcInfoPoints = []+ }+ "Bool")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 265 21 266 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 266 18 266 20 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 265 21 265 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 265 21 265 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 265 21 265 29+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 266 21 266 26+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 266 21 266 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 266 21 266 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 266 21 266 23+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 266 24 266 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 266 24 266 25+ , SrcSpan "tests/examples/Directory.hs" 266 25 266 26+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 266 24 266 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 266 24 266 25+ , SrcSpan "tests/examples/Directory.hs" 266 25 266 26+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 266 24 266 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 266 24 266 25+ , SrcSpan "tests/examples/Directory.hs" 266 25 266 26+ ]+ }))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 267 1 300 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 270 3 270 8 ]+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 267 1 300 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 270 3 270 8 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 267 1 267 25+ , srcInfoPoints = []+ }+ "createDirectoryIfMissing")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 267 26 267 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 267 26 267 40+ , srcInfoPoints = []+ }+ "create_parents")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 267 41 267 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 267 41 267 46+ , srcInfoPoints = []+ }+ "path0")+ ]+ (GuardedRhss+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 3 269 57+ , srcInfoPoints = []+ }+ [ GuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 3 268 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 268 3 268 4+ , SrcSpan "tests/examples/Directory.hs" 268 20 268 21+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 5 268 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 5 268 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 5 268 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 5 268 19+ , srcInfoPoints = []+ }+ "create_parents")))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 22 268 48+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 22 268 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 22 268 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 22 268 32+ , srcInfoPoints = []+ }+ "createDirs")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 33 268 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 268 33 268 34+ , SrcSpan "tests/examples/Directory.hs" 268 47 268 48+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 268 34 268 47+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 34 268 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 34 268 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 34 268 41+ , srcInfoPoints = []+ }+ "parents")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 42 268 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 42 268 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 268 42 268 47+ , srcInfoPoints = []+ }+ "path0"))))))+ , GuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 3 269 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 269 3 269 4+ , SrcSpan "tests/examples/Directory.hs" 269 20 269 21+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 5 269 14+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 5 269 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 5 269 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 5 269 14+ , srcInfoPoints = []+ }+ "otherwise")))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 22 269 57+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 22 269 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 22 269 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 22 269 32+ , srcInfoPoints = []+ }+ "createDirs")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 33 269 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 269 33 269 34+ , SrcSpan "tests/examples/Directory.hs" 269 56 269 57+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 269 34 269 56+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 34 269 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 34 269 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 34 269 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 34 269 38+ , srcInfoPoints = []+ }+ "take")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 39 269 40+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 39 269 40+ , srcInfoPoints = []+ }+ 1+ "1")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 41 269 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 269 41 269 42+ , SrcSpan "tests/examples/Directory.hs" 269 55 269 56+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 42 269 55+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 42 269 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 42 269 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 269 42 269 49+ , srcInfoPoints = []+ }+ "parents")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 50 269 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 269 50 269 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 269 50 269 55+ , srcInfoPoints = []+ }+ "path0"))))))))+ ])+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 271 5 300 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 271 5 271 5+ , SrcSpan "tests/examples/Directory.hs" 273 5 273 5+ , SrcSpan "tests/examples/Directory.hs" 274 5 274 5+ , SrcSpan "tests/examples/Directory.hs" 275 5 275 5+ , SrcSpan "tests/examples/Directory.hs" 280 5 280 5+ , SrcSpan "tests/examples/Directory.hs" 281 5 281 5+ , SrcSpan "tests/examples/Directory.hs" 343 1 343 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 271 5 271 68+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 271 5 271 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 271 5 271 12+ , srcInfoPoints = []+ }+ "parents"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 271 13 271 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 271 13 271 14 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 271 15 271 68+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 15 271 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 15 271 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 15 271 22+ , srcInfoPoints = []+ }+ "reverse")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 23 271 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 23 271 24+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 23 271 24+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 25 271 68+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 25 271 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 25 271 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 25 271 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 271 25 271 31+ , srcInfoPoints = []+ }+ "scanl1")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 32 271 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 271 32 271 33+ , SrcSpan "tests/examples/Directory.hs" 271 33 271 36+ , SrcSpan "tests/examples/Directory.hs" 271 36 271 37+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 32 271 37+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 271 32 271 33+ , SrcSpan+ "tests/examples/Directory.hs" 271 33 271 36+ , SrcSpan+ "tests/examples/Directory.hs" 271 36 271 37+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 271 33 271 36+ , srcInfoPoints = []+ }+ "</>"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 38 271 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 38 271 39+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 38 271 39+ , srcInfoPoints = []+ }+ ".")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 40 271 68+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 40 271 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 40 271 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 271 40 271 56+ , srcInfoPoints = []+ }+ "splitDirectories")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 57 271 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 57 271 58+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 271 57 271 58+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 59 271 68+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 271 59 271 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 271 59 271 68+ , srcInfoPoints = []+ }+ "normalise")))))))+ Nothing+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 273 5 278 28+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 273 5 273 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 273 5 273 15+ , srcInfoPoints = []+ }+ "createDirs")+ [ PList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 16 273 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 273 16 273 17+ , SrcSpan "tests/examples/Directory.hs" 273 17 273 18+ ]+ }+ []+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 273 27 273 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 273 27 273 28 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 29 273 38+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 29 273 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 29 273 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 29 273 35+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 36 273 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 273 36 273 37+ , SrcSpan "tests/examples/Directory.hs" 273 37 273 38+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 36 273 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 273 36 273 37+ , SrcSpan "tests/examples/Directory.hs" 273 37 273 38+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 273 36 273 38+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 273 36 273 37+ , SrcSpan+ "tests/examples/Directory.hs" 273 37 273 38+ ]+ })))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 274 5 274 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 274 5 274 15+ , srcInfoPoints = []+ }+ "createDirs")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 16 274 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 274 16 274 17+ , SrcSpan "tests/examples/Directory.hs" 274 23 274 24+ ]+ }+ (PInfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 17 274 23+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 17 274 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 17 274 20+ , srcInfoPoints = []+ }+ "dir"))+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 20 274 21+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 20 274 21+ , srcInfoPoints = []+ }))+ (PList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 21 274 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 274 21 274 22+ , SrcSpan "tests/examples/Directory.hs" 274 22 274 23+ ]+ }+ []))+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 274 27 274 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 274 27 274 28 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 29 274 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 29 274 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 29 274 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 29 274 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 274 29 274 38+ , srcInfoPoints = []+ }+ "createDir")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 39 274 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 39 274 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 274 39 274 42+ , srcInfoPoints = []+ }+ "dir"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 43 274 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 43 274 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 274 43 274 48+ , srcInfoPoints = []+ }+ "throw")))))+ Nothing+ , Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 275 5 278 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 275 5 275 15+ , srcInfoPoints = []+ }+ "createDirs")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 16 275 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 275 16 275 17+ , SrcSpan "tests/examples/Directory.hs" 275 25 275 26+ ]+ }+ (PInfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 17 275 25+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 17 275 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 17 275 20+ , srcInfoPoints = []+ }+ "dir"))+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 20 275 21+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 20 275 21+ , srcInfoPoints = []+ }))+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 21 275 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 275 21 275 25+ , srcInfoPoints = []+ }+ "dirs")))+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 275 27 278 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 275 27 275 28 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 7 278 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 7 276 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 7 276 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 7 276 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 276 7 276 16+ , srcInfoPoints = []+ }+ "createDir")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 17 276 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 17 276 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 276 17 276 20+ , srcInfoPoints = []+ }+ "dir"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 21 276 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 21 276 22+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 21 276 22+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 23 278 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 276 23 276 24+ , SrcSpan "tests/examples/Directory.hs" 276 26 276 28+ ]+ }+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 24 276 25+ , srcInfoPoints = []+ }+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 276 29 278 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 276 29 276 31+ , SrcSpan "tests/examples/Directory.hs" 277 9 277 9+ , SrcSpan "tests/examples/Directory.hs" 278 9 278 9+ , SrcSpan "tests/examples/Directory.hs" 280 5 280 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 277 9 277 24+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 277 9 277 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 277 9 277 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 277+ 9+ 277+ 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 277+ 9+ 277+ 19+ , srcInfoPoints = []+ }+ "createDirs")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 277+ 20+ 277+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 277+ 20+ 277+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 277+ 20+ 277+ 24+ , srcInfoPoints = []+ }+ "dirs"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 278 9 278 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 278 9 278 28+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 278 9 278 22+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 9+ 278+ 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 9+ 278+ 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 9+ 278+ 18+ , srcInfoPoints = []+ }+ "createDir")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 19+ 278+ 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 19+ 278+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 19+ 278+ 22+ , srcInfoPoints = []+ }+ "dir"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 23+ 278+ 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 23+ 278+ 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 278+ 23+ 278+ 28+ , srcInfoPoints = []+ }+ "throw"))))+ ]))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 280 5 280 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 280 15 280 17 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 280 5 280 14+ , srcInfoPoints = []+ }+ "createDir"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 280 18 280 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 280 27 280 29 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 280 18 280 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 18 280 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 18 280 26+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 280 30 280 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 280 53 280 55 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 30 280 52+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 280 30 280 31+ , SrcSpan "tests/examples/Directory.hs" 280 51 280 52+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 31 280 51+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 280 43 280 45 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 31 280 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 31 280 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 280 31 280 42+ , srcInfoPoints = []+ }+ "IOException")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 46 280 51+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 46 280 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 280 46 280 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 280 46 280 48+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 49 280 51+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 280 49 280 50+ , SrcSpan+ "tests/examples/Directory.hs" 280 50 280 51+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 280 49 280 51+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 280 49 280 50+ , SrcSpan+ "tests/examples/Directory.hs" 280 50 280 51+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 280 49 280 51+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 280+ 49+ 280+ 50+ , SrcSpan+ "tests/examples/Directory.hs"+ 280+ 50+ 280+ 51+ ]+ }))))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 56 280 61+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 56 280 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 56 280 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 56 280 58+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 59 280 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 280 59 280 60+ , SrcSpan "tests/examples/Directory.hs" 280 60 280 61+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 59 280 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 280 59 280 60+ , SrcSpan "tests/examples/Directory.hs" 280 60 280 61+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 280 59 280 61+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 280 59 280 60+ , SrcSpan+ "tests/examples/Directory.hs" 280 60 280 61+ ]+ }))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 281 5 300 46+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 281 5 300 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 281 5 281 14+ , srcInfoPoints = []+ }+ "createDir")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 281 15 281 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 281 15 281 18+ , srcInfoPoints = []+ }+ "dir")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 281 19 281 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 281 19 281 34+ , srcInfoPoints = []+ }+ "notExistHandler")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 281 35 300 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 281 35 281 36 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 281 37 300 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 281 37 281 39+ , SrcSpan "tests/examples/Directory.hs" 282 7 282 7+ , SrcSpan "tests/examples/Directory.hs" 283 7 283 7+ , SrcSpan "tests/examples/Directory.hs" 343 1 343 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 282 7 282 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 282 9 282 11 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 282 7 282 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 282 7 282 8+ , srcInfoPoints = []+ }+ "r"))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 282 12 282 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 282 12 282 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 282 12 282 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 282+ 12+ 282+ 15+ , srcInfoPoints = []+ }+ "try")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 282 16 282 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 282 16 282 17+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 282+ 16+ 282+ 17+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 282 18 282 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 282 18 282 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 282+ 18+ 282+ 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 282+ 18+ 282+ 33+ , srcInfoPoints = []+ }+ "createDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 282 34 282 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 282+ 34+ 282+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 282+ 34+ 282+ 37+ , srcInfoPoints = []+ }+ "dir")))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 283 7 300 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 283 7 283 11+ , SrcSpan "tests/examples/Directory.hs" 283 41 283 43+ , SrcSpan "tests/examples/Directory.hs" 284 9 284 9+ , SrcSpan "tests/examples/Directory.hs" 285 9 285 9+ , SrcSpan "tests/examples/Directory.hs" 343 1 343 0+ ]+ }+ (Case+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 283 7 300 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 283 7 283 11+ , SrcSpan "tests/examples/Directory.hs" 283 41 283 43+ , SrcSpan "tests/examples/Directory.hs" 284 9 284 9+ , SrcSpan "tests/examples/Directory.hs" 285 9 285 9+ , SrcSpan "tests/examples/Directory.hs" 343 1 343 0+ ]+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 283 12 283 40+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 283 12 283 13+ , SrcSpan+ "tests/examples/Directory.hs" 283 39 283 40+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 283 13 283 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 283 15 283 17+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 13+ 283+ 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 13+ 283+ 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 13+ 283+ 14+ , srcInfoPoints = []+ }+ "r")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 18+ 283+ 39+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 18+ 283+ 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 18+ 283+ 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 18+ 283+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 18+ 283+ 24+ , srcInfoPoints = []+ }+ "Either")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 25+ 283+ 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 25+ 283+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 25+ 283+ 36+ , srcInfoPoints = []+ }+ "IOException"))))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 37+ 283+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 37+ 283+ 38+ , SrcSpan+ "tests/examples/Directory.hs"+ 283+ 38+ 283+ 39+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 37+ 283+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 37+ 283+ 38+ , SrcSpan+ "tests/examples/Directory.hs"+ 283+ 38+ 283+ 39+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 37+ 283+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 283+ 37+ 283+ 38+ , SrcSpan+ "tests/examples/Directory.hs"+ 283+ 38+ 283+ 39+ ]+ }))))))+ [ Alt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 284 9 284 48+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 284 9 284 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 9+ 284+ 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 9+ 284+ 14+ , srcInfoPoints = []+ }+ "Right"))+ [ PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 15+ 284+ 17+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 15+ 284+ 16+ , SrcSpan+ "tests/examples/Directory.hs"+ 284+ 16+ 284+ 17+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 15+ 284+ 17+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 15+ 284+ 16+ , SrcSpan+ "tests/examples/Directory.hs"+ 284+ 16+ 284+ 17+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 15+ 284+ 17+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 15+ 284+ 16+ , SrcSpan+ "tests/examples/Directory.hs"+ 284+ 16+ 284+ 17+ ]+ }))+ []+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 284 36 284 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 36+ 284+ 38+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 39+ 284+ 48+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 39+ 284+ 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 39+ 284+ 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 39+ 284+ 45+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 46+ 284+ 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 46+ 284+ 47+ , SrcSpan+ "tests/examples/Directory.hs"+ 284+ 47+ 284+ 48+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 46+ 284+ 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 46+ 284+ 47+ , SrcSpan+ "tests/examples/Directory.hs"+ 284+ 47+ 284+ 48+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 46+ 284+ 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 284+ 46+ 284+ 47+ , SrcSpan+ "tests/examples/Directory.hs"+ 284+ 47+ 284+ 48+ ]+ })))))+ Nothing+ , Alt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 285 9 300 46+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 285 9 285 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 285+ 9+ 285+ 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 285+ 9+ 285+ 13+ , srcInfoPoints = []+ }+ "Left"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 285+ 15+ 285+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 285+ 15+ 285+ 16+ , srcInfoPoints = []+ }+ "e")+ ])+ (GuardedRhss+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 286 11 300 46+ , srcInfoPoints = []+ }+ [ GuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 11+ 286+ 56+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 11+ 286+ 12+ , SrcSpan+ "tests/examples/Directory.hs"+ 286+ 36+ 286+ 38+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 13+ 286+ 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 13+ 286+ 35+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 13+ 286+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 13+ 286+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 13+ 286+ 32+ , srcInfoPoints = []+ }+ "isDoesNotExistError")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 34+ 286+ 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 34+ 286+ 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 34+ 286+ 35+ , srcInfoPoints = []+ }+ "e"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 39+ 286+ 56+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 39+ 286+ 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 39+ 286+ 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 39+ 286+ 54+ , srcInfoPoints = []+ }+ "notExistHandler")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 55+ 286+ 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 55+ 286+ 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 286+ 55+ 286+ 56+ , srcInfoPoints = []+ }+ "e"))))+ , GuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 11+ 299+ 68+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 11+ 294+ 12+ , SrcSpan+ "tests/examples/Directory.hs"+ 294+ 36+ 294+ 38+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 13+ 294+ 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 13+ 294+ 35+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 13+ 294+ 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 13+ 294+ 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 13+ 294+ 33+ , srcInfoPoints = []+ }+ "isAlreadyExistsError")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 34+ 294+ 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 34+ 294+ 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 34+ 294+ 35+ , srcInfoPoints = []+ }+ "e"))))+ ]+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 39+ 299+ 68+ , srcInfoPoints = []+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 39+ 299+ 16+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 39+ 294+ 40+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 15+ 299+ 16+ ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 40+ 298+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 294+ 40+ 294+ 42+ , SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 295+ 15+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 15+ 299+ 15+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 15+ 299+ 15+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 298+ 39+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 298+ 39+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 295+ 60+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 295+ 56+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 295+ 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 295+ 29+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 15+ 295+ 29+ , srcInfoPoints =+ []+ }+ "withFileStatus")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 30+ 295+ 56+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 30+ 295+ 56+ , srcInfoPoints =+ []+ }+ "createDirectoryIfMissing"+ "createDirectoryIfMissing")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 57+ 295+ 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 57+ 295+ 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 57+ 295+ 60+ , srcInfoPoints =+ []+ }+ "dir"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 61+ 295+ 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 61+ 295+ 62+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 61+ 295+ 62+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 63+ 298+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 63+ 295+ 64+ , SrcSpan+ "tests/examples/Directory.hs"+ 295+ 67+ 295+ 69+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 64+ 295+ 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 64+ 295+ 66+ , srcInfoPoints = []+ }+ "st")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 70+ 298+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 295+ 70+ 295+ 72+ , SrcSpan+ "tests/examples/Directory.hs"+ 296+ 18+ 296+ 18+ , SrcSpan+ "tests/examples/Directory.hs"+ 297+ 18+ 297+ 18+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 15+ 299+ 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 18+ 296+ 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 24+ 296+ 26+ ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 18+ 296+ 23+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 18+ 296+ 23+ , srcInfoPoints =+ []+ }+ "isDir"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 27+ 296+ 41+ , srcInfoPoints =+ []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 27+ 296+ 38+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 27+ 296+ 38+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 27+ 296+ 38+ , srcInfoPoints =+ []+ }+ "isDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 39+ 296+ 41+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 39+ 296+ 41+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 296+ 39+ 296+ 41+ , srcInfoPoints =+ []+ }+ "st"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 18+ 298+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 18+ 297+ 20+ , SrcSpan+ "tests/examples/Directory.hs"+ 297+ 27+ 297+ 31+ , SrcSpan+ "tests/examples/Directory.hs"+ 298+ 27+ 298+ 31+ ]+ }+ (If+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 18+ 298+ 39+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 18+ 297+ 20+ , SrcSpan+ "tests/examples/Directory.hs"+ 297+ 27+ 297+ 31+ , SrcSpan+ "tests/examples/Directory.hs"+ 298+ 27+ 298+ 31+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 21+ 297+ 26+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 21+ 297+ 26+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 21+ 297+ 26+ , srcInfoPoints =+ []+ }+ "isDir")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 32+ 297+ 41+ , srcInfoPoints =+ []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 32+ 297+ 38+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 32+ 297+ 38+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 32+ 297+ 38+ , srcInfoPoints =+ []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 39+ 297+ 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 39+ 297+ 40+ , SrcSpan+ "tests/examples/Directory.hs"+ 297+ 40+ 297+ 41+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 39+ 297+ 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 39+ 297+ 40+ , SrcSpan+ "tests/examples/Directory.hs"+ 297+ 40+ 297+ 41+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 39+ 297+ 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 297+ 39+ 297+ 40+ , SrcSpan+ "tests/examples/Directory.hs"+ 297+ 40+ 297+ 41+ ]+ }))))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 298+ 32+ 298+ 39+ , srcInfoPoints =+ []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 298+ 32+ 298+ 37+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 298+ 32+ 298+ 37+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 298+ 32+ 298+ 37+ , srcInfoPoints =+ []+ }+ "throw")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 298+ 38+ 298+ 39+ , srcInfoPoints =+ []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 298+ 38+ 298+ 39+ , srcInfoPoints =+ []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 298+ 38+ 298+ 39+ , srcInfoPoints =+ []+ }+ "e")))))+ ])))+ ]))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 17+ 299+ 24+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 17+ 299+ 18+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 18+ 299+ 23+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 23+ 299+ 24+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 17+ 299+ 24+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 17+ 299+ 18+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 18+ 299+ 23+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 23+ 299+ 24+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 18+ 299+ 23+ , srcInfoPoints = []+ }+ "catch")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 25+ 299+ 68+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 25+ 299+ 26+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 67+ 299+ 68+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 26+ 299+ 67+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 44+ 299+ 46+ ]+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 26+ 299+ 43+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 26+ 299+ 27+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 42+ 299+ 43+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 27+ 299+ 42+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 27+ 299+ 28+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 30+ 299+ 32+ ]+ }+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 28+ 299+ 29+ , srcInfoPoints = []+ }+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 33+ 299+ 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 33+ 299+ 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 33+ 299+ 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 33+ 299+ 39+ , srcInfoPoints =+ []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 40+ 299+ 42+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 40+ 299+ 41+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 41+ 299+ 42+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 40+ 299+ 42+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 40+ 299+ 41+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 41+ 299+ 42+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 40+ 299+ 42+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 40+ 299+ 41+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 41+ 299+ 42+ ]+ }))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 47+ 299+ 67+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 59+ 299+ 61+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 47+ 299+ 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 47+ 299+ 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 47+ 299+ 58+ , srcInfoPoints = []+ }+ "IOException")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 62+ 299+ 67+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 62+ 299+ 64+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 62+ 299+ 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 62+ 299+ 64+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 65+ 299+ 67+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 65+ 299+ 66+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 66+ 299+ 67+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 65+ 299+ 67+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 65+ 299+ 66+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 66+ 299+ 67+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 65+ 299+ 67+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 299+ 65+ 299+ 66+ , SrcSpan+ "tests/examples/Directory.hs"+ 299+ 66+ 299+ 67+ ]+ }))))))))+ , GuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 11+ 300+ 46+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 11+ 300+ 12+ , SrcSpan+ "tests/examples/Directory.hs"+ 300+ 36+ 300+ 38+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 13+ 300+ 22+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 13+ 300+ 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 13+ 300+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 13+ 300+ 22+ , srcInfoPoints = []+ }+ "otherwise")))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 39+ 300+ 46+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 39+ 300+ 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 39+ 300+ 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 39+ 300+ 44+ , srcInfoPoints = []+ }+ "throw")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 45+ 300+ 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 45+ 300+ 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 300+ 45+ 300+ 46+ , srcInfoPoints = []+ }+ "e"))))+ ])+ Nothing+ ])+ ]))+ Nothing+ ]+ ]))+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 1 343 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 343 17 343 19 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 1 343 16+ , srcInfoPoints = []+ }+ "removeDirectory"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 20 343 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 343 29 343 31 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 20 343 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 20 343 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 20 343 28+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 32 343 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 32 343 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 32 343 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 32 343 34+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 35 343 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 343 35 343 36+ , SrcSpan "tests/examples/Directory.hs" 343 36 343 37+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 35 343 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 343 35 343 36+ , SrcSpan "tests/examples/Directory.hs" 343 36 343 37+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 343 35 343 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 343 35 343 36+ , SrcSpan "tests/examples/Directory.hs" 343 36 343 37+ ]+ })))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 344 1 345 29+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 344 1 345 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 344 1 344 16+ , srcInfoPoints = []+ }+ "removeDirectory")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 344 17 344 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 344 17 344 21+ , srcInfoPoints = []+ }+ "path")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 344 22 345 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 344 22 344 23 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 3 345 29+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 3 345 24+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 3 345 24+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 3 345 24+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 3 345 24+ , srcInfoPoints = []+ }+ "removeDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 25 345 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 25 345 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 345 25 345 29+ , srcInfoPoints = []+ }+ "path")))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 1 350 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 350 26 350 28 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 1 350 25+ , srcInfoPoints = []+ }+ "removeDirectoryRecursive"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 29 350 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 350 38 350 40 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 29 350 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 29 350 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 29 350 37+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 41 350 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 41 350 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 41 350 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 41 350 43+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 44 350 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 350 44 350 45+ , SrcSpan "tests/examples/Directory.hs" 350 45 350 46+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 44 350 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 350 44 350 45+ , SrcSpan "tests/examples/Directory.hs" 350 45 350 46+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 350 44 350 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 350 44 350 45+ , SrcSpan "tests/examples/Directory.hs" 350 45 350 46+ ]+ })))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 351 1 363 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 355 3 355 8 ]+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 351 1 363 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 355 3 355 8 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 351 1 351 25+ , srcInfoPoints = []+ }+ "removeDirectoryRecursive")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 351 26 351 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 351 26 351 34+ , srcInfoPoints = []+ }+ "startLoc")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 351 35 354 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 351 35 351 36 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 351 37 354 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 351 37 351 39+ , SrcSpan "tests/examples/Directory.hs" 352 3 352 3+ , SrcSpan "tests/examples/Directory.hs" 353 3 353 3+ , SrcSpan "tests/examples/Directory.hs" 354 3 354 3+ , SrcSpan "tests/examples/Directory.hs" 355 3 355 3+ , SrcSpan "tests/examples/Directory.hs" 355 3 355 3+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 352 3 352 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 352 8 352 10 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 352 3 352 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 352 3 352 7+ , srcInfoPoints = []+ }+ "cont"))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 352 11 352 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 352 11 352 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 352 11 352 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 352 11 352 31+ , srcInfoPoints = []+ }+ "getDirectoryContents")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 352 32 352 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 352 32 352 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 352 32 352 40+ , srcInfoPoints = []+ }+ "startLoc"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 353 3 353 69+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 353 3 353 69+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 353 3 353 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 3 353 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 3 353 12+ , srcInfoPoints = []+ }+ "sequence_")))+ (ListComp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 353 13 353 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 353 13 353 14+ , SrcSpan "tests/examples/Directory.hs" 353 34 353 35+ , SrcSpan "tests/examples/Directory.hs" 353 45 353 46+ , SrcSpan "tests/examples/Directory.hs" 353 68 353 69+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 14 353 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 14 353 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 14 353 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 14 353 16+ , srcInfoPoints = []+ }+ "rm")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 17 353 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 353 17 353 18+ , SrcSpan "tests/examples/Directory.hs" 353 32 353 33+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 18 353 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 18 353 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 18 353 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 18 353 26+ , srcInfoPoints = []+ }+ "startLoc")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 27 353 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 27 353 30+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 27 353 30+ , srcInfoPoints = []+ }+ "</>")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 31 353 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 31 353 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 31 353 32+ , srcInfoPoints = []+ }+ "x"))))))+ [ QualStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 36 353 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 353 38 353 40 ]+ }+ (Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 36 353 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 353 38 353 40 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 36 353 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 36 353 37+ , srcInfoPoints = []+ }+ "x"))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 41 353 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 41 353 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 41 353 45+ , srcInfoPoints = []+ }+ "cont"))))+ , QualStmt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 47 353 68+ , srcInfoPoints = []+ }+ (Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 47 353 68+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 47 353 68+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 47 353 55+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 47 353 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 47 353 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 353+ 47+ 353+ 48+ , srcInfoPoints = []+ }+ "x")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 49 353 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 49 353 51+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 353+ 49+ 353+ 51+ , srcInfoPoints = []+ }+ "/=")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 52 353 55+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 52 353 55+ , srcInfoPoints = []+ }+ "."+ ".")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 56 353 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 56 353 58+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 56 353 58+ , srcInfoPoints = []+ }+ "&&")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 353 59 353 68+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 59 353 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 59 353 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 353+ 59+ 353+ 60+ , srcInfoPoints = []+ }+ "x")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 61 353 63+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 61 353 63+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 353+ 61+ 353+ 63+ , srcInfoPoints = []+ }+ "/=")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 64 353 68+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 353 64 353 68+ , srcInfoPoints = []+ }+ ".."+ "..")))))+ ]))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 354 3 354 27+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 354 3 354 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 354 3 354 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 354 3 354 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 354 3 354 18+ , srcInfoPoints = []+ }+ "removeDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 354 19 354 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 354 19 354 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 354 19 354 27+ , srcInfoPoints = []+ }+ "startLoc"))))+ ]))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 356 5 363 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 356 5 356 5+ , SrcSpan "tests/examples/Directory.hs" 357 5 357 5+ , SrcSpan "tests/examples/Directory.hs" 399 1 399 0+ ]+ }+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 356 5 356 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 356 8 356 10 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 356 5 356 7+ , srcInfoPoints = []+ }+ "rm"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 356 11 356 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 356 20 356 22 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 356 11 356 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 11 356 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 11 356 19+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 356 23 356 28+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 23 356 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 23 356 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 23 356 25+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 26 356 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 356 26 356 27+ , SrcSpan "tests/examples/Directory.hs" 356 27 356 28+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 26 356 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 356 26 356 27+ , SrcSpan "tests/examples/Directory.hs" 356 27 356 28+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 356 26 356 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 356 26 356 27+ , SrcSpan "tests/examples/Directory.hs" 356 27 356 28+ ]+ })))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 357 5 363 37+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 357 5 363 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 357 5 357 7+ , srcInfoPoints = []+ }+ "rm")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 357 8 357 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 357 8 357 9+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 357 10 363 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 357 10 357 11 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 357 12 363 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 357 12 357 14+ , SrcSpan "tests/examples/Directory.hs" 357 15 357 15+ , SrcSpan "tests/examples/Directory.hs" 358 15 358 15+ , SrcSpan "tests/examples/Directory.hs" 399 1 399 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 357 15 357 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 357 20 357 22 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 357 15 357 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 357 15 357 19+ , srcInfoPoints = []+ }+ "temp"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 357 23 357 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 357 23 357 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 357 23 357 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 357+ 23+ 357+ 26+ , srcInfoPoints = []+ }+ "try")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 357 27 357 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 357 27 357 28+ , SrcSpan+ "tests/examples/Directory.hs" 357 40 357 41+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 357 28 357 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 357+ 28+ 357+ 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 357+ 28+ 357+ 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 357+ 28+ 357+ 38+ , srcInfoPoints = []+ }+ "removeFile")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 357+ 39+ 357+ 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 357+ 39+ 357+ 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 357+ 39+ 357+ 40+ , srcInfoPoints = []+ }+ "f"))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 358 15 363 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 358 15 358 19+ , SrcSpan "tests/examples/Directory.hs" 358 25 358 27+ , SrcSpan "tests/examples/Directory.hs" 359 17 359 17+ , SrcSpan "tests/examples/Directory.hs" 363 17 363 17+ , SrcSpan "tests/examples/Directory.hs" 399 1 399 0+ ]+ }+ (Case+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 358 15 363 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 358 15 358 19+ , SrcSpan "tests/examples/Directory.hs" 358 25 358 27+ , SrcSpan "tests/examples/Directory.hs" 359 17 359 17+ , SrcSpan "tests/examples/Directory.hs" 363 17 363 17+ , SrcSpan "tests/examples/Directory.hs" 399 1 399 0+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 358 20 358 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 358 20 358 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 358+ 20+ 358+ 24+ , srcInfoPoints = []+ }+ "temp")))+ [ Alt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 359 17 362 57+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 359 17 359 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 17+ 359+ 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 17+ 359+ 21+ , srcInfoPoints = []+ }+ "Left"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 22+ 359+ 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 22+ 359+ 23+ , srcInfoPoints = []+ }+ "e")+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 359 25 362 57+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 25+ 359+ 27+ ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 28+ 362+ 57+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 28+ 359+ 30+ , SrcSpan+ "tests/examples/Directory.hs"+ 359+ 31+ 359+ 31+ , SrcSpan+ "tests/examples/Directory.hs"+ 361+ 31+ 361+ 31+ , SrcSpan+ "tests/examples/Directory.hs"+ 362+ 31+ 362+ 31+ , SrcSpan+ "tests/examples/Directory.hs"+ 363+ 17+ 363+ 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 31+ 359+ 60+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 37+ 359+ 39+ ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 31+ 359+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 31+ 359+ 36+ , srcInfoPoints = []+ }+ "isDir"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 40+ 359+ 60+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 40+ 359+ 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 40+ 359+ 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 40+ 359+ 58+ , srcInfoPoints = []+ }+ "doesDirectoryExist")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 59+ 359+ 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 59+ 359+ 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 359+ 59+ 359+ 60+ , srcInfoPoints = []+ }+ "f"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 31+ 361+ 72+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 31+ 361+ 72+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 31+ 361+ 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 31+ 361+ 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 31+ 361+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 31+ 361+ 37+ , srcInfoPoints = []+ }+ "unless")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 38+ 361+ 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 38+ 361+ 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 38+ 361+ 43+ , srcInfoPoints = []+ }+ "isDir"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 44+ 361+ 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 44+ 361+ 45+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 44+ 361+ 45+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 46+ 361+ 72+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 46+ 361+ 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 46+ 361+ 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 46+ 361+ 51+ , srcInfoPoints = []+ }+ "throw")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 52+ 361+ 72+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 52+ 361+ 53+ , SrcSpan+ "tests/examples/Directory.hs"+ 361+ 71+ 361+ 72+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 53+ 361+ 71+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 55+ 361+ 57+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 53+ 361+ 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 53+ 361+ 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 53+ 361+ 54+ , srcInfoPoints = []+ }+ "e")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 58+ 361+ 71+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 58+ 361+ 71+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 361+ 58+ 361+ 71+ , srcInfoPoints = []+ }+ "SomeException")))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 31+ 362+ 57+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 31+ 362+ 57+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 31+ 362+ 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 31+ 362+ 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 31+ 362+ 55+ , srcInfoPoints = []+ }+ "removeDirectoryRecursive")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 56+ 362+ 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 56+ 362+ 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 362+ 56+ 362+ 57+ , srcInfoPoints = []+ }+ "f"))))+ ]))+ Nothing+ , Alt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 363 17 363 37+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 363 17 363 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 17+ 363+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 17+ 363+ 22+ , srcInfoPoints = []+ }+ "Right"))+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 23+ 363+ 24+ , srcInfoPoints = []+ }+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 363 25 363 37+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 25+ 363+ 27+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 28+ 363+ 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 28+ 363+ 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 28+ 363+ 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 28+ 363+ 34+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 35+ 363+ 37+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 35+ 363+ 36+ , SrcSpan+ "tests/examples/Directory.hs"+ 363+ 36+ 363+ 37+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 35+ 363+ 37+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 35+ 363+ 36+ , SrcSpan+ "tests/examples/Directory.hs"+ 363+ 36+ 363+ 37+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 35+ 363+ 37+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 363+ 35+ 363+ 36+ , SrcSpan+ "tests/examples/Directory.hs"+ 363+ 36+ 363+ 37+ ]+ })))))+ Nothing+ ])+ ]))+ Nothing+ ]+ ]))+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 1 399 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 399 12 399 14 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 1 399 11+ , srcInfoPoints = []+ }+ "removeFile"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 15 399 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 399 24 399 26 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 15 399 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 15 399 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 15 399 23+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 27 399 32+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 27 399 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 27 399 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 27 399 29+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 30 399 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 399 30 399 31+ , SrcSpan "tests/examples/Directory.hs" 399 31 399 32+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 30 399 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 399 30 399 31+ , SrcSpan "tests/examples/Directory.hs" 399 31 399 32+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 399 30 399 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 399 30 399 31+ , SrcSpan "tests/examples/Directory.hs" 399 31 399 32+ ]+ })))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 400 1 401 24+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 400 1 401 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 400 1 400 11+ , srcInfoPoints = []+ }+ "removeFile")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 400 12 400 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 400 12 400 16+ , srcInfoPoints = []+ }+ "path")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 400 17 401 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 400 17 400 18 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 3 401 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 3 401 19+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 3 401 19+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 3 401 19+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 3 401 19+ , srcInfoPoints = []+ }+ "deleteFile")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 20 401 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 20 401 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 401 20 401 24+ , srcInfoPoints = []+ }+ "path")))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 1 452 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 452 17 452 19 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 1 452 16+ , srcInfoPoints = []+ }+ "renameDirectory"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 20 452 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 452 29 452 31 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 20 452 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 20 452 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 20 452 28+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 32 452 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 452 41 452 43 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 32 452 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 32 452 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 32 452 40+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 44 452 49+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 44 452 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 44 452 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 44 452 46+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 47 452 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 452 47 452 48+ , SrcSpan "tests/examples/Directory.hs" 452 48 452 49+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 47 452 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 452 47 452 48+ , SrcSpan "tests/examples/Directory.hs" 452 48 452 49+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 452 47 452 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 452 47 452 48+ , SrcSpan "tests/examples/Directory.hs" 452 48 452 49+ ]+ }))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 1 463 64+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 1 463 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 1 453 16+ , srcInfoPoints = []+ }+ "renameDirectory")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 17 453 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 17 453 22+ , srcInfoPoints = []+ }+ "opath")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 23 453 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 23 453 28+ , srcInfoPoints = []+ }+ "npath")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 29 463 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 453 29 453 30 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 453 31 463 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 453 31 453 33+ , SrcSpan "tests/examples/Directory.hs" 456 4 456 4+ , SrcSpan "tests/examples/Directory.hs" 509 1 509 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 456 4 463 64+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 456 4 463 64+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 456 4 456 42+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 4 456 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 4 456 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 4 456 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 4 456 18+ , srcInfoPoints = []+ }+ "withFileStatus")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 19 456 36+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 19 456 36+ , srcInfoPoints = []+ }+ "renameDirectory"+ "renameDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 37 456 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 37 456 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 37 456 42+ , srcInfoPoints = []+ }+ "opath"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 456 43 456 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 43 456 44+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 43 456 44+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 456 45 463 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 456 45 456 46+ , SrcSpan "tests/examples/Directory.hs" 456 49 456 51+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 46 456 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 46 456 48+ , srcInfoPoints = []+ }+ "st")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 456 52 463 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 456 52 456 54+ , SrcSpan "tests/examples/Directory.hs" 457 4 457 4+ , SrcSpan "tests/examples/Directory.hs" 457 4 457 4+ , SrcSpan "tests/examples/Directory.hs" 458 4 458 4+ , SrcSpan "tests/examples/Directory.hs" 509 1 509 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 457 4 457 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 457 11 457 13 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 457 4 457 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 457 4 457 10+ , srcInfoPoints = []+ }+ "is_dir"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 457 14 457 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 457 14 457 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 457 14 457 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 457 14 457 25+ , srcInfoPoints = []+ }+ "isDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 457 26 457 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 457 26 457 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 457 26 457 28+ , srcInfoPoints = []+ }+ "st"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 458 4 463 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 458 4 458 6+ , SrcSpan "tests/examples/Directory.hs" 459 5 459 9+ , SrcSpan "tests/examples/Directory.hs" 462 5 462 9+ ]+ }+ (If+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 458 4 463 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 458 4 458 6+ , SrcSpan "tests/examples/Directory.hs" 459 5 459 9+ , SrcSpan "tests/examples/Directory.hs" 462 5 462 9+ ]+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 458 7 458 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 458 7 458 8+ , SrcSpan+ "tests/examples/Directory.hs" 458 18 458 19+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 458 8 458 18+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 458 8 458 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 458+ 8+ 458+ 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 458+ 8+ 458+ 11+ , srcInfoPoints = []+ }+ "not")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 458 12 458 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 458+ 12+ 458+ 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 458+ 12+ 458+ 18+ , srcInfoPoints = []+ }+ "is_dir")))))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 459 10 461 45+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 459 10 459 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 459 10 459 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 459+ 10+ 459+ 21+ , srcInfoPoints = []+ }+ "ioException")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 459 22 461 45+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 459 22 459 23+ , SrcSpan+ "tests/examples/Directory.hs" 461 44 461 45+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 459 23 461 44+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 459+ 23+ 460+ 95+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 459+ 23+ 459+ 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 459+ 23+ 459+ 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 459+ 23+ 459+ 40+ , srcInfoPoints = []+ }+ "ioeSetErrorString")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 27+ 460+ 95+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 27+ 460+ 28+ , SrcSpan+ "tests/examples/Directory.hs"+ 460+ 94+ 460+ 95+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 28+ 460+ 94+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 28+ 460+ 81+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 28+ 460+ 73+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 28+ 460+ 55+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 28+ 460+ 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 28+ 460+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 28+ 460+ 37+ , srcInfoPoints = []+ }+ "mkIOError")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 38+ 460+ 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 38+ 460+ 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 38+ 460+ 55+ , srcInfoPoints = []+ }+ "InappropriateType"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 56+ 460+ 73+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 56+ 460+ 73+ , srcInfoPoints = []+ }+ "renameDirectory"+ "renameDirectory")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 74+ 460+ 81+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 74+ 460+ 81+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 74+ 460+ 81+ , srcInfoPoints = []+ }+ "Nothing"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 82+ 460+ 94+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 82+ 460+ 83+ , SrcSpan+ "tests/examples/Directory.hs"+ 460+ 93+ 460+ 94+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 83+ 460+ 93+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 83+ 460+ 87+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 83+ 460+ 87+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 83+ 460+ 87+ , srcInfoPoints = []+ }+ "Just")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 88+ 460+ 93+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 88+ 460+ 93+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 460+ 88+ 460+ 93+ , srcInfoPoints = []+ }+ "opath"))))))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 461+ 27+ 461+ 44+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 461+ 27+ 461+ 44+ , srcInfoPoints = []+ }+ "not a directory"+ "not a directory")))))+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 462 10 463 64+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 462 10 462 12+ , SrcSpan "tests/examples/Directory.hs" 463 4 463 4+ , SrcSpan "tests/examples/Directory.hs" 463 4 463 4+ , SrcSpan "tests/examples/Directory.hs" 509 1 509 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 463 4 463 64+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 463 4 463 64+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 4+ 463+ 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 4+ 463+ 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 4+ 463+ 20+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 4+ 463+ 20+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 4+ 463+ 20+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 4+ 463+ 20+ , srcInfoPoints = []+ }+ "moveFileEx")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 21+ 463+ 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 21+ 463+ 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 21+ 463+ 26+ , srcInfoPoints = []+ }+ "opath"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 27+ 463+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 27+ 463+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 27+ 463+ 32+ , srcInfoPoints = []+ }+ "npath"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 33+ 463+ 64+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 33+ 463+ 64+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 33+ 463+ 64+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 463+ 33+ 463+ 64+ , srcInfoPoints = []+ }+ "mOVEFILE_REPLACE_EXISTING"))))+ ]))+ ])))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 1 509 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 509 12 509 14 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 1 509 11+ , srcInfoPoints = []+ }+ "renameFile"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 15 509 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 509 24 509 26 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 15 509 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 15 509 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 15 509 23+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 27 509 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 509 36 509 38 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 27 509 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 27 509 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 27 509 35+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 39 509 44+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 39 509 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 39 509 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 39 509 41+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 42 509 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 509 42 509 43+ , SrcSpan "tests/examples/Directory.hs" 509 43 509 44+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 42 509 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 509 42 509 43+ , SrcSpan "tests/examples/Directory.hs" 509 43 509 44+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 509 42 509 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 509 42 509 43+ , SrcSpan "tests/examples/Directory.hs" 509 43 509 44+ ]+ }))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 1 520 64+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 1 520 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 1 510 11+ , srcInfoPoints = []+ }+ "renameFile")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 12 510 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 12 510 17+ , srcInfoPoints = []+ }+ "opath")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 18 510 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 18 510 23+ , srcInfoPoints = []+ }+ "npath")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 24 520 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 510 24 510 25 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 510 26 520 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 510 26 510 28+ , SrcSpan "tests/examples/Directory.hs" 513 4 513 4+ , SrcSpan "tests/examples/Directory.hs" 528 1 528 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 513 4 520 64+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 513 4 520 64+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 513 4 513 46+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 4 513 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 4 513 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 4 513 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 4 513 27+ , srcInfoPoints = []+ }+ "withFileOrSymlinkStatus")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 28 513 40+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 28 513 40+ , srcInfoPoints = []+ }+ "renameFile"+ "renameFile")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 41 513 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 41 513 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 41 513 46+ , srcInfoPoints = []+ }+ "opath"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 513 47 513 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 47 513 48+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 47 513 48+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 513 49 520 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 513 49 513 50+ , SrcSpan "tests/examples/Directory.hs" 513 53 513 55+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 50 513 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 50 513 52+ , srcInfoPoints = []+ }+ "st")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 513 56 520 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 513 56 513 58+ , SrcSpan "tests/examples/Directory.hs" 514 4 514 4+ , SrcSpan "tests/examples/Directory.hs" 514 4 514 4+ , SrcSpan "tests/examples/Directory.hs" 515 4 515 4+ , SrcSpan "tests/examples/Directory.hs" 528 1 528 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 514 4 514 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 514 11 514 13 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 514 4 514 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 514 4 514 10+ , srcInfoPoints = []+ }+ "is_dir"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 514 14 514 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 514 14 514 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 514 14 514 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 514 14 514 25+ , srcInfoPoints = []+ }+ "isDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 514 26 514 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 514 26 514 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 514 26 514 28+ , srcInfoPoints = []+ }+ "st"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 515 4 520 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 515 4 515 6+ , SrcSpan "tests/examples/Directory.hs" 516 5 516 9+ , SrcSpan "tests/examples/Directory.hs" 519 5 519 9+ ]+ }+ (If+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 515 4 520 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 515 4 515 6+ , SrcSpan "tests/examples/Directory.hs" 516 5 516 9+ , SrcSpan "tests/examples/Directory.hs" 519 5 519 9+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 515 7 515 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 515 7 515 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 515 7 515 13+ , srcInfoPoints = []+ }+ "is_dir")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 516 10 518 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 516 10 516 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 516 10 516 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 516+ 10+ 516+ 21+ , srcInfoPoints = []+ }+ "ioException")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 516 22 518 32+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 516 22 516 23+ , SrcSpan+ "tests/examples/Directory.hs" 518 31 518 32+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 516 23 518 31+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 516+ 23+ 517+ 78+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 516+ 23+ 516+ 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 516+ 23+ 516+ 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 516+ 23+ 516+ 40+ , srcInfoPoints = []+ }+ "ioeSetErrorString")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 15+ 517+ 78+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 15+ 517+ 16+ , SrcSpan+ "tests/examples/Directory.hs"+ 517+ 77+ 517+ 78+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 16+ 517+ 77+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 16+ 517+ 64+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 16+ 517+ 56+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 16+ 517+ 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 16+ 517+ 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 16+ 517+ 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 16+ 517+ 25+ , srcInfoPoints = []+ }+ "mkIOError")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 26+ 517+ 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 26+ 517+ 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 26+ 517+ 43+ , srcInfoPoints = []+ }+ "InappropriateType"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 44+ 517+ 56+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 44+ 517+ 56+ , srcInfoPoints = []+ }+ "renameFile"+ "renameFile")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 57+ 517+ 64+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 57+ 517+ 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 57+ 517+ 64+ , srcInfoPoints = []+ }+ "Nothing"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 65+ 517+ 77+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 65+ 517+ 66+ , SrcSpan+ "tests/examples/Directory.hs"+ 517+ 76+ 517+ 77+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 66+ 517+ 76+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 66+ 517+ 70+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 66+ 517+ 70+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 66+ 517+ 70+ , srcInfoPoints = []+ }+ "Just")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 71+ 517+ 76+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 71+ 517+ 76+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 517+ 71+ 517+ 76+ , srcInfoPoints = []+ }+ "opath"))))))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 518+ 15+ 518+ 31+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 518+ 15+ 518+ 31+ , srcInfoPoints = []+ }+ "is a directory"+ "is a directory")))))+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 519 10 520 64+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 519 10 519 12+ , SrcSpan "tests/examples/Directory.hs" 520 4 520 4+ , SrcSpan "tests/examples/Directory.hs" 520 4 520 4+ , SrcSpan "tests/examples/Directory.hs" 528 1 528 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 520 4 520 64+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 520 4 520 64+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 4+ 520+ 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 4+ 520+ 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 4+ 520+ 20+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 4+ 520+ 20+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 4+ 520+ 20+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 4+ 520+ 20+ , srcInfoPoints = []+ }+ "moveFileEx")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 21+ 520+ 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 21+ 520+ 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 21+ 520+ 26+ , srcInfoPoints = []+ }+ "opath"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 27+ 520+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 27+ 520+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 27+ 520+ 32+ , srcInfoPoints = []+ }+ "npath"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 33+ 520+ 64+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 33+ 520+ 64+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 33+ 520+ 64+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 520+ 33+ 520+ 64+ , srcInfoPoints = []+ }+ "mOVEFILE_REPLACE_EXISTING"))))+ ]))+ ])))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 1 528 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 528 10 528 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 1 528 9+ , srcInfoPoints = []+ }+ "copyFile"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 13 528 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 528 22 528 24 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 13 528 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 13 528 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 13 528 21+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 25 528 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 528 34 528 36 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 25 528 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 25 528 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 25 528 33+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 37 528 42+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 37 528 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 37 528 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 37 528 39+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 40 528 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 528 40 528 41+ , SrcSpan "tests/examples/Directory.hs" 528 41 528 42+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 40 528 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 528 40 528 41+ , SrcSpan "tests/examples/Directory.hs" 528 41 528 42+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 528 40 528 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 528 40 528 41+ , SrcSpan "tests/examples/Directory.hs" 528 41 528 42+ ]+ }))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 1 551 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 531 5 531 10 ]+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 1 551 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 531 5 531 10 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 1 529 9+ , srcInfoPoints = []+ }+ "copyFile")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 10 529 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 10 529 19+ , srcInfoPoints = []+ }+ "fromFPath")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 20 529 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 20 529 27+ , srcInfoPoints = []+ }+ "toFPath")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 529 28 530 73+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 529 28 529 29 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 5 530 73+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 5 530 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 5 530 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 5 530 9+ , srcInfoPoints = []+ }+ "copy")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 10 530 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 530 10 530 11+ , SrcSpan "tests/examples/Directory.hs" 530 11 530 24+ , SrcSpan "tests/examples/Directory.hs" 530 24 530 25+ ]+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 10 530 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 530 10 530 11+ , SrcSpan "tests/examples/Directory.hs" 530 11 530 24+ , SrcSpan "tests/examples/Directory.hs" 530 24 530 25+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 11 530 24+ , srcInfoPoints = []+ }+ "Prelude")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 11 530 24+ , srcInfoPoints = []+ }+ "catch")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 26 530 73+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 530 26 530 27+ , SrcSpan "tests/examples/Directory.hs" 530 72 530 73+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 27 530 72+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 530 27 530 28+ , SrcSpan "tests/examples/Directory.hs" 530 32 530 34+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 28 530 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 28 530 31+ , srcInfoPoints = []+ }+ "exc")+ ]+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 530 35 530 72+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 35 530 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 35 530 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 35 530 40+ , srcInfoPoints = []+ }+ "throw")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 41 530 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 41 530 42+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 41 530 42+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 43 530 72+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 43 530 61+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 43 530 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 43 530 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 530 43 530 57+ , srcInfoPoints = []+ }+ "ioeSetLocation")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 58 530 61+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 58 530 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 530 58 530 61+ , srcInfoPoints = []+ }+ "exc"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 62 530 72+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 530 62 530 72+ , srcInfoPoints = []+ }+ "copyFile"+ "copyFile"))))))))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 531 11 551 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 531 11 531 11+ , SrcSpan "tests/examples/Directory.hs" 537 11 537 11+ , SrcSpan "tests/examples/Directory.hs" 538 11 538 11+ , SrcSpan "tests/examples/Directory.hs" 541 11 541 11+ , SrcSpan "tests/examples/Directory.hs" 543 11 543 11+ , SrcSpan "tests/examples/Directory.hs" 549 11 549 11+ , SrcSpan "tests/examples/Directory.hs" 550 11 550 11+ , SrcSpan "tests/examples/Directory.hs" 551 11 551 11+ , SrcSpan "tests/examples/Directory.hs" 560 1 560 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 531 11 536 48+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 531 11 531 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 531 11 531 15+ , srcInfoPoints = []+ }+ "copy"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 531 16 536 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 531 16 531 17 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 531 18 536 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 18 531 68+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 18 531 61+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 18 531 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 18 531 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 531 18 531 25+ , srcInfoPoints = []+ }+ "bracket")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 26 531 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 531 26 531 27+ , SrcSpan "tests/examples/Directory.hs" 531 60 531 61+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 27 531 60+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 531 27 531 51+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 531 27 531 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 531+ 27+ 531+ 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 531+ 27+ 531+ 41+ , srcInfoPoints = []+ }+ "openBinaryFile")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 531 42 531 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 531+ 42+ 531+ 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 531+ 42+ 531+ 51+ , srcInfoPoints = []+ }+ "fromFPath"))))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 531 52 531 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 531 52 531 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 531+ 52+ 531+ 60+ , srcInfoPoints = []+ }+ "ReadMode"))))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 62 531 68+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 62 531 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 62 531 68+ , srcInfoPoints = []+ }+ "hClose"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 69 531 70+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 69 531 70+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 69 531 70+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 71 536 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 531 71 531 72+ , SrcSpan "tests/examples/Directory.hs" 531 78 531 80+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 72 531 77+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 531 72 531 77+ , srcInfoPoints = []+ }+ "hFrom")+ ]+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 18 536 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 18 532 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 18 532 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 18 532 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 18 532 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 532+ 18+ 532+ 32+ , srcInfoPoints = []+ }+ "bracketOnError")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 33 532 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 33 532 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 532+ 33+ 532+ 40+ , srcInfoPoints = []+ }+ "openTmp"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 41 532 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 41 532 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 41 532 49+ , srcInfoPoints = []+ }+ "cleanTmp"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 50 532 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 50 532 51+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 50 532 51+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 52 536 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 532 52 532 53+ , SrcSpan "tests/examples/Directory.hs" 532 70 532 72+ ]+ }+ [ PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 532 53 532 69+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 532 53 532 54+ , SrcSpan+ "tests/examples/Directory.hs" 532 62 532 63+ , SrcSpan+ "tests/examples/Directory.hs" 532 68 532 69+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 54 532 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 532+ 54+ 532+ 62+ , srcInfoPoints = []+ }+ "tmpFPath")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 532 64 532 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 532+ 64+ 532+ 68+ , srcInfoPoints = []+ }+ "hTmp")+ ]+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 533 18 536 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 533 18 533 20+ , SrcSpan+ "tests/examples/Directory.hs" 533 21 533 21+ , SrcSpan+ "tests/examples/Directory.hs" 534 21 534 21+ , SrcSpan+ "tests/examples/Directory.hs" 535 21 535 21+ , SrcSpan+ "tests/examples/Directory.hs" 536 21 536 21+ , SrcSpan "tests/examples/Directory.hs" 537 11 537 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 533 21 533 69+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 533 21 533 69+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 21+ 533+ 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 21+ 533+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 21+ 533+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 21+ 533+ 32+ , srcInfoPoints = []+ }+ "allocaBytes")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 33+ 533+ 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 33+ 533+ 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 33+ 533+ 43+ , srcInfoPoints = []+ }+ "bufferSize"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 44+ 533+ 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 44+ 533+ 45+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 44+ 533+ 45+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 46+ 533+ 69+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 46+ 533+ 64+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 46+ 533+ 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 46+ 533+ 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 46+ 533+ 58+ , srcInfoPoints = []+ }+ "copyContents")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 59+ 533+ 64+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 59+ 533+ 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 59+ 533+ 64+ , srcInfoPoints = []+ }+ "hFrom"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 65+ 533+ 69+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 65+ 533+ 69+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 533+ 65+ 533+ 69+ , srcInfoPoints = []+ }+ "hTmp")))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 534 21 534 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 534 21 534 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 534+ 21+ 534+ 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 534+ 21+ 534+ 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 534+ 21+ 534+ 27+ , srcInfoPoints = []+ }+ "hClose")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 534+ 28+ 534+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 534+ 28+ 534+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 534+ 28+ 534+ 32+ , srcInfoPoints = []+ }+ "hTmp"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 535 21 535 76+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 535 21 535 76+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 21+ 535+ 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 21+ 535+ 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 21+ 535+ 39+ , srcInfoPoints = []+ }+ "ignoreIOExceptions")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 40+ 535+ 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 40+ 535+ 41+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 40+ 535+ 41+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 42+ 535+ 76+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 42+ 535+ 67+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 42+ 535+ 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 42+ 535+ 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 42+ 535+ 57+ , srcInfoPoints = []+ }+ "copyPermissions")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 58+ 535+ 67+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 58+ 535+ 67+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 58+ 535+ 67+ , srcInfoPoints = []+ }+ "fromFPath"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 68+ 535+ 76+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 68+ 535+ 76+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 535+ 68+ 535+ 76+ , srcInfoPoints = []+ }+ "tmpFPath")))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 536 21 536 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 536 21 536 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 21+ 536+ 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 21+ 536+ 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 21+ 536+ 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 21+ 536+ 31+ , srcInfoPoints = []+ }+ "renameFile")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 32+ 536+ 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 32+ 536+ 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 32+ 536+ 40+ , srcInfoPoints = []+ }+ "tmpFPath"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 41+ 536+ 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 41+ 536+ 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 536+ 41+ 536+ 48+ , srcInfoPoints = []+ }+ "toFPath"))))+ ]))))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 537 11 537 79+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 537 11 537 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 537 11 537 18+ , srcInfoPoints = []+ }+ "openTmp"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 537 19 537 79+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 537 19 537 20 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 537 21 537 79+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 21 537 63+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 21 537 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 21 537 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 21 537 39+ , srcInfoPoints = []+ }+ "openBinaryTempFile")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 40 537 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 537 40 537 41+ , SrcSpan "tests/examples/Directory.hs" 537 62 537 63+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 41 537 62+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 41 537 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 537 41 537 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 537 41 537 54+ , srcInfoPoints = []+ }+ "takeDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 55 537 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 537 55 537 62+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 537 55 537 62+ , srcInfoPoints = []+ }+ "toFPath"))))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 64 537 79+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 537 64 537 79+ , srcInfoPoints = []+ }+ ".copyFile.tmp"+ ".copyFile.tmp"))))+ Nothing+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 538 11 540 60+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 538 11 540 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 538 11 538 19+ , srcInfoPoints = []+ }+ "cleanTmp")+ [ PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 538 20 538 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 538 20 538 21+ , SrcSpan "tests/examples/Directory.hs" 538 29 538 30+ , SrcSpan "tests/examples/Directory.hs" 538 35 538 36+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 538 21 538 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 538 21 538 29+ , srcInfoPoints = []+ }+ "tmpFPath")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 538 31 538 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 538 31 538 35+ , srcInfoPoints = []+ }+ "hTmp")+ ]+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 539 15 540 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 539 15 539 16 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 539 17 540 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 539 17 539 19+ , SrcSpan "tests/examples/Directory.hs" 539 20 539 20+ , SrcSpan "tests/examples/Directory.hs" 540 20 540 20+ , SrcSpan "tests/examples/Directory.hs" 541 11 541 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 539 20 539 52+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 539 20 539 52+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 539 20 539 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 539 20 539 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 539+ 20+ 539+ 38+ , srcInfoPoints = []+ }+ "ignoreIOExceptions")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 539 39 539 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 539 39 539 40+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 539+ 39+ 539+ 40+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 539 41 539 52+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 539 41 539 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 539+ 41+ 539+ 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 539+ 41+ 539+ 47+ , srcInfoPoints = []+ }+ "hClose")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 539 48 539 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 539+ 48+ 539+ 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 539+ 48+ 539+ 52+ , srcInfoPoints = []+ }+ "hTmp")))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 540 20 540 60+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 540 20 540 60+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 540 20 540 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 540 20 540 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 540+ 20+ 540+ 38+ , srcInfoPoints = []+ }+ "ignoreIOExceptions")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 540 39 540 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 540 39 540 40+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 540+ 39+ 540+ 40+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 540 41 540 60+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 540 41 540 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 540+ 41+ 540+ 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 540+ 41+ 540+ 51+ , srcInfoPoints = []+ }+ "removeFile")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 540 52 540 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 540+ 52+ 540+ 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 540+ 52+ 540+ 60+ , srcInfoPoints = []+ }+ "tmpFPath")))))+ ]))+ Nothing+ ]+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 541 11 541 28+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 541 11 541 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 541 11 541 21+ , srcInfoPoints = []+ }+ "bufferSize"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 541 22 541 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 541 22 541 23 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 541 24 541 28+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 541 24 541 28+ , srcInfoPoints = []+ }+ 1024+ "1024")))+ Nothing+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 543 11 547 56+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 543 11 547 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 543 11 543 23+ , srcInfoPoints = []+ }+ "copyContents")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 543 24 543 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 543 24 543 29+ , srcInfoPoints = []+ }+ "hFrom")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 543 30 543 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 543 30 543 33+ , srcInfoPoints = []+ }+ "hTo")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 543 34 543 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 543 34 543 40+ , srcInfoPoints = []+ }+ "buffer")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 543 41 547 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 543 41 543 42 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 543 43 547 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 543 43 543 45+ , SrcSpan "tests/examples/Directory.hs" 544 19 544 19+ , SrcSpan "tests/examples/Directory.hs" 545 19 545 19+ , SrcSpan "tests/examples/Directory.hs" 549 11 549 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 544 19 544 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 544 25 544 27 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 544 19 544 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 544 19 544 24+ , srcInfoPoints = []+ }+ "count"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 544 28 544 59+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 544 28 544 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 544 28 544 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 28+ 544+ 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 28+ 544+ 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 28+ 544+ 35+ , srcInfoPoints = []+ }+ "hGetBuf")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 36+ 544+ 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 36+ 544+ 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 36+ 544+ 41+ , srcInfoPoints = []+ }+ "hFrom"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 544 42 544 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 42+ 544+ 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 42+ 544+ 48+ , srcInfoPoints = []+ }+ "buffer"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 544 49 544 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 544 49 544 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 544+ 49+ 544+ 59+ , srcInfoPoints = []+ }+ "bufferSize"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 545 19 547 56+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 545 19 547 56+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 545 19 545 35+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 545 19 545 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 19+ 545+ 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 19+ 545+ 23+ , srcInfoPoints = []+ }+ "when")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 545 24 545 35+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 545 24 545 25+ , SrcSpan+ "tests/examples/Directory.hs" 545 34 545 35+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 25+ 545+ 34+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 25+ 545+ 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 25+ 545+ 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 25+ 545+ 30+ , srcInfoPoints = []+ }+ "count")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 31+ 545+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 31+ 545+ 32+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 31+ 545+ 32+ , srcInfoPoints = []+ }+ ">")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 33+ 545+ 34+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 33+ 545+ 34+ , srcInfoPoints = []+ }+ 0+ "0")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 545 36 545 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 545 36 545 37+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 545+ 36+ 545+ 37+ , srcInfoPoints = []+ }+ "$")))+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 545 38 547 56+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 545 38 545 40+ , SrcSpan+ "tests/examples/Directory.hs" 546 27 546 27+ , SrcSpan+ "tests/examples/Directory.hs" 547 27 547 27+ , SrcSpan+ "tests/examples/Directory.hs" 549 11 549 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 546 27 546 51+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 27+ 546+ 51+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 27+ 546+ 45+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 27+ 546+ 38+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 27+ 546+ 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 27+ 546+ 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 27+ 546+ 34+ , srcInfoPoints = []+ }+ "hPutBuf")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 35+ 546+ 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 35+ 546+ 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 35+ 546+ 38+ , srcInfoPoints = []+ }+ "hTo"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 39+ 546+ 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 39+ 546+ 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 39+ 546+ 45+ , srcInfoPoints = []+ }+ "buffer"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 46+ 546+ 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 46+ 546+ 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 546+ 46+ 546+ 51+ , srcInfoPoints = []+ }+ "count"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 547 27 547 56+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 27+ 547+ 56+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 27+ 547+ 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 27+ 547+ 45+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 27+ 547+ 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 27+ 547+ 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 27+ 547+ 39+ , srcInfoPoints = []+ }+ "copyContents")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 40+ 547+ 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 40+ 547+ 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 40+ 547+ 45+ , srcInfoPoints = []+ }+ "hFrom"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 46+ 547+ 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 46+ 547+ 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 46+ 547+ 49+ , srcInfoPoints = []+ }+ "hTo"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 50+ 547+ 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 50+ 547+ 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 547+ 50+ 547+ 56+ , srcInfoPoints = []+ }+ "buffer"))))+ ]))+ ]))+ Nothing+ ]+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 549 11 549 64+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 549 11 549 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 549 11 549 29+ , srcInfoPoints = []+ }+ "ignoreIOExceptions")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 30 549 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 30 549 32+ , srcInfoPoints = []+ }+ "io")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 549 33 549 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 549 33 549 34 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 35 549 64+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 35 549 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 35 549 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 35 549 37+ , srcInfoPoints = []+ }+ "io")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 38 549 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 549 38 549 39+ , SrcSpan "tests/examples/Directory.hs" 549 39 549 44+ , SrcSpan "tests/examples/Directory.hs" 549 44 549 45+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 38 549 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 549 38 549 39+ , SrcSpan "tests/examples/Directory.hs" 549 39 549 44+ , SrcSpan "tests/examples/Directory.hs" 549 44 549 45+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 39 549 44+ , srcInfoPoints = []+ }+ "catch")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 46 549 64+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 46 549 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 549 46 549 64+ , srcInfoPoints = []+ }+ "ioExceptionIgnorer")))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 550 11 550 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 550 30 550 32 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 550 11 550 29+ , srcInfoPoints = []+ }+ "ioExceptionIgnorer"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 550 33 550 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 550 45 550 47 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 550 33 550 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 33 550 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 33 550 44+ , srcInfoPoints = []+ }+ "IOException")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 550 48 550 53+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 48 550 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 48 550 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 48 550 50+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 51 550 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 550 51 550 52+ , SrcSpan "tests/examples/Directory.hs" 550 52 550 53+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 51 550 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 550 51 550 52+ , SrcSpan "tests/examples/Directory.hs" 550 52 550 53+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 550 51 550 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 550 51 550 52+ , SrcSpan "tests/examples/Directory.hs" 550 52 550 53+ ]+ })))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 551 11 551 43+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 551 11 551 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 551 11 551 29+ , srcInfoPoints = []+ }+ "ioExceptionIgnorer")+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 30 551 31+ , srcInfoPoints = []+ }+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 551 32 551 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 551 32 551 33 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 34 551 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 34 551 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 34 551 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 34 551 40+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 41 551 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 551 41 551 42+ , SrcSpan "tests/examples/Directory.hs" 551 42 551 43+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 41 551 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 551 41 551 42+ , SrcSpan "tests/examples/Directory.hs" 551 42 551 43+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 551 41 551 43+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 551 41 551 42+ , SrcSpan+ "tests/examples/Directory.hs" 551 42 551 43+ ]+ })))))+ Nothing+ ]+ ]))+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 1 560 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 560 18 560 20 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 1 560 17+ , srcInfoPoints = []+ }+ "canonicalizePath"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 21 560 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 560 30 560 32 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 21 560 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 21 560 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 21 560 29+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 33 560 44+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 33 560 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 33 560 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 33 560 35+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 36 560 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 36 560 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 560 36 560 44+ , srcInfoPoints = []+ }+ "FilePath")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 561 1 563 31+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 561 1 563 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 561 1 561 17+ , srcInfoPoints = []+ }+ "canonicalizePath")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 561 18 561 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 561 18 561 23+ , srcInfoPoints = []+ }+ "fpath")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 561 24 563 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 561 24 561 25 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 562 5 563 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 562 5 562 7+ , SrcSpan "tests/examples/Directory.hs" 562 8 562 8+ , SrcSpan "tests/examples/Directory.hs" 563 8 563 8+ , SrcSpan "tests/examples/Directory.hs" 568 1 568 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 562 8 562 43+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 562 13 562 15 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 562 8 562 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 562 8 562 12+ , srcInfoPoints = []+ }+ "path"))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 562 16 562 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 562 16 562 37+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 562 16 562 37+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 562 16 562 37+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 562 16 562 37+ , srcInfoPoints = []+ }+ "getFullPathName")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 562 38 562 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 562 38 562 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 562 38 562 43+ , srcInfoPoints = []+ }+ "fpath"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 563 8 563 31+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 563 8 563 31+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 563 8 563 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 8 563 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 8 563 14+ , srcInfoPoints = []+ }+ "return")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 563 15 563 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 563 15 563 16+ , SrcSpan "tests/examples/Directory.hs" 563 30 563 31+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 16 563 30+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 16 563 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 16 563 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 16 563 25+ , srcInfoPoints = []+ }+ "normalise")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 26 563 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 26 563 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 563 26 563 30+ , srcInfoPoints = []+ }+ "path"))))))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 1 568 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 568 32 568 34 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 1 568 31+ , srcInfoPoints = []+ }+ "makeRelativeToCurrentDirectory"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 35 568 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 568 44 568 46 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 35 568 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 35 568 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 35 568 43+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 47 568 58+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 47 568 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 47 568 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 47 568 49+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 50 568 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 50 568 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 568 50 568 58+ , srcInfoPoints = []+ }+ "FilePath")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 569 1 571 32+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 569 1 571 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 569 1 569 31+ , srcInfoPoints = []+ }+ "makeRelativeToCurrentDirectory")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 569 32 569 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 569 32 569 33+ , srcInfoPoints = []+ }+ "x")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 569 34 571 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 569 34 569 35 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 569 36 571 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 569 36 569 38+ , SrcSpan "tests/examples/Directory.hs" 570 5 570 5+ , SrcSpan "tests/examples/Directory.hs" 571 5 571 5+ , SrcSpan "tests/examples/Directory.hs" 591 1 591 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 570 5 570 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 570 9 570 11 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 570 5 570 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 570 5 570 8+ , srcInfoPoints = []+ }+ "cur"))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 570 12 570 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 570 12 570 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 570 12 570 31+ , srcInfoPoints = []+ }+ "getCurrentDirectory")))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 571 5 571 32+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 571 5 571 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 571 5 571 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 5 571 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 5 571 11+ , srcInfoPoints = []+ }+ "return")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 571 12 571 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 12 571 13+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 12 571 13+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 571 14 571 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 14 571 30+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 14 571 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 14 571 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 14 571 26+ , srcInfoPoints = []+ }+ "makeRelative")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 27 571 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 27 571 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 27 571 30+ , srcInfoPoints = []+ }+ "cur"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 31 571 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 31 571 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 571 31 571 32+ , srcInfoPoints = []+ }+ "x")))))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 1 591 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 591 16 591 18 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 1 591 15+ , srcInfoPoints = []+ }+ "findExecutable"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 19 591 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 591 26 591 28 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 19 591 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 19 591 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 19 591 25+ , srcInfoPoints = []+ }+ "String")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 29 591 48+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 29 591 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 29 591 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 29 591 31+ , srcInfoPoints = []+ }+ "IO")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 32 591 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 591 32 591 33+ , SrcSpan "tests/examples/Directory.hs" 591 47 591 48+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 33 591 47+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 33 591 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 33 591 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 33 591 38+ , srcInfoPoints = []+ }+ "Maybe")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 39 591 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 39 591 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 591 39 591 47+ , srcInfoPoints = []+ }+ "FilePath")))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 592 1 593 53+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 592 1 593 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 592 1 592 15+ , srcInfoPoints = []+ }+ "findExecutable")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 592 16 592 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 592 16 592 22+ , srcInfoPoints = []+ }+ "binary")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 592 23 593 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 592 23 592 24 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 3 593 53+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 3 593 34+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 3 593 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 3 593 19+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 3 593 19+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 3 593 19+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 3 593 19+ , srcInfoPoints = []+ }+ "searchPath")))+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 20 593 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 20 593 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 20 593 27+ , srcInfoPoints = []+ }+ "Nothing"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 28 593 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 28 593 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 28 593 34+ , srcInfoPoints = []+ }+ "binary"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 35 593 53+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 593 35 593 36+ , SrcSpan "tests/examples/Directory.hs" 593 52 593 53+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 36 593 52+ , srcInfoPoints = []+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 36 593 39+ , srcInfoPoints = []+ }+ (Char+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 36 593 39+ , srcInfoPoints = []+ }+ '.'+ "."))+ (QConOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 39 593 40+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 39 593 40+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 39 593 40+ , srcInfoPoints = []+ })))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 593 40 593 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 40 593 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 593 40 593 52+ , srcInfoPoints = []+ }+ "exeExtension")))))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 1 627 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 627 22 627 24 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 1 627 21+ , srcInfoPoints = []+ }+ "getDirectoryContents"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 25 627 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 627 34 627 36 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 25 627 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 25 627 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 25 627 33+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 37 627 50+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 37 627 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 37 627 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 37 627 39+ , srcInfoPoints = []+ }+ "IO")))+ (TyList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 40 627 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 627 40 627 41+ , SrcSpan "tests/examples/Directory.hs" 627 49 627 50+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 41 627 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 41 627 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 627 41 627 49+ , srcInfoPoints = []+ }+ "FilePath"))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 628 1 644 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 635 3 635 8 ]+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 628 1 644 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 635 3 635 8 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 628 1 628 21+ , srcInfoPoints = []+ }+ "getDirectoryContents")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 628 22 628 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 628 22 628 26+ , srcInfoPoints = []+ }+ "path")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 628 27 634 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 628 27 628 28 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 629 3 634 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 629 3 630 60+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 629 3 629 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 629 3 629 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 629 3 629 16+ , srcInfoPoints = []+ }+ "modifyIOError")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 629 17 630 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 629 17 629 18+ , SrcSpan "tests/examples/Directory.hs" 630 59 630 60+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 629 18 630 59+ , srcInfoPoints = []+ }+ (RightSection+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 18 629 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 629 18 629 19+ , SrcSpan "tests/examples/Directory.hs" 629 40 629 41+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 19 629 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 629 19 629 20+ , SrcSpan "tests/examples/Directory.hs" 629 20 629 34+ , SrcSpan "tests/examples/Directory.hs" 629 34 629 35+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 19 629 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 629 19 629 20+ , SrcSpan "tests/examples/Directory.hs" 629 20 629 34+ , SrcSpan "tests/examples/Directory.hs" 629 34 629 35+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 20 629 34+ , srcInfoPoints = []+ }+ "ioeSetFileName")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 36 629 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 36 629 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 36 629 40+ , srcInfoPoints = []+ }+ "path"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 42 629 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 42 629 43+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 629 42 629 43+ , srcInfoPoints = []+ }+ ".")))+ (RightSection+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 630 18 630 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 630 18 630 19+ , SrcSpan "tests/examples/Directory.hs" 630 58 630 59+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 630 19 630 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 630 19 630 20+ , SrcSpan "tests/examples/Directory.hs" 630 20 630 34+ , SrcSpan "tests/examples/Directory.hs" 630 34 630 35+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 630 19 630 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 630 19 630 20+ , SrcSpan "tests/examples/Directory.hs" 630 20 630 34+ , SrcSpan "tests/examples/Directory.hs" 630 34 630 35+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 630 20 630 34+ , srcInfoPoints = []+ }+ "ioeSetLocation")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 630 36 630 58+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 630 36 630 58+ , srcInfoPoints = []+ }+ "getDirectoryContents"+ "getDirectoryContents"))))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 630 61 630 62+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 630 61 630 62+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 630 61 630 62+ , srcInfoPoints = []+ }+ "$")))+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 630 63 634 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 630 63 630 65+ , SrcSpan "tests/examples/Directory.hs" 631 3 631 3+ , SrcSpan "tests/examples/Directory.hs" 635 3 635 3+ , SrcSpan "tests/examples/Directory.hs" 635 3 635 3+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 631 3 634 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 631 3 634 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 631 3 633 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 631 3 632 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 631 3 631 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 631 3 631 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 631 3 631 10+ , srcInfoPoints = []+ }+ "bracket")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 632 6 632 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 632 6 632 7+ , SrcSpan "tests/examples/Directory.hs" 632 41 632 42+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 632 7 632 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 632 7 632 26+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 632 7 632 26+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 7+ 632+ 26+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 7+ 632+ 26+ , srcInfoPoints = []+ }+ "findFirstFile")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 632 27 632 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 632 27 632 28+ , SrcSpan+ "tests/examples/Directory.hs" 632 40 632 41+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 632 28 632 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 28+ 632+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 28+ 632+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 28+ 632+ 32+ , srcInfoPoints = []+ }+ "path")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 33+ 632+ 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 33+ 632+ 36+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 33+ 632+ 36+ , srcInfoPoints = []+ }+ "</>")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 37+ 632+ 40+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 632+ 37+ 632+ 40+ , srcInfoPoints = []+ }+ "*"+ "*")))))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 633 6 633 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 633 6 633 7+ , SrcSpan "tests/examples/Directory.hs" 633 34 633 35+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 633 7 633 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 633 7 633 8+ , SrcSpan "tests/examples/Directory.hs" 633 14 633 16+ ]+ }+ [ PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 633 8 633 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 633 8 633 9+ , SrcSpan+ "tests/examples/Directory.hs" 633 10 633 11+ , SrcSpan+ "tests/examples/Directory.hs" 633 12 633 13+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 633 9 633 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 633 9 633 10+ , srcInfoPoints = []+ }+ "h")+ , PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 633 11 633 12+ , srcInfoPoints = []+ }+ ]+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 633 17 633 34+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 633 17 633 32+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 633 17 633 32+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 633+ 17+ 633+ 32+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 633+ 17+ 633+ 32+ , srcInfoPoints = []+ }+ "findClose")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 633 33 633 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 633 33 633 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 633+ 33+ 633+ 34+ , srcInfoPoints = []+ }+ "h")))))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 634 6 634 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 634 6 634 7+ , SrcSpan "tests/examples/Directory.hs" 634 34 634 35+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 634 7 634 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 634 7 634 8+ , SrcSpan "tests/examples/Directory.hs" 634 17 634 19+ ]+ }+ [ PTuple+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 634 8 634 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 634 8 634 9+ , SrcSpan "tests/examples/Directory.hs" 634 10 634 11+ , SrcSpan "tests/examples/Directory.hs" 634 15 634 16+ ]+ }+ Boxed+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 634 9 634 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 9 634 10+ , srcInfoPoints = []+ }+ "h")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 11 634 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 11 634 15+ , srcInfoPoints = []+ }+ "fdat")+ ]+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 634 20 634 34+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 634 20 634 31+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 20 634 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 20 634 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 634+ 20+ 634+ 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 634+ 20+ 634+ 24+ , srcInfoPoints = []+ }+ "loop")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 25 634 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 634+ 25+ 634+ 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 634+ 25+ 634+ 26+ , srcInfoPoints = []+ }+ "h"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 27 634 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 634 27 634 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 634+ 27+ 634+ 31+ , srcInfoPoints = []+ }+ "fdat"))))+ (List+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 634 32 634 34+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 634 32 634 33+ , SrcSpan+ "tests/examples/Directory.hs" 634 33 634 34+ ]+ }+ [])))))+ ])))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 638 5 644 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 638 5 638 5+ , SrcSpan "tests/examples/Directory.hs" 639 5 639 5+ , SrcSpan "tests/examples/Directory.hs" 672 1 672 0+ ]+ }+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 638 5 638 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 638 10 638 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 638 5 638 9+ , srcInfoPoints = []+ }+ "loop"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 638 13 638 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 638 26 638 28 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 638 13 638 25+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 13 638 25+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 13 638 25+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 13 638 25+ , srcInfoPoints = []+ }+ "HANDLE")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 638 29 638 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 638 44 638 46 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 29 638 43+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 29 638 43+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 29 638 43+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 29 638 43+ , srcInfoPoints = []+ }+ "FindData")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 47 638 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 638 58 638 60 ]+ }+ (TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 47 638 57+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 638 47 638 48+ , SrcSpan "tests/examples/Directory.hs" 638 56 638 57+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 48 638 56+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 48 638 56+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 638 48 638 56+ , srcInfoPoints = []+ }+ "FilePath"))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 61 638 74+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 61 638 63+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 61 638 63+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 638 61 638 63+ , srcInfoPoints = []+ }+ "IO")))+ (TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 64 638 74+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 638 64 638 65+ , SrcSpan "tests/examples/Directory.hs" 638 73 638 74+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 638 65 638 73+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 638 65 638 73+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 638 65 638 73+ , srcInfoPoints = []+ }+ "FilePath"))))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 639 5 644 37+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 639 5 644 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 639 5 639 9+ , srcInfoPoints = []+ }+ "loop")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 639 10 639 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 639 10 639 11+ , srcInfoPoints = []+ }+ "h")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 639 12 639 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 639 12 639 16+ , srcInfoPoints = []+ }+ "fdat")+ , PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 639 17 639 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 639 17 639 20+ , srcInfoPoints = []+ }+ "acc")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 639 21 644 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 639 21 639 22 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 639 23 644 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 639 23 639 25+ , SrcSpan "tests/examples/Directory.hs" 640 8 640 8+ , SrcSpan "tests/examples/Directory.hs" 641 8 641 8+ , SrcSpan "tests/examples/Directory.hs" 642 8 642 8+ , SrcSpan "tests/examples/Directory.hs" 672 1 672 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 640 8 640 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 640 17 640 19 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 640 8 640 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 640 8 640 16+ , srcInfoPoints = []+ }+ "filename"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 640 20 640 50+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 640 20 640 45+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 640 20 640 45+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 640+ 20+ 640+ 45+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 640+ 20+ 640+ 45+ , srcInfoPoints = []+ }+ "getFindDataFileName")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 640 46 640 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 640 46 640 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 640+ 46+ 640+ 50+ , srcInfoPoints = []+ }+ "fdat"))))+ , Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 641 8 641 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 641 13 641 15 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 641 8 641 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 641 8 641 12+ , srcInfoPoints = []+ }+ "more"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 641 16 641 41+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 641 16 641 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 641 16 641 34+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 641+ 16+ 641+ 34+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 641+ 16+ 641+ 34+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 641+ 16+ 641+ 34+ , srcInfoPoints = []+ }+ "findNextFile")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 641 35 641 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 641+ 35+ 641+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 641+ 35+ 641+ 36+ , srcInfoPoints = []+ }+ "h"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 641 37 641 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 641 37 641 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 641+ 37+ 641+ 41+ , srcInfoPoints = []+ }+ "fdat"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 642 8 644 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 642 8 642 10+ , SrcSpan "tests/examples/Directory.hs" 643 11 643 15+ , SrcSpan "tests/examples/Directory.hs" 644 11 644 15+ ]+ }+ (If+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 642 8 644 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 642 8 642 10+ , SrcSpan "tests/examples/Directory.hs" 643 11 643 15+ , SrcSpan "tests/examples/Directory.hs" 644 11 644 15+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 642 11 642 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 642 11 642 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 642+ 11+ 642+ 15+ , srcInfoPoints = []+ }+ "more")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 643 16 643 42+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 643 16 643 27+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 16+ 643+ 22+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 16+ 643+ 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 16+ 643+ 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 16+ 643+ 20+ , srcInfoPoints = []+ }+ "loop")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 21+ 643+ 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 21+ 643+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 21+ 643+ 22+ , srcInfoPoints = []+ }+ "h"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 23+ 643+ 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 23+ 643+ 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 23+ 643+ 27+ , srcInfoPoints = []+ }+ "fdat"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 643 28 643 42+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 643 28 643 29+ , SrcSpan+ "tests/examples/Directory.hs" 643 41 643 42+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 29+ 643+ 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 29+ 643+ 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 29+ 643+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 29+ 643+ 37+ , srcInfoPoints = []+ }+ "filename")))+ (QConOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 37+ 643+ 38+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 37+ 643+ 38+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 37+ 643+ 38+ , srcInfoPoints = []+ })))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 38+ 643+ 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 38+ 643+ 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 643+ 38+ 643+ 41+ , srcInfoPoints = []+ }+ "acc"))))))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 644 16 644 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 644 16 644 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 16+ 644+ 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 16+ 644+ 22+ , srcInfoPoints = []+ }+ "return")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 644 23 644 37+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 644 23 644 24+ , SrcSpan+ "tests/examples/Directory.hs" 644 36 644 37+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 24+ 644+ 36+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 24+ 644+ 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 24+ 644+ 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 24+ 644+ 32+ , srcInfoPoints = []+ }+ "filename")))+ (QConOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 32+ 644+ 33+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 32+ 644+ 33+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 32+ 644+ 33+ , srcInfoPoints = []+ })))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 33+ 644+ 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 33+ 644+ 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 644+ 33+ 644+ 36+ , srcInfoPoints = []+ }+ "acc")))))))+ ]))+ Nothing+ ]+ ]))+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 1 672 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 672 21 672 23 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 1 672 20+ , srcInfoPoints = []+ }+ "getCurrentDirectory"+ ]+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 24 672 35+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 24 672 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 24 672 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 24 672 26+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 27 672 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 27 672 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 672 27 672 35+ , srcInfoPoints = []+ }+ "FilePath"))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 673 1 674 28+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 673 1 673 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 673 1 673 20+ , srcInfoPoints = []+ }+ "getCurrentDirectory"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 673 21 674 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 673 21 673 22 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 673 23 674 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 673 23 673 25+ , SrcSpan "tests/examples/Directory.hs" 674 3 674 3+ , SrcSpan "tests/examples/Directory.hs" 708 1 708 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 674 3 674 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 674 3 674 28+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 674 3 674 28+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 674 3 674 28+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 674 3 674 28+ , srcInfoPoints = []+ }+ "getCurrentDirectory")))+ ]))+ Nothing+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 1 708 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 708 21 708 23 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 1 708 20+ , srcInfoPoints = []+ }+ "setCurrentDirectory"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 24 708 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 708 33 708 35 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 24 708 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 24 708 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 24 708 32+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 36 708 41+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 36 708 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 36 708 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 36 708 38+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 39 708 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 708 39 708 40+ , SrcSpan "tests/examples/Directory.hs" 708 40 708 41+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 39 708 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 708 39 708 40+ , SrcSpan "tests/examples/Directory.hs" 708 40 708 41+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 708 39 708 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 708 39 708 40+ , SrcSpan "tests/examples/Directory.hs" 708 40 708 41+ ]+ })))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 709 1 710 33+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 709 1 710 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 709 1 709 20+ , srcInfoPoints = []+ }+ "setCurrentDirectory")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 709 21 709 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 709 21 709 25+ , srcInfoPoints = []+ }+ "path")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 709 26 710 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 709 26 709 27 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 3 710 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 3 710 28+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 3 710 28+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 3 710 28+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 3 710 28+ , srcInfoPoints = []+ }+ "setCurrentDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 29 710 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 29 710 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 710 29 710 33+ , srcInfoPoints = []+ }+ "path")))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 1 716 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 716 20 716 22 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 1 716 19+ , srcInfoPoints = []+ }+ "doesDirectoryExist"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 23 716 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 716 32 716 34 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 23 716 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 23 716 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 23 716 31+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 35 716 42+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 35 716 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 35 716 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 35 716 37+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 38 716 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 38 716 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 716 38 716 42+ , srcInfoPoints = []+ }+ "Bool")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 717 1 719 61+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 717 1 719 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 717 1 717 19+ , srcInfoPoints = []+ }+ "doesDirectoryExist")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 717 20 717 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 717 20 717 24+ , srcInfoPoints = []+ }+ "name")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 717 25 719 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 717 25 717 26 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 718 4 719 61+ , srcInfoPoints = []+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 718 4 718 70+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 718 4 718 5+ , SrcSpan "tests/examples/Directory.hs" 718 69 718 70+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 718 5 718 69+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 718 5 718 45+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 718 5 718 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 5 718 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 5 718 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 5 718 19+ , srcInfoPoints = []+ }+ "withFileStatus")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 20 718 40+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 20 718 40+ , srcInfoPoints = []+ }+ "doesDirectoryExist"+ "doesDirectoryExist")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 41 718 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 41 718 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 41 718 45+ , srcInfoPoints = []+ }+ "name"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 718 46 718 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 46 718 47+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 46 718 47+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 718 48 718 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 718 48 718 49+ , SrcSpan "tests/examples/Directory.hs" 718 52 718 54+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 49 718 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 49 718 51+ , srcInfoPoints = []+ }+ "st")+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 55 718 69+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 55 718 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 55 718 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 55 718 66+ , srcInfoPoints = []+ }+ "isDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 67 718 69+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 67 718 69+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 718 67 718 69+ , srcInfoPoints = []+ }+ "st")))))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 719 4 719 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 719 4 719 5+ , SrcSpan "tests/examples/Directory.hs" 719 5 719 10+ , SrcSpan "tests/examples/Directory.hs" 719 10 719 11+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 719 4 719 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 719 4 719 5+ , SrcSpan "tests/examples/Directory.hs" 719 5 719 10+ , SrcSpan "tests/examples/Directory.hs" 719 10 719 11+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 719 5 719 10+ , srcInfoPoints = []+ }+ "catch")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 719 12 719 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 719 12 719 13+ , SrcSpan "tests/examples/Directory.hs" 719 60 719 61+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 719 13 719 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 719 35 719 37 ]+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 719 13 719 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 719 13 719 14+ , SrcSpan "tests/examples/Directory.hs" 719 33 719 34+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 14 719 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 719 14 719 15+ , SrcSpan "tests/examples/Directory.hs" 719 18 719 20+ ]+ }+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 16 719 17+ , srcInfoPoints = []+ }+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 21 719 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 21 719 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 21 719 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 719 21 719 27+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 28 719 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 28 719 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 719 28 719 33+ , srcInfoPoints = []+ }+ "False"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 719 38 719 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 719 50 719 52 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 38 719 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 38 719 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 38 719 49+ , srcInfoPoints = []+ }+ "IOException")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 53 719 60+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 53 719 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 53 719 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 53 719 55+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 56 719 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 56 719 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 719 56 719 60+ , srcInfoPoints = []+ }+ "Bool")))))))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 1 725 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 725 15 725 17 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 1 725 14+ , srcInfoPoints = []+ }+ "doesFileExist"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 18 725 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 725 27 725 29 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 18 725 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 18 725 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 18 725 26+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 30 725 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 30 725 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 30 725 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 30 725 32+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 33 725 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 33 725 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 725 33 725 37+ , srcInfoPoints = []+ }+ "Bool")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 726 1 728 61+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 726 1 728 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 726 1 726 14+ , srcInfoPoints = []+ }+ "doesFileExist")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 726 15 726 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 726 15 726 19+ , srcInfoPoints = []+ }+ "name")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 726 20 728 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 726 20 726 21 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 727 4 728 61+ , srcInfoPoints = []+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 727 4 727 89+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 727 4 727 5+ , SrcSpan "tests/examples/Directory.hs" 727 88 727 89+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 727 5 727 88+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 727 5 727 40+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 727 5 727 35+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 5 727 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 5 727 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 5 727 19+ , srcInfoPoints = []+ }+ "withFileStatus")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 20 727 35+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 20 727 35+ , srcInfoPoints = []+ }+ "doesFileExist"+ "doesFileExist")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 36 727 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 36 727 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 36 727 40+ , srcInfoPoints = []+ }+ "name"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 727 41 727 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 41 727 42+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 41 727 42+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 727 43 727 88+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 727 43 727 44+ , SrcSpan "tests/examples/Directory.hs" 727 47 727 49+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 44 727 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 44 727 46+ , srcInfoPoints = []+ }+ "st")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 50 727 88+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 727 50 727 52+ , SrcSpan "tests/examples/Directory.hs" 727 53 727 53+ , SrcSpan "tests/examples/Directory.hs" 727 72 727 73+ , SrcSpan "tests/examples/Directory.hs" 727 88 727 88+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 53 727 72+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 727 55 727 57 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 53 727 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 53 727 54+ , srcInfoPoints = []+ }+ "b"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 58 727 72+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 58 727 69+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 58 727 69+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 58 727 69+ , srcInfoPoints = []+ }+ "isDirectory")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 70 727 72+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 70 727 72+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 70 727 72+ , srcInfoPoints = []+ }+ "st"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 74 727 88+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 74 727 88+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 74 727 80+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 74 727 80+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 74 727 80+ , srcInfoPoints = []+ }+ "return")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 727 81 727 88+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 727 81 727 82+ , SrcSpan+ "tests/examples/Directory.hs" 727 87 727 88+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 82 727 87+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 82 727 85+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 727+ 82+ 727+ 85+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 727+ 82+ 727+ 85+ , srcInfoPoints = []+ }+ "not")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 727 86 727 87+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 727+ 86+ 727+ 87+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 727+ 86+ 727+ 87+ , srcInfoPoints = []+ }+ "b"))))))+ ]))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 728 4 728 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 728 4 728 5+ , SrcSpan "tests/examples/Directory.hs" 728 5 728 10+ , SrcSpan "tests/examples/Directory.hs" 728 10 728 11+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 728 4 728 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 728 4 728 5+ , SrcSpan "tests/examples/Directory.hs" 728 5 728 10+ , SrcSpan "tests/examples/Directory.hs" 728 10 728 11+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 728 5 728 10+ , srcInfoPoints = []+ }+ "catch")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 728 12 728 61+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 728 12 728 13+ , SrcSpan "tests/examples/Directory.hs" 728 60 728 61+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 728 13 728 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 728 35 728 37 ]+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 728 13 728 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 728 13 728 14+ , SrcSpan "tests/examples/Directory.hs" 728 33 728 34+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 14 728 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 728 14 728 15+ , SrcSpan "tests/examples/Directory.hs" 728 18 728 20+ ]+ }+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 16 728 17+ , srcInfoPoints = []+ }+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 21 728 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 21 728 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 21 728 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 728 21 728 27+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 28 728 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 28 728 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 728 28 728 33+ , srcInfoPoints = []+ }+ "False"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 728 38 728 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 728 50 728 52 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 38 728 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 38 728 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 38 728 49+ , srcInfoPoints = []+ }+ "IOException")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 53 728 60+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 53 728 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 53 728 55+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 53 728 55+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 56 728 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 56 728 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 728 56 728 60+ , srcInfoPoints = []+ }+ "Bool")))))))))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 1 742 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 742 21 742 23 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 1 742 20+ , srcInfoPoints = []+ }+ "getModificationTime"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 24 742 48+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 742 33 742 35 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 24 742 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 24 742 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 24 742 32+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 36 742 48+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 36 742 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 36 742 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 36 742 38+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 39 742 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 39 742 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 742 39 742 48+ , srcInfoPoints = []+ }+ "ClockTime")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 743 1 746 21+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 743 1 746 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 743 1 743 20+ , srcInfoPoints = []+ }+ "getModificationTime")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 743 21 743 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 743 21 743 25+ , srcInfoPoints = []+ }+ "name")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 743 26 746 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 743 26 743 27 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 743 28 746 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 743 28 743 30+ , SrcSpan "tests/examples/Directory.hs" 745 2 745 2+ , SrcSpan "tests/examples/Directory.hs" 749 1 749 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 745 2 746 21+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 745 2 746 21+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 745 2 745 43+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 2 745 38+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 2 745 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 2 745 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 2 745 16+ , srcInfoPoints = []+ }+ "withFileStatus")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 17 745 38+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 17 745 38+ , srcInfoPoints = []+ }+ "getModificationTime"+ "getModificationTime")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 39 745 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 39 745 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 39 745 43+ , srcInfoPoints = []+ }+ "name"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 745 44 745 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 44 745 45+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 44 745 45+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 745 46 746 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 745 46 745 47+ , SrcSpan "tests/examples/Directory.hs" 745 51 745 53+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 48 745 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 48 745 50+ , srcInfoPoints = []+ }+ "st")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 745 54 746 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 745 54 745 56+ , SrcSpan "tests/examples/Directory.hs" 746 2 746 2+ , SrcSpan "tests/examples/Directory.hs" 746 2 746 2+ , SrcSpan "tests/examples/Directory.hs" 749 1 749 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 746 2 746 21+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 746 2 746 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 746 2 746 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 746 2 746 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 746 2 746 18+ , srcInfoPoints = []+ }+ "modificationTime")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 746 19 746 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 746 19 746 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 746 19 746 21+ , srcInfoPoints = []+ }+ "st"))))+ ])))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 1 749 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 749 16 749 18 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 1 749 15+ , srcInfoPoints = []+ }+ "withFileStatus"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 19 749 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 749 26 749 28 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 19 749 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 19 749 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 19 749 25+ , srcInfoPoints = []+ }+ "String")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 29 749 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 749 38 749 40 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 29 749 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 29 749 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 29 749 37+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 41 749 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 749 61 749 63 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 41 749 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 749 41 749 42+ , SrcSpan "tests/examples/Directory.hs" 749 59 749 60+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 42 749 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 749 52 749 54 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 42 749 51+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 42 749 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 749 42 749 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 749 42 749 45+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 46 749 51+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 749 46 749 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 749 46 749 51+ , srcInfoPoints = []+ }+ "CStat"))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 55 749 59+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 55 749 57+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 749 55 749 57+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 749 55 749 57+ , srcInfoPoints = []+ }+ "IO")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 58 749 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 749 58 749 59+ , srcInfoPoints = []+ }+ "a")))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 64 749 68+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 64 749 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 64 749 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 64 749 66+ , srcInfoPoints = []+ }+ "IO")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 67 749 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 749 67 749 68+ , srcInfoPoints = []+ }+ "a"))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 1 754 50+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 1 754 50+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 1 750 15+ , srcInfoPoints = []+ }+ "withFileStatus")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 16 750 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 16 750 19+ , srcInfoPoints = []+ }+ "loc")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 20 750 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 20 750 24+ , srcInfoPoints = []+ }+ "name")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 25 750 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 25 750 26+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 27 754 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 750 27 750 28 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 750 29 754 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 750 29 750 31+ , SrcSpan "tests/examples/Directory.hs" 751 3 751 3+ , SrcSpan "tests/examples/Directory.hs" 756 1 756 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 751 3 754 50+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 751 3 754 50+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 751 3 751 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 3 751 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 3 751 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 3 751 16+ , srcInfoPoints = []+ }+ "modifyIOError")))+ (RightSection+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 17 751 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 751 17 751 18+ , SrcSpan "tests/examples/Directory.hs" 751 39 751 40+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 18 751 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 751 18 751 19+ , SrcSpan "tests/examples/Directory.hs" 751 19 751 33+ , SrcSpan "tests/examples/Directory.hs" 751 33 751 34+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 18 751 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 751 18 751 19+ , SrcSpan "tests/examples/Directory.hs" 751 19 751 33+ , SrcSpan "tests/examples/Directory.hs" 751 33 751 34+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 19 751 33+ , srcInfoPoints = []+ }+ "ioeSetFileName")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 35 751 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 35 751 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 35 751 39+ , srcInfoPoints = []+ }+ "name")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 751 41 751 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 41 751 42+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 751 41 751 42+ , srcInfoPoints = []+ }+ "$")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 752 5 754 50+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 5 752 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 5 752 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 5 752 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 5 752 16+ , srcInfoPoints = []+ }+ "allocaBytes")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 17 752 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 17 752 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 17 752 28+ , srcInfoPoints = []+ }+ "sizeof_stat"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 29 752 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 29 752 30+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 29 752 30+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 31 754 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 752 31 752 32+ , SrcSpan "tests/examples/Directory.hs" 752 34 752 36+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 32 752 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 752 32 752 33+ , srcInfoPoints = []+ }+ "p")+ ]+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 7 754 50+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 7 753 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 7 753 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 753 7 753 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 753 7 753 19+ , srcInfoPoints = []+ }+ "withFilePath")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 20 753 43+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 753 20 753 21+ , SrcSpan+ "tests/examples/Directory.hs" 753 42 753 43+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 753 21 753 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 753 21 753 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 753+ 21+ 753+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 753+ 21+ 753+ 37+ , srcInfoPoints = []+ }+ "fileNameEndClean")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 753 38 753 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 753+ 38+ 753+ 42+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 753+ 38+ 753+ 42+ , srcInfoPoints = []+ }+ "name"))))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 44 753 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 44 753 45+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 753 44 753 45+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 46 754 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 753 46 753 47+ , SrcSpan "tests/examples/Directory.hs" 753 49 753 51+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 47 753 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 753 47 753 48+ , srcInfoPoints = []+ }+ "s")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 753 52 754 50+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 753 52 753 54+ , SrcSpan "tests/examples/Directory.hs" 754 9 754 9+ , SrcSpan "tests/examples/Directory.hs" 756 1 756 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 754 9 754 50+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 754 9 754 50+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 9+ 754+ 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 9+ 754+ 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 9+ 754+ 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 9+ 754+ 33+ , srcInfoPoints = []+ }+ "throwErrnoIfMinus1Retry_")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 34+ 754+ 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 34+ 754+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 34+ 754+ 37+ , srcInfoPoints = []+ }+ "loc"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 38+ 754+ 50+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 38+ 754+ 39+ , SrcSpan+ "tests/examples/Directory.hs"+ 754+ 49+ 754+ 50+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 39+ 754+ 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 39+ 754+ 47+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 39+ 754+ 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 39+ 754+ 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 39+ 754+ 45+ , srcInfoPoints = []+ }+ "c_stat")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 46+ 754+ 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 46+ 754+ 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 46+ 754+ 47+ , srcInfoPoints = []+ }+ "s"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 48+ 754+ 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 48+ 754+ 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 754+ 48+ 754+ 49+ , srcInfoPoints = []+ }+ "p"))))))+ ]))))))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 1 756 77+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 756 25 756 27 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 1 756 24+ , srcInfoPoints = []+ }+ "withFileOrSymlinkStatus"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 28 756 77+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 756 35 756 37 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 28 756 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 28 756 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 28 756 34+ , srcInfoPoints = []+ }+ "String")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 38 756 77+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 756 47 756 49 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 38 756 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 38 756 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 38 756 46+ , srcInfoPoints = []+ }+ "FilePath")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 50 756 77+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 756 70 756 72 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 50 756 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 756 50 756 51+ , SrcSpan "tests/examples/Directory.hs" 756 68 756 69+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 51 756 68+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 756 61 756 63 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 51 756 60+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 51 756 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 756 51 756 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 756 51 756 54+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 55 756 60+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 756 55 756 60+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 756 55 756 60+ , srcInfoPoints = []+ }+ "CStat"))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 64 756 68+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 64 756 66+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 756 64 756 66+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 756 64 756 66+ , srcInfoPoints = []+ }+ "IO")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 67 756 68+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 756 67 756 68+ , srcInfoPoints = []+ }+ "a")))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 73 756 77+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 73 756 75+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 73 756 75+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 73 756 75+ , srcInfoPoints = []+ }+ "IO")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 76 756 77+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 756 76 756 77+ , srcInfoPoints = []+ }+ "a"))))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 1 761 49+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 1 761 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 1 757 24+ , srcInfoPoints = []+ }+ "withFileOrSymlinkStatus")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 25 757 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 25 757 28+ , srcInfoPoints = []+ }+ "loc")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 29 757 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 29 757 33+ , srcInfoPoints = []+ }+ "name")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 34 757 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 34 757 35+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 36 761 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 757 36 757 37 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 757 38 761 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 757 38 757 40+ , SrcSpan "tests/examples/Directory.hs" 758 3 758 3+ , SrcSpan "tests/examples/Directory.hs" 763 1 763 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 758 3 761 49+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 758 3 761 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 758 3 758 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 3 758 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 3 758 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 3 758 16+ , srcInfoPoints = []+ }+ "modifyIOError")))+ (RightSection+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 17 758 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 758 17 758 18+ , SrcSpan "tests/examples/Directory.hs" 758 39 758 40+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 18 758 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 758 18 758 19+ , SrcSpan "tests/examples/Directory.hs" 758 19 758 33+ , SrcSpan "tests/examples/Directory.hs" 758 33 758 34+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 18 758 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 758 18 758 19+ , SrcSpan "tests/examples/Directory.hs" 758 19 758 33+ , SrcSpan "tests/examples/Directory.hs" 758 33 758 34+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 19 758 33+ , srcInfoPoints = []+ }+ "ioeSetFileName")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 35 758 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 35 758 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 35 758 39+ , srcInfoPoints = []+ }+ "name")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 758 41 758 42+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 41 758 42+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 758 41 758 42+ , srcInfoPoints = []+ }+ "$")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 759 5 761 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 5 759 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 5 759 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 5 759 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 5 759 16+ , srcInfoPoints = []+ }+ "allocaBytes")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 17 759 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 17 759 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 17 759 28+ , srcInfoPoints = []+ }+ "sizeof_stat"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 29 759 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 29 759 30+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 29 759 30+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 31 761 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 759 31 759 32+ , SrcSpan "tests/examples/Directory.hs" 759 34 759 36+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 32 759 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 759 32 759 33+ , srcInfoPoints = []+ }+ "p")+ ]+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 7 761 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 7 760 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 7 760 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 760 7 760 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 760 7 760 19+ , srcInfoPoints = []+ }+ "withFilePath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 20 760 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 760 20 760 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 760 20 760 24+ , srcInfoPoints = []+ }+ "name"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 25 760 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 25 760 26+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 760 25 760 26+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 27 761 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 760 27 760 28+ , SrcSpan "tests/examples/Directory.hs" 760 30 760 32+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 28 760 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 760 28 760 29+ , srcInfoPoints = []+ }+ "s")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 760 33 761 49+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 760 33 760 35+ , SrcSpan "tests/examples/Directory.hs" 761 9 761 9+ , SrcSpan "tests/examples/Directory.hs" 763 1 763 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 761 9 761 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 761 9 761 49+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 9+ 761+ 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 9+ 761+ 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 9+ 761+ 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 9+ 761+ 33+ , srcInfoPoints = []+ }+ "throwErrnoIfMinus1Retry_")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 34+ 761+ 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 34+ 761+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 34+ 761+ 37+ , srcInfoPoints = []+ }+ "loc"))))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 38+ 761+ 49+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 38+ 761+ 39+ , SrcSpan+ "tests/examples/Directory.hs"+ 761+ 48+ 761+ 49+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 39+ 761+ 48+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 39+ 761+ 46+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 39+ 761+ 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 39+ 761+ 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 39+ 761+ 44+ , srcInfoPoints = []+ }+ "lstat")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 45+ 761+ 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 45+ 761+ 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 45+ 761+ 46+ , srcInfoPoints = []+ }+ "s"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 47+ 761+ 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 47+ 761+ 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 761+ 47+ 761+ 48+ , srcInfoPoints = []+ }+ "p"))))))+ ]))))))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 1 763 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 763 18 763 20 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 1 763 17+ , srcInfoPoints = []+ }+ "modificationTime"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 21 763 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 763 31 763 33 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 21 763 30+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 21 763 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 21 763 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 21 763 24+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 25 763 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 25 763 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 25 763 30+ , srcInfoPoints = []+ }+ "CStat"))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 34 763 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 34 763 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 34 763 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 34 763 36+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 37 763 46+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 37 763 46+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 763 37 763 46+ , srcInfoPoints = []+ }+ "ClockTime")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 764 1 767 52+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 764 1 767 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 764 1 764 17+ , srcInfoPoints = []+ }+ "modificationTime")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 764 18 764 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 764 18 764 22+ , srcInfoPoints = []+ }+ "stat")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 764 23 767 52+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 764 23 764 24 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 764 25 767 52+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 764 25 764 27+ , SrcSpan "tests/examples/Directory.hs" 765 5 765 5+ , SrcSpan "tests/examples/Directory.hs" 766 5 766 5+ , SrcSpan "tests/examples/Directory.hs" 767 5 767 5+ , SrcSpan "tests/examples/Directory.hs" 769 1 769 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 765 5 765 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 765 11 765 13 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 765 5 765 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 765 5 765 10+ , srcInfoPoints = []+ }+ "mtime"))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 765 14 765 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 765 14 765 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 765 14 765 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 765 14 765 22+ , srcInfoPoints = []+ }+ "st_mtime")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 765 23 765 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 765 23 765 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 765 23 765 27+ , srcInfoPoints = []+ }+ "stat"))))+ , LetStmt+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 766 5 766 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 766 5 766 8 ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 766 9 766 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 766 9 766 9+ , SrcSpan "tests/examples/Directory.hs" 767 5 767 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 766 9 766 69+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 9 766 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 9 766 22+ , srcInfoPoints = []+ }+ "realToInteger"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 23 766 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 766 23 766 24 ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 25 766 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 766 44 766 46 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 25 766 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 25 766 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 25 766 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 25 766 30+ , srcInfoPoints = []+ }+ "round")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 31 766 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 31 766 32+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 31 766 32+ , srcInfoPoints = []+ }+ ".")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 33 766 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 33 766 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 33 766 43+ , srcInfoPoints = []+ }+ "realToFrac"))))+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 47 766 69+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 47 766 56+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 766 54 766 56+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 47 766 56+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 54+ 766+ 56+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 47+ 766+ 56+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 54+ 766+ 56+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 47+ 766+ 56+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 54+ 766+ 56+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 47+ 766+ 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 47+ 766+ 51+ , srcInfoPoints = []+ }+ "Real")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 52+ 766+ 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 52+ 766+ 53+ , srcInfoPoints = []+ }+ "a"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 766 57 766 69+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 766 59 766 61+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 57 766 58+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 57 766 58+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 62 766 69+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 766 62 766 69+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 766+ 62+ 766+ 69+ , srcInfoPoints = []+ }+ "Integer")))))))+ Nothing+ ])+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 767 5 767 52+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 767 5 767 52+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 767 5 767 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 5 767 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 5 767 11+ , srcInfoPoints = []+ }+ "return")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 767 12 767 52+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 767 12 767 13+ , SrcSpan "tests/examples/Directory.hs" 767 51 767 52+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 13 767 51+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 13 767 49+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 13 767 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 13 767 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 767 13 767 16+ , srcInfoPoints = []+ }+ "TOD")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 17 767 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 767 17 767 18+ , SrcSpan "tests/examples/Directory.hs" 767 48 767 49+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 18 767 48+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 767 18 767 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 767 18 767 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 18+ 767+ 31+ , srcInfoPoints = []+ }+ "realToInteger")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 767 32 767 48+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 767 32 767 33+ , SrcSpan+ "tests/examples/Directory.hs" 767 47 767 48+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 767 33 767 47+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 39+ 767+ 41+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 33+ 767+ 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 33+ 767+ 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 33+ 767+ 38+ , srcInfoPoints = []+ }+ "mtime")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 42+ 767+ 47+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 42+ 767+ 47+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 767+ 42+ 767+ 47+ , srcInfoPoints = []+ }+ "CTime"))))))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 50 767 51+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 767 50 767 51+ , srcInfoPoints = []+ }+ 0+ "0")))))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 1 769 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 769 13 769 15 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 1 769 12+ , srcInfoPoints = []+ }+ "isDirectory"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 16 769 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 769 26 769 28 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 16 769 25+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 16 769 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 16 769 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 16 769 19+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 20 769 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 20 769 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 20 769 25+ , srcInfoPoints = []+ }+ "CStat"))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 29 769 36+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 29 769 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 29 769 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 29 769 31+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 32 769 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 32 769 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 769 32 769 36+ , srcInfoPoints = []+ }+ "Bool")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 770 1 772 24+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 770 1 772 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 770 1 770 12+ , srcInfoPoints = []+ }+ "isDirectory")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 770 13 770 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 770 13 770 17+ , srcInfoPoints = []+ }+ "stat")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 770 18 772 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 770 18 770 19 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 770 20 772 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 770 20 770 22+ , SrcSpan "tests/examples/Directory.hs" 771 3 771 3+ , SrcSpan "tests/examples/Directory.hs" 772 3 772 3+ , SrcSpan "tests/examples/Directory.hs" 774 1 774 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 771 3 771 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 771 8 771 10 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 771 3 771 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 771 3 771 7+ , srcInfoPoints = []+ }+ "mode"))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 771 11 771 23+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 771 11 771 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 771 11 771 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 771 11 771 18+ , srcInfoPoints = []+ }+ "st_mode")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 771 19 771 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 771 19 771 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 771 19 771 23+ , srcInfoPoints = []+ }+ "stat"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 772 3 772 24+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 772 3 772 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 772 3 772 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 772 3 772 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 3 772 9+ , srcInfoPoints = []+ }+ "return")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 772 10 772 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 772 10 772 11+ , SrcSpan "tests/examples/Directory.hs" 772 23 772 24+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 11 772 23+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 11 772 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 11 772 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 11 772 18+ , srcInfoPoints = []+ }+ "s_isdir")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 19 772 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 19 772 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 772 19 772 23+ , srcInfoPoints = []+ }+ "mode"))))))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 1 774 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 774 18 774 20 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 1 774 17+ , srcInfoPoints = []+ }+ "fileNameEndClean"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 21 774 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 774 28 774 30 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 21 774 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 21 774 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 21 774 27+ , srcInfoPoints = []+ }+ "String")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 31 774 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 31 774 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 774 31 774 37+ , srcInfoPoints = []+ }+ "String"))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 1 776 76+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 1 776 76+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 1 775 17+ , srcInfoPoints = []+ }+ "fileNameEndClean")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 18 775 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 18 775 22+ , srcInfoPoints = []+ }+ "name")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 23 776 76+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 775 23 775 24 ]+ }+ (If+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 25 776 76+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 775 25 775 27+ , SrcSpan "tests/examples/Directory.hs" 775 41 775 45+ , SrcSpan "tests/examples/Directory.hs" 776 41 776 45+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 28 775 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 28 775 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 28 775 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 775 28 775 35+ , srcInfoPoints = []+ }+ "isDrive")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 36 775 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 36 775 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 775 36 775 40+ , srcInfoPoints = []+ }+ "name"))))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 46 775 75+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 46 775 70+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 46 775 70+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 775 46 775 70+ , srcInfoPoints = []+ }+ "addTrailingPathSeparator")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 71 775 75+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 775 71 775 75+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 775 71 775 75+ , srcInfoPoints = []+ }+ "name"))))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 776 46 776 76+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 776 46 776 71+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 776 46 776 71+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 776 46 776 71+ , srcInfoPoints = []+ }+ "dropTrailingPathSeparator")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 776 72 776 76+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 776 72 776 76+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 776 72 776 76+ , srcInfoPoints = []+ }+ "name"))))))+ Nothing+ ]+ , ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 778 1 778 78+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 778 1 778 8+ , SrcSpan "tests/examples/Directory.hs" 778 9 778 15+ , SrcSpan "tests/examples/Directory.hs" 778 29 778 61+ , SrcSpan "tests/examples/Directory.hs" 778 70 778 72+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 778 16 778 21+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 778 22 778 28+ , srcInfoPoints = []+ }))+ (Just "HsDirectory.h __hscore_S_IRUSR")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 778 62 778 69+ , srcInfoPoints = []+ }+ "s_IRUSR")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 778 73 778 78+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 778 73 778 78+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 778 73 778 78+ , srcInfoPoints = []+ }+ "CMode")))+ , ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 779 1 779 78+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 779 1 779 8+ , SrcSpan "tests/examples/Directory.hs" 779 9 779 15+ , SrcSpan "tests/examples/Directory.hs" 779 29 779 61+ , SrcSpan "tests/examples/Directory.hs" 779 70 779 72+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 779 16 779 21+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 779 22 779 28+ , srcInfoPoints = []+ }))+ (Just "HsDirectory.h __hscore_S_IWUSR")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 779 62 779 69+ , srcInfoPoints = []+ }+ "s_IWUSR")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 779 73 779 78+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 779 73 779 78+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 779 73 779 78+ , srcInfoPoints = []+ }+ "CMode")))+ , ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 780 1 780 78+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 780 1 780 8+ , SrcSpan "tests/examples/Directory.hs" 780 9 780 15+ , SrcSpan "tests/examples/Directory.hs" 780 29 780 61+ , SrcSpan "tests/examples/Directory.hs" 780 70 780 72+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 780 16 780 21+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 780 22 780 28+ , srcInfoPoints = []+ }))+ (Just "HsDirectory.h __hscore_S_IXUSR")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 780 62 780 69+ , srcInfoPoints = []+ }+ "s_IXUSR")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 780 73 780 78+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 780 73 780 78+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 780 73 780 78+ , srcInfoPoints = []+ }+ "CMode")))+ , ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 781 1 781 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 781 1 781 8+ , SrcSpan "tests/examples/Directory.hs" 781 9 781 15+ , SrcSpan "tests/examples/Directory.hs" 781 29 781 47+ , SrcSpan "tests/examples/Directory.hs" 781 56 781 58+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 781 16 781 21+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 781 22 781 28+ , srcInfoPoints = []+ }))+ (Just "__hscore_S_IFDIR")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 781 48 781 55+ , srcInfoPoints = []+ }+ "s_IFDIR")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 781 59 781 64+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 781 59 781 64+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 781 59 781 64+ , srcInfoPoints = []+ }+ "CMode")))+ , ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 784 1 785 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 784 1 784 8+ , SrcSpan "tests/examples/Directory.hs" 784 9 784 15+ , SrcSpan "tests/examples/Directory.hs" 784 29 784 54+ , SrcSpan "tests/examples/Directory.hs" 785 18 785 20+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 784 16 784 21+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 784 22 784 28+ , srcInfoPoints = []+ }))+ (Just "__hscore_long_path_size")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 785 3 785 17+ , srcInfoPoints = []+ }+ "long_path_size")+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 785 21 785 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 785 21 785 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 785 21 785 24+ , srcInfoPoints = []+ }+ "Int")))+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 1 808 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 808 18 808 20 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 1 808 17+ , srcInfoPoints = []+ }+ "getHomeDirectory"+ ]+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 21 808 32+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 21 808 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 21 808 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 21 808 23+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 24 808 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 24 808 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 808 24 808 32+ , srcInfoPoints = []+ }+ "FilePath"))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 809 1 818 46+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 809 1 809 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 809 1 809 17+ , srcInfoPoints = []+ }+ "getHomeDirectory"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 809 18 818 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 809 18 809 19 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 3 818 46+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 3 810 56+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 3 810 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 3 810 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 3 810 16+ , srcInfoPoints = []+ }+ "modifyIOError")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 17 810 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 810 17 810 18+ , SrcSpan "tests/examples/Directory.hs" 810 55 810 56+ ]+ }+ (RightSection+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 18 810 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 810 18 810 19+ , SrcSpan "tests/examples/Directory.hs" 810 54 810 55+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 19 810 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 810 19 810 20+ , SrcSpan "tests/examples/Directory.hs" 810 20 810 34+ , SrcSpan "tests/examples/Directory.hs" 810 34 810 35+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 19 810 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 810 19 810 20+ , SrcSpan "tests/examples/Directory.hs" 810 20 810 34+ , SrcSpan "tests/examples/Directory.hs" 810 34 810 35+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 810 20 810 34+ , srcInfoPoints = []+ }+ "ioeSetLocation")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 36 810 54+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 36 810 54+ , srcInfoPoints = []+ }+ "getHomeDirectory"+ "getHomeDirectory")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 57 810 58+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 57 810 58+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 57 810 58+ , srcInfoPoints = []+ }+ "$")))+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 810 59 818 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 810 59 810 61+ , SrcSpan "tests/examples/Directory.hs" 811 3 811 3+ , SrcSpan "tests/examples/Directory.hs" 812 3 812 3+ , SrcSpan "tests/examples/Directory.hs" 847 1 847 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 3 811 73+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 811 5 811 7 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 3 811 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 3 811 4+ , srcInfoPoints = []+ }+ "r"))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 8 811 73+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 8 811 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 8 811 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 8 811 11+ , srcInfoPoints = []+ }+ "try")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 12 811 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 12 811 13+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 12 811 13+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 811 14 811 73+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 14 811 71+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 14 811 63+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 14 811 43+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 14 811 35+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 811 14 811 35+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 811 14 811 35+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 811 14 811 35+ , srcInfoPoints = []+ }+ "sHGetFolderPath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 36 811 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 811 36 811 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 811 36 811 43+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 44 811 63+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 44 811 63+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 811 44 811 63+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 811 44 811 63+ , srcInfoPoints = []+ }+ "cSIDL_PROFILE"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 64 811 71+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 64 811 71+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 64 811 71+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 72 811 73+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 811 72 811 73+ , srcInfoPoints = []+ }+ 0+ "0"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 812 3 818 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 812 3 812 7+ , SrcSpan "tests/examples/Directory.hs" 812 41 812 43+ , SrcSpan "tests/examples/Directory.hs" 813 5 813 5+ , SrcSpan "tests/examples/Directory.hs" 814 5 814 5+ , SrcSpan "tests/examples/Directory.hs" 847 1 847 0+ ]+ }+ (Case+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 812 3 818 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 812 3 812 7+ , SrcSpan "tests/examples/Directory.hs" 812 41 812 43+ , SrcSpan "tests/examples/Directory.hs" 813 5 813 5+ , SrcSpan "tests/examples/Directory.hs" 814 5 814 5+ , SrcSpan "tests/examples/Directory.hs" 847 1 847 0+ ]+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 812 8 812 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 812 8 812 9+ , SrcSpan "tests/examples/Directory.hs" 812 39 812 40+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 812 9 812 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 812 11 812 13 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 9 812 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 9 812 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 9 812 10+ , srcInfoPoints = []+ }+ "r")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 14 812 39+ , srcInfoPoints = []+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 14 812 32+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 14 812 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 812 14 812 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 812 14 812 20+ , srcInfoPoints = []+ }+ "Either")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 21 812 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 812 21 812 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 812 21 812 32+ , srcInfoPoints = []+ }+ "IOException"))))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 33 812 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 812 33 812 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 812 33 812 39+ , srcInfoPoints = []+ }+ "String"))))))+ [ Alt+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 813 5 813 24+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 5 813 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 5 813 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 5 813 10+ , srcInfoPoints = []+ }+ "Right"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 11 813 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 11 813 12+ , srcInfoPoints = []+ }+ "s")+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 13 813 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 813 13 813 15 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 16 813 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 16 813 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 16 813 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 813 16 813 22+ , srcInfoPoints = []+ }+ "return")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 23 813 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 813 23 813 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 813 23 813 24+ , srcInfoPoints = []+ }+ "s")))))+ Nothing+ , Alt+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 814 5 818 46+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 814 5 814 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 814 5 814 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 814 5 814 9+ , srcInfoPoints = []+ }+ "Left"))+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 814 11 814 12+ , srcInfoPoints = []+ }+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 814 13 818 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 814 13 814 15 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 814 16 818 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 814 16 814 18+ , SrcSpan "tests/examples/Directory.hs" 815 7 815 7+ , SrcSpan "tests/examples/Directory.hs" 816 7 816 7+ , SrcSpan "tests/examples/Directory.hs" 847 1 847 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 815 7 815 78+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 815 10 815 12+ ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 815 7 815 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 7 815 9+ , srcInfoPoints = []+ }+ "r1"))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 815 13 815 78+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 13 815 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 13 815 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 13+ 815+ 16+ , srcInfoPoints = []+ }+ "try")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 17 815 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 17 815 18+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 17+ 815+ 18+ , srcInfoPoints = []+ }+ "$")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 19 815 78+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 19 815 76+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 19+ 815+ 68+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 19+ 815+ 48+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 19+ 815+ 40+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 19+ 815+ 40+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 19+ 815+ 40+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 19+ 815+ 40+ , srcInfoPoints = []+ }+ "sHGetFolderPath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 41+ 815+ 48+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 41+ 815+ 48+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 41+ 815+ 48+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 49+ 815+ 68+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 49+ 815+ 68+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 49+ 815+ 68+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 49+ 815+ 68+ , srcInfoPoints = []+ }+ "cSIDL_WINDOWS"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 69+ 815+ 76+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 69+ 815+ 76+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 69+ 815+ 76+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 815 77 815 78+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 815+ 77+ 815+ 78+ , srcInfoPoints = []+ }+ 0+ "0"))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 816 7 818 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 816 7 816 11+ , SrcSpan "tests/examples/Directory.hs" 816 15 816 17+ , SrcSpan "tests/examples/Directory.hs" 817 9 817 9+ , SrcSpan "tests/examples/Directory.hs" 818 9 818 9+ , SrcSpan "tests/examples/Directory.hs" 847 1 847 0+ ]+ }+ (Case+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 816 7 818 46+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 816 7 816 11+ , SrcSpan+ "tests/examples/Directory.hs" 816 15 816 17+ , SrcSpan "tests/examples/Directory.hs" 817 9 817 9+ , SrcSpan "tests/examples/Directory.hs" 818 9 818 9+ , SrcSpan "tests/examples/Directory.hs" 847 1 847 0+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 816 12 816 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 816 12 816 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 816+ 12+ 816+ 14+ , srcInfoPoints = []+ }+ "r1")))+ [ Alt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 817 9 817 28+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 817 9 817 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 9+ 817+ 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 9+ 817+ 14+ , srcInfoPoints = []+ }+ "Right"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 15+ 817+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 15+ 817+ 16+ , srcInfoPoints = []+ }+ "s")+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 17+ 817+ 28+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 17+ 817+ 19+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 20+ 817+ 28+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 20+ 817+ 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 20+ 817+ 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 20+ 817+ 26+ , srcInfoPoints = []+ }+ "return")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 27+ 817+ 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 27+ 817+ 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 817+ 27+ 817+ 28+ , srcInfoPoints = []+ }+ "s")))))+ Nothing+ , Alt+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 818 9 818 46+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 818 9 818 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 9+ 818+ 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 9+ 818+ 13+ , srcInfoPoints = []+ }+ "Left"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 15+ 818+ 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 15+ 818+ 16+ , srcInfoPoints = []+ }+ "e")+ ])+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 17+ 818+ 46+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 17+ 818+ 19+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 20+ 818+ 46+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 20+ 818+ 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 20+ 818+ 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 20+ 818+ 27+ , srcInfoPoints = []+ }+ "ioError")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 28+ 818+ 46+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 28+ 818+ 29+ , SrcSpan+ "tests/examples/Directory.hs"+ 818+ 45+ 818+ 46+ ]+ }+ (ExpTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 29+ 818+ 45+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 31+ 818+ 33+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 29+ 818+ 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 29+ 818+ 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 29+ 818+ 30+ , srcInfoPoints = []+ }+ "e")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 34+ 818+ 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 34+ 818+ 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 818+ 34+ 818+ 45+ , srcInfoPoints = []+ }+ "IOException")))))))+ Nothing+ ])+ ]))+ Nothing+ ])+ ])))+ Nothing+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 1 847 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 847 25 847 27 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 1 847 24+ , srcInfoPoints = []+ }+ "getAppUserDataDirectory"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 28 847 49+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 847 35 847 37 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 28 847 34+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 28 847 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 28 847 34+ , srcInfoPoints = []+ }+ "String")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 38 847 49+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 38 847 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 38 847 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 38 847 40+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 41 847 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 41 847 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 847 41 847 49+ , srcInfoPoints = []+ }+ "FilePath")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 848 1 851 27+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 848 1 851 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 848 1 848 24+ , srcInfoPoints = []+ }+ "getAppUserDataDirectory")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 848 25 848 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 848 25 848 32+ , srcInfoPoints = []+ }+ "appName")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 848 33 851 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 848 33 848 34 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 848 35 851 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 848 35 848 37+ , SrcSpan "tests/examples/Directory.hs" 849 3 849 3+ , SrcSpan "tests/examples/Directory.hs" 874 1 874 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 849 3 851 27+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 849 3 851 27+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 849 3 849 63+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 3 849 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 3 849 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 3 849 16+ , srcInfoPoints = []+ }+ "modifyIOError")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 17 849 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 849 17 849 18+ , SrcSpan "tests/examples/Directory.hs" 849 62 849 63+ ]+ }+ (RightSection+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 18 849 62+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 849 18 849 19+ , SrcSpan "tests/examples/Directory.hs" 849 61 849 62+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 19 849 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 849 19 849 20+ , SrcSpan "tests/examples/Directory.hs" 849 20 849 34+ , SrcSpan "tests/examples/Directory.hs" 849 34 849 35+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 19 849 35+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/Directory.hs" 849 19 849 20+ , SrcSpan+ "tests/examples/Directory.hs" 849 20 849 34+ , SrcSpan+ "tests/examples/Directory.hs" 849 34 849 35+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 849 20 849 34+ , srcInfoPoints = []+ }+ "ioeSetLocation")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 36 849 61+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 36 849 61+ , srcInfoPoints = []+ }+ "getAppUserDataDirectory"+ "getAppUserDataDirectory")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 849 64 849 65+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 64 849 65+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 849 64 849 65+ , srcInfoPoints = []+ }+ "$")))+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 849 66 851 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 849 66 849 68+ , SrcSpan "tests/examples/Directory.hs" 850 3 850 3+ , SrcSpan "tests/examples/Directory.hs" 850 3 850 3+ , SrcSpan "tests/examples/Directory.hs" 851 3 851 3+ , SrcSpan "tests/examples/Directory.hs" 874 1 874 0+ ]+ }+ [ Generator+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 3 850 67+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 850 5 850 7 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 3 850 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 3 850 4+ , srcInfoPoints = []+ }+ "s"))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 8 850 67+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 8 850 65+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 8 850 57+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 850 8 850 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 850 8 850 29+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 850+ 8+ 850+ 29+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 850+ 8+ 850+ 29+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 850+ 8+ 850+ 29+ , srcInfoPoints = []+ }+ "sHGetFolderPath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 850 30 850 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 850+ 30+ 850+ 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 850+ 30+ 850+ 37+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 850 38 850 57+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 850 38 850 57+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 850+ 38+ 850+ 57+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 850+ 38+ 850+ 57+ , srcInfoPoints = []+ }+ "cSIDL_APPDATA"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 58 850 65+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 850 58 850 65+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 850 58 850 65+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 66 850 67+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 850 66 850 67+ , srcInfoPoints = []+ }+ 0+ "0")))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 851 3 851 27+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 851 3 851 27+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 851 3 851 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 851 3 851 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 3 851 9+ , srcInfoPoints = []+ }+ "return")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 851 10 851 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 851 10 851 11+ , SrcSpan "tests/examples/Directory.hs" 851 26 851 27+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 851 11 851 26+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 11 851 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 11 851 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 851+ 11+ 851+ 12+ , srcInfoPoints = []+ }+ "s")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 12 851 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 12 851 14+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 851+ 12+ 851+ 14+ , srcInfoPoints = []+ }+ "++")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 14 851 26+ , srcInfoPoints = []+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 14 851 18+ , srcInfoPoints = []+ }+ (Char+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 851+ 14+ 851+ 18+ , srcInfoPoints = []+ }+ '\\'+ "\\\\"))+ (QConOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 18 851 19+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 851+ 18+ 851+ 19+ , srcInfoPoints = []+ }+ (Cons+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 851+ 18+ 851+ 19+ , srcInfoPoints = []+ })))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 851 19 851 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 851+ 19+ 851+ 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 851+ 19+ 851+ 26+ , srcInfoPoints = []+ }+ "appName")))))))+ ]))+ ]))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 1 874 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 874 27 874 29 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 1 874 26+ , srcInfoPoints = []+ }+ "getUserDocumentsDirectory"+ ]+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 30 874 41+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 30 874 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 30 874 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 30 874 32+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 33 874 41+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 33 874 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 874 33 874 41+ , srcInfoPoints = []+ }+ "FilePath"))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 875 1 877 63+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 875 1 875 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 875 1 875 26+ , srcInfoPoints = []+ }+ "getUserDocumentsDirectory"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 875 27 877 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 875 27 875 28 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 875 29 877 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 875 29 875 31+ , SrcSpan "tests/examples/Directory.hs" 876 3 876 3+ , SrcSpan "tests/examples/Directory.hs" 905 1 905 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 3 877 63+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 3 877 63+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 3 876 65+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 3 876 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 3 876 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 3 876 16+ , srcInfoPoints = []+ }+ "modifyIOError")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 17 876 65+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 876 17 876 18+ , SrcSpan "tests/examples/Directory.hs" 876 64 876 65+ ]+ }+ (RightSection+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 18 876 64+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 876 18 876 19+ , SrcSpan "tests/examples/Directory.hs" 876 63 876 64+ ]+ }+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 19 876 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 876 19 876 20+ , SrcSpan "tests/examples/Directory.hs" 876 20 876 34+ , SrcSpan "tests/examples/Directory.hs" 876 34 876 35+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 19 876 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 876 19 876 20+ , SrcSpan "tests/examples/Directory.hs" 876 20 876 34+ , SrcSpan "tests/examples/Directory.hs" 876 34 876 35+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 20 876 34+ , srcInfoPoints = []+ }+ "ioeSetLocation")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 36 876 63+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 36 876 63+ , srcInfoPoints = []+ }+ "getUserDocumentsDirectory"+ "getUserDocumentsDirectory")))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 66 876 67+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 66 876 67+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 876 66 876 67+ , srcInfoPoints = []+ }+ "$")))+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 876 68 877 63+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 876 68 876 70+ , SrcSpan "tests/examples/Directory.hs" 877 3 877 3+ , SrcSpan "tests/examples/Directory.hs" 877 3 877 3+ , SrcSpan "tests/examples/Directory.hs" 905 1 905 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 877 3 877 63+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 3 877 63+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 3 877 61+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 3 877 53+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 3 877 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 3 877 24+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 3 877 24+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 877+ 3+ 877+ 24+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 877+ 3+ 877+ 24+ , srcInfoPoints = []+ }+ "sHGetFolderPath")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 25 877 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 25 877 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs"+ 877+ 25+ 877+ 32+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 33 877 53+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 33 877 53+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 33 877 53+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 33 877 53+ , srcInfoPoints = []+ }+ "cSIDL_PERSONAL"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 54 877 61+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 54 877 61+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/Directory.hs" 877 54 877 61+ , srcInfoPoints = []+ }+ "nullPtr"))))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 62 877 63+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Directory.hs" 877 62 877 63+ , srcInfoPoints = []+ }+ 0+ "0")))+ ]))+ ]))+ Nothing+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 1 905 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 905 23 905 25 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 1 905 22+ , srcInfoPoints = []+ }+ "getTemporaryDirectory"+ ]+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 26 905 37+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 26 905 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 26 905 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 26 905 28+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 29 905 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 29 905 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 905 29 905 37+ , srcInfoPoints = []+ }+ "FilePath"))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 906 1 907 30+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 906 1 906 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 906 1 906 22+ , srcInfoPoints = []+ }+ "getTemporaryDirectory"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 906 23 907 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 906 23 906 24 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 906 25 907 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 906 25 906 27+ , SrcSpan "tests/examples/Directory.hs" 907 3 907 3+ , SrcSpan "tests/examples/Directory.hs" 912 1 912 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 907 3 907 30+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 907 3 907 30+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 907 3 907 30+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 907 3 907 30+ , srcInfoPoints = []+ }+ "Win32")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 907 3 907 30+ , srcInfoPoints = []+ }+ "getTemporaryDirectory")))+ ]))+ Nothing+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 912 1 912 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 912 14 912 16 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 912 1 912 13+ , srcInfoPoints = []+ }+ "exeExtension"+ ]+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 912 17 912 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 912 17 912 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 912 17 912 23+ , srcInfoPoints = []+ }+ "String")))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 913 1 913 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 913 1 913 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 913 1 913 13+ , srcInfoPoints = []+ }+ "exeExtension"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 913 14 913 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Directory.hs" 913 14 913 15 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 913 16 913 21+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Directory.hs" 913 16 913 21+ , srcInfoPoints = []+ }+ "exe"+ "exe")))+ Nothing+ ]+ , [ Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 3 1 3 78)+ "---------------------------------------------------------------------------"+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 4 1 4 5) " |"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 5 1 5 35)+ " Module : System.Directory"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 6 1 6 53)+ " Copyright : (c) The University of Glasgow 2001"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 7 1 7 66)+ " License : BSD-style (see the file libraries/base/LICENSE)"+ , Comment False (SrcSpan "tests/examples/Directory.hs" 8 1 8 3) ""+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 9 1 9 40)+ " Maintainer : libraries@haskell.org"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 10 1 10 25)+ " Stability : stable"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 11 1 11 27)+ " Portability : portable"+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 12 1 12 3) ""+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 13 1 13 59)+ " System-independent interface to directory manipulation."+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 14 1 14 3) ""+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 15 1 15 78)+ "---------------------------------------------------------------------------"+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 19 5 19 14) " $intro"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 21 5 21 32)+ " * Actions on directories"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 22 29 22 52)+ " :: FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 23 33 23 64)+ " :: Bool -> FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 24 29 24 52)+ " :: FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 25 33 25 56)+ " :: FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 26 29 26 64)+ " :: FilePath -> FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 28 33 28 64)+ " :: FilePath -> IO [FilePath]"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 29 33 29 50)+ " :: IO FilePath"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 30 33 30 56)+ " :: FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 32 5 32 33)+ " * Pre-defined directories"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 38 5 38 26)+ " * Actions on files"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 39 25 39 48)+ " :: FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 40 33 40 68)+ " :: FilePath -> FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 41 33 41 68)+ " :: FilePath -> FilePath -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 47 5 47 25)+ " * Existence tests"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 48 25 48 50)+ " :: FilePath -> IO Bool"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 49 33 49 58)+ " :: FilePath -> IO Bool"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 51 5 51 21)+ " * Permissions"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 53 5 53 20)+ " $permissions"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 57 21 57 46)+ " :: Permissions -> Bool"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 58 21 58 46)+ " :: Permissions -> Bool"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 59 21 59 46)+ " :: Permissions -> Bool"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 60 21 60 46)+ " :: Permissions -> Bool"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 63 33 63 65)+ " :: FilePath -> IO Permissions"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 64 33 64 71)+ " :: FilePath -> Permissions -> IO ()"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 67 5 67 20)+ " * Timestamps"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 69 33 69 63)+ " :: FilePath -> IO ClockTime"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 86 1 86 33)+ "# CFILES cbits/directory.c #"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 96 1 110 3)+ " $intro\nA directory contains a series of entries, each of which is a named\nreference to a file system object (file, directory etc.). Some\nentries may be hidden, inaccessible, or have some administrative\nfunction (e.g. `.' or `..' under POSIX\n<http://www.opengroup.org/onlinepubs/009695399/>), but in\nthis standard all such entries are considered to form part of the\ndirectory contents. Entries in sub-directories are not, however,\nconsidered to form part of the directory contents.\n\nEach file system object is referenced by a /path/. There is\nnormally at least one absolute path to each file system object. In\nsome operating systems, it may also be possible to have paths which\nare relative to the current directory.\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 112 1 112 78)+ "---------------------------------------------------------------------------"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 113 1 113 15)+ " Permissions"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 115 1 132 3)+ " $permissions\n\n The 'Permissions' type is used to record whether certain operations are\n permissible on a file\\/directory. 'getPermissions' and 'setPermissions'\n get and set these permissions, respectively. Permissions apply both to\n files and directories. For directories, the executable field will be\n 'False', and for files the searchable field will be 'False'. Note that\n directories may be searchable without being readable, if permission has\n been given to use them as part of a path, but not to examine the\n directory contents.\n\nNote that to change some, but not all permissions, a construct on the following lines must be used.\n\n> makeReadable f = do\n> p <- getPermissions f\n> setPermissions f (p {readable = True})\n\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 140 1 150 3)+ " |The 'getPermissions' operation returns the\npermissions for the file or directory.\n\nThe operation may fail with:\n\n* 'isPermissionError' if the user is not permitted to access\n the permissions; or\n\n* 'isDoesNotExistError' if the file or directory does not exist.\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 155 3 155 69)+ " stat() does a better job of guessing the permissions on Windows"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 156 3 156 71)+ " than access() does. e.g. for execute permission, it looks at the"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 157 3 157 28)+ " filename extension :-)"+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 158 3 158 5) ""+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 159 3 159 78)+ " I tried for a while to do this properly, using the Windows security API,"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 160 3 160 79)+ " and eventually gave up. getPermissions is a flawed API anyway. -- SimonM"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 177 1 187 3)+ " |The 'setPermissions' operation sets the\npermissions for the file or directory.\n\nThe operation may fail with:\n\n* 'isPermissionError' if the user is not permitted to set\n the permissions; or\n\n* 'isDoesNotExistError' if the file or directory does not exist.\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 217 1 217 78)+ "---------------------------------------------------------------------------"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 218 1 218 18)+ " Implementation"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 220 1 255 3)+ " |@'createDirectory' dir@ creates a new directory @dir@ which is\ninitially empty, or as near to empty as the operating system\nallows.\n\nThe operation may fail with:\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EROFS, EACCES]@\n\n* 'isAlreadyExistsError' \\/ 'AlreadyExists'\nThe operand refers to a directory that already exists.\n@ [EEXIST]@\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\n@[EIO]@\n\n* 'InvalidArgument'\nThe operand is not a valid directory name.\n@[ENAMETOOLONG, ELOOP]@\n\n* 'NoSuchThing'\nThere is no path to the directory.\n@[ENOENT, ENOTDIR]@\n\n* 'ResourceExhausted'\nInsufficient resources (virtual memory, process file descriptors,\nphysical disk space, etc.) are available to perform the operation.\n@[EDQUOT, ENOSPC, ENOMEM, EMLINK]@\n\n* 'InappropriateType'\nThe path refers to an existing non-directory object.\n@[EEXIST]@\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 261 1 261 70)+ " | @'createDirectoryIfMissing' parents dir@ creates a new directory"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 262 1 262 63)+ " @dir@ if it doesn\\'t exist. If the first argument is 'True'"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 263 1 263 77)+ " the function will also create all parent directories if they are missing."+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 264 38 264 66)+ " ^ Create its parents too?"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 265 30 265 77)+ " ^ The path to the directory you want to make"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 287 11 287 75)+ " createDirectory (and indeed POSIX mkdir) does not distinguish"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 288 11 288 79)+ " between a dir already existing and a file already existing. So we"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 289 11 289 79)+ " check for it here. Unfortunately there is a slight race condition"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 290 11 290 77)+ " here, but we think it is benign. It could report an exeption in"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 291 11 291 77)+ " the case that the dir did exist but another process deletes the"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 292 11 292 75)+ " directory and creates a file in its place before we can check"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 293 11 293 50)+ " that the directory did indeed exist."+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 302 1 341 3)+ " | @'removeDirectory' dir@ removes an existing directory /dir/. The\nimplementation may specify additional constraints which must be\nsatisfied before a directory can be removed (e.g. the directory has to\nbe empty, or may not be in use by other processes). It is not legal\nfor an implementation to partially remove a directory unless the\nentire directory is removed. A conformant implementation need not\nsupport directory removal in all situations (e.g. removal of the root\ndirectory).\n\nThe operation may fail with:\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\nEIO\n\n* 'InvalidArgument'\nThe operand is not a valid directory name.\n[ENAMETOOLONG, ELOOP]\n\n* 'isDoesNotExistError' \\/ 'NoSuchThing'\nThe directory does not exist.\n@[ENOENT, ENOTDIR]@\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EROFS, EACCES, EPERM]@\n\n* 'UnsatisfiedConstraints'\nImplementation-dependent constraints are not satisfied.\n@[EBUSY, ENOTEMPTY, EEXIST]@\n\n* 'UnsupportedOperation'\nThe implementation does not support removal in this situation.\n@[EINVAL]@\n\n* 'InappropriateType'\nThe operand refers to an existing non-directory object.\n@[ENOTDIR]@\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 347 1 347 75)+ " | @'removeDirectoryRecursive' dir@ removes an existing directory /dir/"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 348 1 348 65)+ " together with its content and all subdirectories. Be careful,"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 349 1 349 70)+ " if the directory contains symlinks, the function will follow them."+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 360 31 360 77)+ " If f is not a directory, re-throw the error"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 365 1 397 3)+ " |'removeFile' /file/ removes the directory entry for an existing file\n/file/, where /file/ is not itself a directory. The\nimplementation may specify additional constraints which must be\nsatisfied before a file can be removed (e.g. the file may not be in\nuse by other processes).\n\nThe operation may fail with:\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\n@[EIO]@\n\n* 'InvalidArgument'\nThe operand is not a valid file name.\n@[ENAMETOOLONG, ELOOP]@\n\n* 'isDoesNotExistError' \\/ 'NoSuchThing'\nThe file does not exist.\n@[ENOENT, ENOTDIR]@\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EROFS, EACCES, EPERM]@\n\n* 'UnsatisfiedConstraints'\nImplementation-dependent constraints are not satisfied.\n@[EBUSY]@\n\n* 'InappropriateType'\nThe operand refers to an existing directory.\n@[EPERM, EINVAL]@\n\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 403 1 450 3)+ " |@'renameDirectory' old new@ changes the name of an existing\ndirectory from /old/ to /new/. If the /new/ directory\nalready exists, it is atomically replaced by the /old/ directory.\nIf the /new/ directory is neither the /old/ directory nor an\nalias of the /old/ directory, it is removed as if by\n'removeDirectory'. A conformant implementation need not support\nrenaming directories in all situations (e.g. renaming to an existing\ndirectory, or across different physical devices), but the constraints\nmust be documented.\n\nOn Win32 platforms, @renameDirectory@ fails if the /new/ directory already\nexists.\n\nThe operation may fail with:\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\n@[EIO]@\n\n* 'InvalidArgument'\nEither operand is not a valid directory name.\n@[ENAMETOOLONG, ELOOP]@\n\n* 'isDoesNotExistError' \\/ 'NoSuchThing'\nThe original directory does not exist, or there is no path to the target.\n@[ENOENT, ENOTDIR]@\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EROFS, EACCES, EPERM]@\n\n* 'ResourceExhausted'\nInsufficient resources are available to perform the operation.\n@[EDQUOT, ENOSPC, ENOMEM, EMLINK]@\n\n* 'UnsatisfiedConstraints'\nImplementation-dependent constraints are not satisfied.\n@[EBUSY, ENOTEMPTY, EEXIST]@\n\n* 'UnsupportedOperation'\nThe implementation does not support renaming in this situation.\n@[EINVAL, EXDEV]@\n\n* 'InappropriateType'\nEither path refers to an existing non-directory object.\n@[ENOTDIR, EISDIR]@\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 454 4 454 73)+ " XXX this test isn't performed atomically with the following rename"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 455 4 455 26)+ " ToDo: use Win32 API"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 465 1 507 3)+ " |@'renameFile' old new@ changes the name of an existing file system\nobject from /old/ to /new/. If the /new/ object already\nexists, it is atomically replaced by the /old/ object. Neither\npath may refer to an existing directory. A conformant implementation\nneed not support renaming files in all situations (e.g. renaming\nacross different physical devices), but the constraints must be\ndocumented.\n\nThe operation may fail with:\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\n@[EIO]@\n\n* 'InvalidArgument'\nEither operand is not a valid file name.\n@[ENAMETOOLONG, ELOOP]@\n\n* 'isDoesNotExistError' \\/ 'NoSuchThing'\nThe original file does not exist, or there is no path to the target.\n@[ENOENT, ENOTDIR]@\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EROFS, EACCES, EPERM]@\n\n* 'ResourceExhausted'\nInsufficient resources are available to perform the operation.\n@[EDQUOT, ENOSPC, ENOMEM, EMLINK]@\n\n* 'UnsatisfiedConstraints'\nImplementation-dependent constraints are not satisfied.\n@[EBUSY]@\n\n* 'UnsupportedOperation'\nThe implementation does not support renaming in this situation.\n@[EXDEV]@\n\n* 'InappropriateType'\nEither path refers to an existing directory.\n@[ENOTDIR, EISDIR, EINVAL, EEXIST, ENOTEMPTY]@\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 511 4 511 73)+ " XXX this test isn't performed atomically with the following rename"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 512 4 512 26)+ " ToDo: use Win32 API"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 522 1 526 3)+ " |@'copyFile' old new@ copies the existing file from /old/ to /new/.\nIf the /new/ file already exists, it is atomically replaced by the /old/ file.\nNeither path may refer to an existing directory. The permissions of /old/ are\ncopied to /new/, if possible.\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 553 1 553 60)+ " | Given path referring to a file or directory, returns a"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 554 1 554 64)+ " canonicalized path, with the intent that two paths referring"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 555 1 555 66)+ " to the same file\\/directory will map to the same canonicalized"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 556 1 556 58)+ " path. Note that it is impossible to guarantee that the"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 557 1 557 67)+ " implication (same file\\/dir \\<=\\> same canonicalizedPath) holds"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 558 1 558 66)+ " in either direction: this function can make only a best-effort"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 559 1 559 12)+ " attempt."+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 564 9 564 73)+ " normalise does more stuff, like upper-casing the drive letter"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 567 1 567 43)+ " | 'makeRelative' the current directory."+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 573 1 573 66)+ " | Given an executable file name, searches for such file in the"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 574 1 574 69)+ " directories listed in system PATH. The returned value is the path"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 575 1 575 70)+ " to the found executable or Nothing if an executable with the given"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 576 1 576 70)+ " name was not found. For example (findExecutable \\\"ghc\\\") gives you"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 577 1 577 20)+ " the path to GHC."+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 578 1 578 3) ""+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 579 1 579 60)+ " The path returned by 'findExecutable' corresponds to the"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 580 1 580 68)+ " program that would be executed by 'System.Process.createProcess'"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 581 1 581 70)+ " when passed the same string (as a RawCommand, not a ShellCommand)."+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 582 1 582 3) ""+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 583 1 583 71)+ " On Windows, 'findExecutable' calls the Win32 function 'SearchPath',"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 584 1 584 68)+ " which may search other places before checking the directories in"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 585 1 585 69)+ " @PATH@. Where it actually searches depends on registry settings,"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 586 1 586 61)+ " but notably includes the directory containing the current"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 587 1 587 19)+ " executable. See"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 588 1 588 68)+ " <http://msdn.microsoft.com/en-us/library/aa365527.aspx> for more"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 589 1 589 12)+ " details."+ , Comment+ False (SrcSpan "tests/examples/Directory.hs" 590 1 590 3) ""+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 596 1 625 3)+ " |@'getDirectoryContents' dir@ returns a list of /all/ entries\nin /dir/.\n\nThe operation may fail with:\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\n@[EIO]@\n\n* 'InvalidArgument'\nThe operand is not a valid directory name.\n@[ENAMETOOLONG, ELOOP]@\n\n* 'isDoesNotExistError' \\/ 'NoSuchThing'\nThe directory does not exist.\n@[ENOENT, ENOTDIR]@\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EACCES]@\n\n* 'ResourceExhausted'\nInsufficient resources are available to perform the operation.\n@[EMFILE, ENFILE]@\n\n* 'InappropriateType'\nThe path refers to an existing non-directory object.\n@[ENOTDIR]@\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 636 9 636 71)+ " we needn't worry about empty directories: adirectory always"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 637 9 637 45)+ " has at least \".\" and \"..\" entries"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 645 18 645 62)+ " no need to reverse, ordering is undefined"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 647 1 671 3)+ " |If the operating system has a notion of current directories,\n'getCurrentDirectory' returns an absolute path to the\ncurrent directory of the calling process.\n\nThe operation may fail with:\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\n@[EIO]@\n\n* 'isDoesNotExistError' \\/ 'NoSuchThing'\nThere is no path referring to the current directory.\n@[EPERM, ENOENT, ESTALE...]@\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EACCES]@\n\n* 'ResourceExhausted'\nInsufficient resources are available to perform the operation.\n\n* 'UnsupportedOperation'\nThe operating system has no notion of current directory.\n\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 676 1 706 3)+ " |If the operating system has a notion of current directories,\n@'setCurrentDirectory' dir@ changes the current\ndirectory of the calling process to /dir/.\n\nThe operation may fail with:\n\n* 'HardwareFault'\nA physical I\\/O error has occurred.\n@[EIO]@\n\n* 'InvalidArgument'\nThe operand is not a valid directory name.\n@[ENAMETOOLONG, ELOOP]@\n\n* 'isDoesNotExistError' \\/ 'NoSuchThing'\nThe directory does not exist.\n@[ENOENT, ENOTDIR]@\n\n* 'isPermissionError' \\/ 'PermissionDenied'\nThe process has insufficient privileges to perform the operation.\n@[EACCES]@\n\n* 'UnsupportedOperation'\nThe operating system has no notion of current directory, or the\ncurrent directory cannot be dynamically changed.\n\n* 'InappropriateType'\nThe path refers to an existing non-directory object.\n@[ENOTDIR]@\n\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 712 1 714 3)+ " |The operation 'doesDirectoryExist' returns 'True' if the argument file\nexists and is a directory, and 'False' otherwise.\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 721 1 723 3)+ " |The operation 'doesFileExist' returns 'True'\nif the argument file exists and is not a directory, and 'False' otherwise.\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 730 1 740 3)+ " |The 'getModificationTime' operation returns the\nclock time at which the file or directory was last modified.\n\nThe operation may fail with:\n\n* 'isPermissionError' if the user is not permitted to access\n the modification time; or\n\n* 'isDoesNotExistError' if the file or directory does not exist.\n\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 744 2 744 24)+ " ToDo: use Win32 API"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 787 1 807 3)+ " | Returns the current user's home directory.\n\nThe directory returned is expected to be writable by the current user,\nbut note that it isn't generally considered good practice to store\napplication-specific data here; use 'getAppUserDataDirectory'\ninstead.\n\nOn Unix, 'getHomeDirectory' returns the value of the @HOME@\nenvironment variable. On Windows, the system is queried for a\nsuitable path; a typical path might be\n@C:/Documents And Settings/user@.\n\nThe operation may fail with:\n\n* 'UnsupportedOperation'\nThe operating system has no notion of home directory.\n\n* 'isDoesNotExistError'\nThe home directory for the current user does not exist, or\ncannot be found.\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 820 1 846 3)+ " | Returns the pathname of a directory in which application-specific\ndata for the current user can be stored. The result of\n'getAppUserDataDirectory' for a given application is specific to\nthe current user.\n\nThe argument should be the name of the application, which will be used\nto construct the pathname (so avoid using unusual characters that\nmight result in an invalid pathname).\n\nNote: the directory may not actually exist, and may need to be created\nfirst. It is expected that the parent directory exists and is\nwritable.\n\nOn Unix, this function returns @$HOME\\/.appName@. On Windows, a\ntypical path might be\n\n> C:/Documents And Settings/user/Application Data/appName\n\nThe operation may fail with:\n\n* 'UnsupportedOperation'\nThe operating system has no notion of application-specific data directory.\n\n* 'isDoesNotExistError'\nThe home directory for the current user does not exist, or\ncannot be found.\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 853 1 873 3)+ " | Returns the current user's document directory.\n\nThe directory returned is expected to be writable by the current user,\nbut note that it isn't generally considered good practice to store\napplication-specific data here; use 'getAppUserDataDirectory'\ninstead.\n\nOn Unix, 'getUserDocumentsDirectory' returns the value of the @HOME@\nenvironment variable. On Windows, the system is queried for a\nsuitable path; a typical path might be\n@C:\\/Documents and Settings\\/user\\/My Documents@.\n\nThe operation may fail with:\n\n* 'UnsupportedOperation'\nThe operating system has no notion of document directory.\n\n* 'isDoesNotExistError'\nThe document directory for the current user does not exist, or\ncannot be found.\n"+ , Comment+ True+ (SrcSpan "tests/examples/Directory.hs" 879 1 904 3)+ " | Returns the current directory for temporary files.\n\nOn Unix, 'getTemporaryDirectory' returns the value of the @TMPDIR@\nenvironment variable or \\\"\\/tmp\\\" if the variable isn\\'t defined.\nOn Windows, the function checks for the existence of environment variables in\nthe following order and uses the first path found:\n\n*\nTMP environment variable.\n\n*\nTEMP environment variable.\n\n*\nUSERPROFILE environment variable.\n\n*\nThe Windows directory\n\nThe operation may fail with:\n\n* 'UnsupportedOperation'\nThe operating system has no notion of temporary directory.\n\nThe function doesn\\'t verify whether the path exists.\n"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 909 1 909 60)+ " ToDo: This should be determined via autoconf (AC_EXEEXT)"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 910 1 910 36)+ " | Extension for executable files"+ , Comment+ False+ (SrcSpan "tests/examples/Directory.hs" 911 1 911 64)+ " (typically @\\\"\\\"@ on Unix and @\\\"exe\\\"@ on Windows or OS\\/2)"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,324 @@+{-# LANGUAGE ForeignFunctionInterface, NondecreasingIndentation #-}+module System.Directory+ (createDirectory, createDirectoryIfMissing, removeDirectory,+ removeDirectoryRecursive, renameDirectory, getDirectoryContents,+ getCurrentDirectory, setCurrentDirectory, getHomeDirectory,+ getAppUserDataDirectory, getUserDocumentsDirectory,+ getTemporaryDirectory, removeFile, renameFile, copyFile,+ canonicalizePath, makeRelativeToCurrentDirectory, findExecutable,+ doesFileExist, doesDirectoryExist,+ Permissions(Permissions, readable, writable, executable,+ searchable),+ getPermissions, setPermissions, copyPermissions,+ getModificationTime)+ where+import Prelude hiding (catch)+import qualified Prelude+import Control.Monad (guard)+import System.Environment (getEnv)+import System.FilePath+import System.IO+import System.IO.Error hiding (catch, try)+import Control.Monad (when, unless)+import Control.Exception.Base+import Foreign+import Foreign.C+import System.Time (ClockTime(..))+import GHC.IO.Exception+ (IOException(..), IOErrorType(..), ioException)+import System.Posix.Types+import System.Posix.Internals+import qualified System.Win32 as Win32++data Permissions = Permissions{readable, writable, executable,+ searchable :: Bool}+ deriving (Eq, Ord, Read, Show)++getPermissions :: FilePath -> IO Permissions+getPermissions name+ = do withFilePath name $+ \ s ->+ do allocaBytes sizeof_stat $+ \ p_stat ->+ do throwErrnoIfMinus1_ "getPermissions" $ c_stat s p_stat+ mode <- st_mode p_stat+ let usr_read = mode .&. s_IRUSR+ let usr_write = mode .&. s_IWUSR+ let usr_exec = mode .&. s_IXUSR+ let is_dir = mode .&. s_IFDIR+ return+ (Permissions{readable = usr_read /= 0, writable = usr_write /= 0,+ executable = is_dir == 0 && usr_exec /= 0,+ searchable = is_dir /= 0 && usr_exec /= 0})++setPermissions :: FilePath -> Permissions -> IO ()+setPermissions name (Permissions r w e s)+ = do allocaBytes sizeof_stat $+ \ p_stat ->+ do withFilePath name $+ \ p_name ->+ do throwErrnoIfMinus1_ "setPermissions" $+ do c_stat p_name p_stat+ mode <- st_mode p_stat+ let mode1 = modifyBit r mode s_IRUSR+ let mode2 = modifyBit w mode1 s_IWUSR+ let mode3 = modifyBit (e || s) mode2 s_IXUSR+ c_wchmod p_name mode3+ where modifyBit :: Bool -> CMode -> CMode -> CMode+ modifyBit False m b = m .&. (complement b)+ modifyBit True m b = m .|. b++foreign import ccall unsafe "_wchmod" c_wchmod ::+ CWString -> CMode -> IO CInt++copyPermissions :: FilePath -> FilePath -> IO ()+copyPermissions source dest+ = do allocaBytes sizeof_stat $+ \ p_stat ->+ do withFilePath source $+ \ p_source ->+ do withFilePath dest $+ \ p_dest ->+ do throwErrnoIfMinus1_ "copyPermissions" $ c_stat p_source p_stat+ mode <- st_mode p_stat+ throwErrnoIfMinus1_ "copyPermissions" $ c_wchmod p_dest mode++createDirectory :: FilePath -> IO ()+createDirectory path = do Win32.createDirectory path Nothing++createDirectoryIfMissing :: Bool -> FilePath -> IO ()+createDirectoryIfMissing create_parents path0+ | create_parents = createDirs (parents path0)+ | otherwise = createDirs (take 1 (parents path0))+ where parents+ = reverse . scanl1 (</>) . splitDirectories . normalise+ createDirs [] = return ()+ createDirs (dir : []) = createDir dir throw+ createDirs (dir : dirs)+ = createDir dir $+ \ _ ->+ do createDirs dirs+ createDir dir throw+ + createDir :: FilePath -> (IOException -> IO ()) -> IO ()+ createDir dir notExistHandler+ = do r <- try $ createDirectory dir+ case (r :: Either IOException ()) of+ Right () -> return ()+ Left e | isDoesNotExistError e -> notExistHandler e+ | isAlreadyExistsError e ->+ (do withFileStatus "createDirectoryIfMissing" dir $+ \ st ->+ do isDir <- isDirectory st+ if isDir then return () else throw e)+ `catch` ((\ _ -> return ()) :: IOException -> IO ())+ | otherwise -> throw e++removeDirectory :: FilePath -> IO ()+removeDirectory path = Win32.removeDirectory path++removeDirectoryRecursive :: FilePath -> IO ()+removeDirectoryRecursive startLoc+ = do cont <- getDirectoryContents startLoc+ sequence_ [rm (startLoc </> x) | x <- cont, x /= "." && x /= ".."]+ removeDirectory startLoc+ where rm :: FilePath -> IO ()+ rm f+ = do temp <- try (removeFile f)+ case temp of+ Left e -> do isDir <- doesDirectoryExist f+ unless isDir $ throw (e :: SomeException)+ removeDirectoryRecursive f+ Right _ -> return ()++removeFile :: FilePath -> IO ()+removeFile path = Win32.deleteFile path++renameDirectory :: FilePath -> FilePath -> IO ()+renameDirectory opath npath+ = do withFileStatus "renameDirectory" opath $+ \ st ->+ do is_dir <- isDirectory st+ if (not is_dir) then+ ioException+ (ioeSetErrorString+ (mkIOError InappropriateType "renameDirectory" Nothing+ (Just opath))+ "not a directory")+ else+ do Win32.moveFileEx opath npath Win32.mOVEFILE_REPLACE_EXISTING++renameFile :: FilePath -> FilePath -> IO ()+renameFile opath npath+ = do withFileOrSymlinkStatus "renameFile" opath $+ \ st ->+ do is_dir <- isDirectory st+ if is_dir then+ ioException+ (ioeSetErrorString+ (mkIOError InappropriateType "renameFile" Nothing (Just opath))+ "is a directory")+ else+ do Win32.moveFileEx opath npath Win32.mOVEFILE_REPLACE_EXISTING++copyFile :: FilePath -> FilePath -> IO ()+copyFile fromFPath toFPath+ = copy `Prelude.catch`+ (\ exc -> throw $ ioeSetLocation exc "copyFile")+ where copy+ = bracket (openBinaryFile fromFPath ReadMode) hClose $+ \ hFrom ->+ bracketOnError openTmp cleanTmp $+ \ (tmpFPath, hTmp) ->+ do allocaBytes bufferSize $ copyContents hFrom hTmp+ hClose hTmp+ ignoreIOExceptions $ copyPermissions fromFPath tmpFPath+ renameFile tmpFPath toFPath+ openTmp+ = openBinaryTempFile (takeDirectory toFPath) ".copyFile.tmp"+ cleanTmp (tmpFPath, hTmp)+ = do ignoreIOExceptions $ hClose hTmp+ ignoreIOExceptions $ removeFile tmpFPath+ bufferSize = 1024+ copyContents hFrom hTo buffer+ = do count <- hGetBuf hFrom buffer bufferSize+ when (count > 0) $+ do hPutBuf hTo buffer count+ copyContents hFrom hTo buffer+ ignoreIOExceptions io = io `catch` ioExceptionIgnorer+ + ioExceptionIgnorer :: IOException -> IO ()+ ioExceptionIgnorer _ = return ()++canonicalizePath :: FilePath -> IO FilePath+canonicalizePath fpath+ = do path <- Win32.getFullPathName fpath+ return (normalise path)++makeRelativeToCurrentDirectory :: FilePath -> IO FilePath+makeRelativeToCurrentDirectory x+ = do cur <- getCurrentDirectory+ return $ makeRelative cur x++findExecutable :: String -> IO (Maybe FilePath)+findExecutable binary+ = Win32.searchPath Nothing binary ('.' : exeExtension)++getDirectoryContents :: FilePath -> IO [FilePath]+getDirectoryContents path+ = modifyIOError+ ((`ioeSetFileName` path) .+ (`ioeSetLocation` "getDirectoryContents"))+ $+ do bracket (Win32.findFirstFile (path </> "*"))+ (\ (h, _) -> Win32.findClose h)+ (\ (h, fdat) -> loop h fdat [])+ where loop ::+ Win32.HANDLE -> Win32.FindData -> [FilePath] -> IO [FilePath]+ loop h fdat acc+ = do filename <- Win32.getFindDataFileName fdat+ more <- Win32.findNextFile h fdat+ if more then loop h fdat (filename : acc) else+ return (filename : acc)++getCurrentDirectory :: IO FilePath+getCurrentDirectory = do Win32.getCurrentDirectory++setCurrentDirectory :: FilePath -> IO ()+setCurrentDirectory path = Win32.setCurrentDirectory path++doesDirectoryExist :: FilePath -> IO Bool+doesDirectoryExist name+ = (withFileStatus "doesDirectoryExist" name $+ \ st -> isDirectory st)+ `catch` ((\ _ -> return False) :: IOException -> IO Bool)++doesFileExist :: FilePath -> IO Bool+doesFileExist name+ = (withFileStatus "doesFileExist" name $+ \ st ->+ do b <- isDirectory st+ return (not b))+ `catch` ((\ _ -> return False) :: IOException -> IO Bool)++getModificationTime :: FilePath -> IO ClockTime+getModificationTime name+ = do withFileStatus "getModificationTime" name $+ \ st -> do modificationTime st++withFileStatus :: String -> FilePath -> (Ptr CStat -> IO a) -> IO a+withFileStatus loc name f+ = do modifyIOError (`ioeSetFileName` name) $+ allocaBytes sizeof_stat $+ \ p ->+ withFilePath (fileNameEndClean name) $+ \ s -> do throwErrnoIfMinus1Retry_ loc (c_stat s p)++withFileOrSymlinkStatus ::+ String -> FilePath -> (Ptr CStat -> IO a) -> IO a+withFileOrSymlinkStatus loc name f+ = do modifyIOError (`ioeSetFileName` name) $+ allocaBytes sizeof_stat $+ \ p ->+ withFilePath name $+ \ s -> do throwErrnoIfMinus1Retry_ loc (lstat s p)++modificationTime :: Ptr CStat -> IO ClockTime+modificationTime stat+ = do mtime <- st_mtime stat+ let realToInteger = round . realToFrac :: Real a => a -> Integer+ return (TOD (realToInteger (mtime :: CTime)) 0)++isDirectory :: Ptr CStat -> IO Bool+isDirectory stat+ = do mode <- st_mode stat+ return (s_isdir mode)++fileNameEndClean :: String -> String+fileNameEndClean name+ = if isDrive name then addTrailingPathSeparator name else+ dropTrailingPathSeparator name++foreign import ccall unsafe "HsDirectory.h __hscore_S_IRUSR"+ s_IRUSR :: CMode++foreign import ccall unsafe "HsDirectory.h __hscore_S_IWUSR"+ s_IWUSR :: CMode++foreign import ccall unsafe "HsDirectory.h __hscore_S_IXUSR"+ s_IXUSR :: CMode++foreign import ccall unsafe "__hscore_S_IFDIR" s_IFDIR :: CMode++foreign import ccall unsafe "__hscore_long_path_size"+ long_path_size :: Int++getHomeDirectory :: IO FilePath+getHomeDirectory+ = modifyIOError ((`ioeSetLocation` "getHomeDirectory")) $+ do r <- try $+ Win32.sHGetFolderPath nullPtr Win32.cSIDL_PROFILE nullPtr 0+ case (r :: Either IOException String) of+ Right s -> return s+ Left _ -> do r1 <- try $+ Win32.sHGetFolderPath nullPtr Win32.cSIDL_WINDOWS nullPtr 0+ case r1 of+ Right s -> return s+ Left e -> ioError (e :: IOException)++getAppUserDataDirectory :: String -> IO FilePath+getAppUserDataDirectory appName+ = do modifyIOError ((`ioeSetLocation` "getAppUserDataDirectory")) $+ do s <- Win32.sHGetFolderPath nullPtr Win32.cSIDL_APPDATA nullPtr 0+ return (s ++ '\\' : appName)++getUserDocumentsDirectory :: IO FilePath+getUserDocumentsDirectory+ = do modifyIOError ((`ioeSetLocation` "getUserDocumentsDirectory"))+ $ do Win32.sHGetFolderPath nullPtr Win32.cSIDL_PERSONAL nullPtr 0++getTemporaryDirectory :: IO FilePath+getTemporaryDirectory = do Win32.getTemporaryDirectory++exeExtension :: String+exeExtension = "exe"
@@ -0,0 +1,4 @@+{-# LANGUAGE DoRec #-}++main = do rec let x = 1+ return ()
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,177 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 1 1 1 1+ , SrcSpan "tests/examples/DoRec.hs" 3 1 3 1+ , SrcSpan "tests/examples/DoRec.hs" 3 1 3 1+ , SrcSpan "tests/examples/DoRec.hs" 3 1 3 1+ , SrcSpan "tests/examples/DoRec.hs" 5 1 5 1+ , SrcSpan "tests/examples/DoRec.hs" 5 1 5 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 1 1 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 1 1 1 13+ , SrcSpan "tests/examples/DoRec.hs" 1 20 1 23+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 1 14 1 19+ , srcInfoPoints = []+ }+ "DoRec"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 1 4 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 1 3 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 1 3 5+ , srcInfoPoints = []+ }+ "main"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 6 4 20+ , srcInfoPoints = [ SrcSpan "tests/examples/DoRec.hs" 3 6 3 7 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 8 4 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 3 8 3 10+ , SrcSpan "tests/examples/DoRec.hs" 3 11 3 11+ , SrcSpan "tests/examples/DoRec.hs" 4 11 4 11+ , SrcSpan "tests/examples/DoRec.hs" 5 1 5 0+ ]+ }+ [ RecStmt+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 11 3 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 3 11 3 14+ , SrcSpan "tests/examples/DoRec.hs" 3 15 3 15+ , SrcSpan "tests/examples/DoRec.hs" 4 11 4 0+ ]+ }+ [ LetStmt+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 15 3 24+ , srcInfoPoints = [ SrcSpan "tests/examples/DoRec.hs" 3 15 3 18 ]+ }+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 19 3 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 3 19 3 19+ , SrcSpan "tests/examples/DoRec.hs" 4 11 4 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 19 3 24+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 19 3 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 19 3 20+ , srcInfoPoints = []+ }+ "x"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 21 3 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 3 21 3 22 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 3 23 3 24+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DoRec.hs" 3 23 3 24+ , srcInfoPoints = []+ }+ 1+ "1")))+ Nothing+ ])+ ]+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 11 4 20+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 11 4 20+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 11 4 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 11 4 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 11 4 17+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 18 4 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 4 18 4 19+ , SrcSpan "tests/examples/DoRec.hs" 4 19 4 20+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 18 4 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 4 18 4 19+ , SrcSpan "tests/examples/DoRec.hs" 4 19 4 20+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoRec.hs" 4 18 4 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoRec.hs" 4 18 4 19+ , SrcSpan "tests/examples/DoRec.hs" 4 19 4 20+ ]+ }))))+ ]))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE DoRec #-}+main+ = do rec let x = 1+ return ()
@@ -0,0 +1,12 @@+{-# LANGUAGE UnboxedTuples #-}+module DoubleHashOp where++(##) :: a -> b -> Int+a ## b = 0++(#*) :: a -> b -> Int+a #* b = 1++-- This still does not work though:+-- (#) :: a -> b -> Int+-- a # b = 2
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,317 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 1 1 13 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 1 1 1 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 2 1 2 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 2 1 2 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 4 1 4 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 5 1 5 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 7 1 7 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 8 1 8 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 13 1 13 1+ , SrcSpan "tests/examples/DoubleHashOp.hs" 13 1 13 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 2 1 2 26+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 2 1 2 7+ , SrcSpan "tests/examples/DoubleHashOp.hs" 2 21 2 26+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 2 8 2 20+ , srcInfoPoints = []+ }+ "DoubleHashOp")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 1 1 1 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 1 1 1 13+ , SrcSpan "tests/examples/DoubleHashOp.hs" 1 28 1 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 1 14 1 27+ , srcInfoPoints = []+ }+ "UnboxedTuples"+ ]+ ]+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 1 4 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 4 6 4 8 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 1 4 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 4 1 4 2+ , SrcSpan "tests/examples/DoubleHashOp.hs" 4 2 4 4+ , SrcSpan "tests/examples/DoubleHashOp.hs" 4 4 4 5+ ]+ }+ "##"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 9 4 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 4 11 4 13 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 14 4 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 4 16 4 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 14 4 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 14 4 15+ , srcInfoPoints = []+ }+ "b"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ "Int")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 1 5 11+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 1 5 11+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 1 5 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 1 5 2+ , srcInfoPoints = []+ }+ "a"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 3 5 5+ , srcInfoPoints = []+ }+ "##")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 6 5 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 6 5 7+ , srcInfoPoints = []+ }+ "b")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 8 5 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 5 8 5 9 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 10 5 11+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 5 10 5 11+ , srcInfoPoints = []+ }+ 0+ "0")))+ Nothing+ ]+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 1 7 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 7 6 7 8 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 1 7 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 7 1 7 2+ , SrcSpan "tests/examples/DoubleHashOp.hs" 7 2 7 4+ , SrcSpan "tests/examples/DoubleHashOp.hs" 7 4 7 5+ ]+ }+ "#*"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 9 7 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 7 11 7 13 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 9 7 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 9 7 10+ , srcInfoPoints = []+ }+ "a"))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 14 7 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 7 16 7 18 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 14 7 15+ , srcInfoPoints = []+ }+ "b"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 19 7 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 19 7 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 7 19 7 22+ , srcInfoPoints = []+ }+ "Int")))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 1 8 11+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 1 8 11+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 1 8 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 1 8 2+ , srcInfoPoints = []+ }+ "a"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 3 8 5+ , srcInfoPoints = []+ }+ "#*")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ "b")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 8 8 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DoubleHashOp.hs" 8 8 8 9 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DoubleHashOp.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ 1+ "1")))+ Nothing+ ]+ ]+ , [ Comment+ False+ (SrcSpan "tests/examples/DoubleHashOp.hs" 10 1 10 36)+ " This still does not work though:"+ , Comment+ False+ (SrcSpan "tests/examples/DoubleHashOp.hs" 11 1 11 24)+ " (#) :: a -> b -> Int"+ , Comment+ False+ (SrcSpan "tests/examples/DoubleHashOp.hs" 12 1 12 13)+ " a # b = 2"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,8 @@+{-# LANGUAGE UnboxedTuples #-}+module DoubleHashOp where++( ## ) :: a -> b -> Int+a ## b = 0++( #* ) :: a -> b -> Int+a #* b = 1
@@ -0,0 +1,48 @@+{-# LANGUAGE ScopedTypeVariables, StrictData, GADTs #-}++-- | Tests the StrictData LANGUAGE pragma.+module Main where++import qualified Control.Exception as E+import System.IO.Unsafe (unsafePerformIO)++data Strict a = S a+data Strict2 b = S2 !b+data Strict3 c where+ S3 :: c -> Strict3 c++data UStrict = US {-# UNPACK #-} Int++data Lazy d = L ~d+data Lazy2 e where+ L2 :: ~e -> Lazy2 e++main :: IO ()+main =+ do print (isBottom (S bottom))+ print (isBottom (S2 bottom))+ print (isBottom (US bottom))+ print (isBottom (S3 bottom))+ putStrLn ""+ print (not (isBottom (L bottom)))+ print (not (isBottom (L2 bottom)))+ print (not (isBottom (Just bottom))) -- sanity check++------------------------------------------------------------------------+-- Support for testing for bottom++bottom :: a+bottom = error "_|_"++isBottom :: a -> Bool+isBottom f = unsafePerformIO $+ (E.evaluate f >> return False) `E.catches`+ [ E.Handler (\(_ :: E.ArrayException) -> return True)+ , E.Handler (\(_ :: E.ErrorCall) -> return True)+ , E.Handler (\(_ :: E.NoMethodError) -> return True)+ , E.Handler (\(_ :: E.NonTermination) -> return True)+ , E.Handler (\(_ :: E.PatternMatchFail) -> return True)+ , E.Handler (\(_ :: E.RecConError) -> return True)+ , E.Handler (\(_ :: E.RecSelError) -> return True)+ , E.Handler (\(_ :: E.RecUpdError) -> return True)+ ]
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,3591 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 1 1 49 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 1 1 1 1+ , SrcSpan "tests/examples/DsStrictData.hs" 4 1 4 1+ , SrcSpan "tests/examples/DsStrictData.hs" 4 1 4 1+ , SrcSpan "tests/examples/DsStrictData.hs" 6 1 6 1+ , SrcSpan "tests/examples/DsStrictData.hs" 7 1 7 1+ , SrcSpan "tests/examples/DsStrictData.hs" 9 1 9 1+ , SrcSpan "tests/examples/DsStrictData.hs" 10 1 10 1+ , SrcSpan "tests/examples/DsStrictData.hs" 11 1 11 1+ , SrcSpan "tests/examples/DsStrictData.hs" 14 1 14 1+ , SrcSpan "tests/examples/DsStrictData.hs" 16 1 16 1+ , SrcSpan "tests/examples/DsStrictData.hs" 17 1 17 1+ , SrcSpan "tests/examples/DsStrictData.hs" 20 1 20 1+ , SrcSpan "tests/examples/DsStrictData.hs" 21 1 21 1+ , SrcSpan "tests/examples/DsStrictData.hs" 34 1 34 1+ , SrcSpan "tests/examples/DsStrictData.hs" 35 1 35 1+ , SrcSpan "tests/examples/DsStrictData.hs" 37 1 37 1+ , SrcSpan "tests/examples/DsStrictData.hs" 38 1 38 1+ , SrcSpan "tests/examples/DsStrictData.hs" 49 1 49 1+ , SrcSpan "tests/examples/DsStrictData.hs" 49 1 49 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 4 1 4 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 4 1 4 7+ , SrcSpan "tests/examples/DsStrictData.hs" 4 13 4 18+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 4 8 4 12+ , srcInfoPoints = []+ }+ "Main")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 1 1 1 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 1 1 1 13+ , SrcSpan "tests/examples/DsStrictData.hs" 1 33 1 34+ , SrcSpan "tests/examples/DsStrictData.hs" 1 45 1 46+ , SrcSpan "tests/examples/DsStrictData.hs" 1 53 1 56+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 1 14 1 33+ , srcInfoPoints = []+ }+ "ScopedTypeVariables"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 1 35 1 45+ , srcInfoPoints = []+ }+ "StrictData"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 1 47 1 52+ , srcInfoPoints = []+ }+ "GADTs"+ ]+ ]+ [ ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 6 1 6 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 6 1 6 7+ , SrcSpan "tests/examples/DsStrictData.hs" 6 8 6 17+ , SrcSpan "tests/examples/DsStrictData.hs" 6 36 6 38+ ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 6 18 6 35+ , srcInfoPoints = []+ }+ "Control.Exception"+ , importQualified = True+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs =+ Just+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 6 39 6 40+ , srcInfoPoints = []+ }+ "E")+ , importSpecs = Nothing+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 7 1 7 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 7 1 7 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 7 8 7 24+ , srcInfoPoints = []+ }+ "System.IO.Unsafe"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 7 25 7 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 7 25 7 26+ , SrcSpan "tests/examples/DsStrictData.hs" 7 41 7 42+ ]+ }+ False+ [ IVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 7 26 7 41+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 7 26 7 41+ , srcInfoPoints = []+ }+ "unsafePerformIO")+ ])+ }+ ]+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 1 9 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 9 15 9 16 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 1 9 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 6 9 14+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 6 9 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 6 9 12+ , srcInfoPoints = []+ }+ "Strict"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 13 9 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 13 9 14+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 17 9 20+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 17 9 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 17 9 18+ , srcInfoPoints = []+ }+ "S")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 19 9 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 9 19 9 20+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 10 1 10 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 10 16 10 17 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 10 1 10 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 10 6 10 15+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 10 6 10 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 10 6 10 13+ , srcInfoPoints = []+ }+ "Strict2"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 14 10 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 14 10 15+ , srcInfoPoints = []+ }+ "b")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 18 10 23+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 18 10 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 18 10 20+ , srcInfoPoints = []+ }+ "S2")+ [ TyBang+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 21 10 23+ , srcInfoPoints = []+ }+ (BangedTy+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 21 10 22+ , srcInfoPoints = []+ })+ (NoUnpackPragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "" (-1) (-1) (-1) (-1)+ , srcInfoPoints = []+ })+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 22 10 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 10 22 10 23+ , srcInfoPoints = []+ }+ "b"))+ ])+ ]+ []+ , GDataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 11 1 14 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 11 16 11 21+ , SrcSpan "tests/examples/DsStrictData.hs" 12 3 12 3+ , SrcSpan "tests/examples/DsStrictData.hs" 14 1 14 0+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 11 1 11 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 11 6 11 15+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 11 6 11 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 11 6 11 13+ , srcInfoPoints = []+ }+ "Strict3"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 11 14 11 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 11 14 11 15+ , srcInfoPoints = []+ }+ "c")))+ Nothing+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 12 3 12 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 12 6 12 8 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 12 3 12 5+ , srcInfoPoints = []+ }+ "S3")+ Nothing+ Nothing+ Nothing+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 12 9 12 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 12 11 12 13 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 12 9 12 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 12 9 12 10+ , srcInfoPoints = []+ }+ "c"))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 12 14 12 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 12 14 12 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 12 14 12 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 12 14 12 21+ , srcInfoPoints = []+ }+ "Strict3")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 12 22 12 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 12 22 12 23+ , srcInfoPoints = []+ }+ "c"))))+ ]+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 14 1 14 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 14 14 14 15 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 14 1 14 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 14 6 14 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 14 6 14 13+ , srcInfoPoints = []+ }+ "UStrict"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 16 14 37+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 16 14 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 16 14 18+ , srcInfoPoints = []+ }+ "US")+ [ TyBang+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 19 14 37+ , srcInfoPoints = []+ }+ (NoStrictAnnot+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "" (-1) (-1) (-1) (-1)+ , srcInfoPoints = []+ })+ (Unpack+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 19 14 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 14 19 14 29+ , SrcSpan "tests/examples/DsStrictData.hs" 14 30 14 33+ ]+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 34 14 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 34 14 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 14 34 14 37+ , srcInfoPoints = []+ }+ "Int")))+ ])+ ]+ []+ , DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 16 1 16 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 16 13 16 14 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 16 1 16 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 16 6 16 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 16 6 16 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 16 6 16 10+ , srcInfoPoints = []+ }+ "Lazy"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 11 16 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 11 16 12+ , srcInfoPoints = []+ }+ "d")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 15 16 19+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 15 16 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 15 16 16+ , srcInfoPoints = []+ }+ "L")+ [ TyBang+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 17 16 19+ , srcInfoPoints = []+ }+ (LazyTy+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 17 16 18+ , srcInfoPoints = []+ })+ (NoUnpackPragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "" (-1) (-1) (-1) (-1)+ , srcInfoPoints = []+ })+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 18 16 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 16 18 16 19+ , srcInfoPoints = []+ }+ "d"))+ ])+ ]+ []+ , GDataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 17 1 20 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 17 14 17 19+ , SrcSpan "tests/examples/DsStrictData.hs" 18 3 18 3+ , SrcSpan "tests/examples/DsStrictData.hs" 20 1 20 0+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 17 1 17 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 17 6 17 13+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 17 6 17 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 17 6 17 11+ , srcInfoPoints = []+ }+ "Lazy2"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 17 12 17 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 17 12 17 13+ , srcInfoPoints = []+ }+ "e")))+ Nothing+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 18 3 18 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 18 6 18 8 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 18 3 18 5+ , srcInfoPoints = []+ }+ "L2")+ Nothing+ Nothing+ Nothing+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 18 9 18 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 18 12 18 14 ]+ }+ (TyBang+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 18 9 18 11+ , srcInfoPoints = []+ }+ (LazyTy+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 18 9 18 10+ , srcInfoPoints = []+ })+ (NoUnpackPragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "" (-1) (-1) (-1) (-1)+ , srcInfoPoints = []+ })+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 10 18 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 10 18 11+ , srcInfoPoints = []+ }+ "e")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 15 18 22+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 15 18 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 15 18 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 15 18 20+ , srcInfoPoints = []+ }+ "Lazy2")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 21 18 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 18 21 18 22+ , srcInfoPoints = []+ }+ "e"))))+ ]+ []+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 20 1 20 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 20 6 20 8 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 20 1 20 5+ , srcInfoPoints = []+ }+ "main"+ ]+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 20 9 20 14+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 20 9 20 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 20 9 20 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 20 9 20 11+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 20 12 20 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 20 12 20 13+ , SrcSpan "tests/examples/DsStrictData.hs" 20 13 20 14+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 20 12 20 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 20 12 20 13+ , SrcSpan "tests/examples/DsStrictData.hs" 20 13 20 14+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 20 12 20 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 20 12 20 13+ , SrcSpan "tests/examples/DsStrictData.hs" 20 13 20 14+ ]+ }))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 21 1 29 42+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 21 1 21 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 21 1 21 5+ , srcInfoPoints = []+ }+ "main"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 21 6 29 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 21 6 21 7 ]+ }+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 22 3 29 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 22 3 22 5+ , SrcSpan "tests/examples/DsStrictData.hs" 22 6 22 6+ , SrcSpan "tests/examples/DsStrictData.hs" 23 6 23 6+ , SrcSpan "tests/examples/DsStrictData.hs" 24 6 24 6+ , SrcSpan "tests/examples/DsStrictData.hs" 25 6 25 6+ , SrcSpan "tests/examples/DsStrictData.hs" 26 6 26 6+ , SrcSpan "tests/examples/DsStrictData.hs" 27 6 27 6+ , SrcSpan "tests/examples/DsStrictData.hs" 28 6 28 6+ , SrcSpan "tests/examples/DsStrictData.hs" 29 6 29 6+ , SrcSpan "tests/examples/DsStrictData.hs" 34 1 34 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 22 6 22 33+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 22 6 22 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 22 6 22 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 22 6 22 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 6 22 11+ , srcInfoPoints = []+ }+ "print")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 12 22 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 22 12 22 13+ , SrcSpan "tests/examples/DsStrictData.hs" 22 32 22 33+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 13 22 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 13 22 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 13 22 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 13 22 21+ , srcInfoPoints = []+ }+ "isBottom")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 22 22 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 22 22 22 23+ , SrcSpan "tests/examples/DsStrictData.hs" 22 31 22 32+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 23 22 31+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 23 22 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 23 22 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 22 23 22 24+ , srcInfoPoints = []+ }+ "S")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 25 22 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 22 25 22 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 22 25 22 31+ , srcInfoPoints = []+ }+ "bottom"))))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 23 6 23 34+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 23 6 23 34+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 23 6 23 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 23 6 23 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 6 23 11+ , srcInfoPoints = []+ }+ "print")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 12 23 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 23 12 23 13+ , SrcSpan "tests/examples/DsStrictData.hs" 23 33 23 34+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 13 23 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 13 23 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 13 23 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 13 23 21+ , srcInfoPoints = []+ }+ "isBottom")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 22 23 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 23 22 23 23+ , SrcSpan "tests/examples/DsStrictData.hs" 23 32 23 33+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 23 23 32+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 23 23 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 23 23 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 23 23 23 25+ , srcInfoPoints = []+ }+ "S2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 26 23 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 23 26 23 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 23 26 23 32+ , srcInfoPoints = []+ }+ "bottom"))))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 24 6 24 34+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 24 6 24 34+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 24 6 24 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 24 6 24 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 6 24 11+ , srcInfoPoints = []+ }+ "print")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 12 24 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 24 12 24 13+ , SrcSpan "tests/examples/DsStrictData.hs" 24 33 24 34+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 13 24 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 13 24 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 13 24 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 13 24 21+ , srcInfoPoints = []+ }+ "isBottom")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 22 24 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 24 22 24 23+ , SrcSpan "tests/examples/DsStrictData.hs" 24 32 24 33+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 23 24 32+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 23 24 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 23 24 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 24 23 24 25+ , srcInfoPoints = []+ }+ "US")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 26 24 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 24 26 24 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 24 26 24 32+ , srcInfoPoints = []+ }+ "bottom"))))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 25 6 25 34+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 25 6 25 34+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 25 6 25 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 25 6 25 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 6 25 11+ , srcInfoPoints = []+ }+ "print")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 12 25 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 25 12 25 13+ , SrcSpan "tests/examples/DsStrictData.hs" 25 33 25 34+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 13 25 33+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 13 25 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 13 25 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 13 25 21+ , srcInfoPoints = []+ }+ "isBottom")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 22 25 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 25 22 25 23+ , SrcSpan "tests/examples/DsStrictData.hs" 25 32 25 33+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 23 25 32+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 23 25 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 23 25 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 25 23 25 25+ , srcInfoPoints = []+ }+ "S3")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 26 25 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 25 26 25 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 25 26 25 32+ , srcInfoPoints = []+ }+ "bottom"))))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 26 6 26 17+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 26 6 26 17+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 26 6 26 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 26 6 26 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 26 6 26 14+ , srcInfoPoints = []+ }+ "putStrLn")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 26 15 26 17+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 26 15 26 17+ , srcInfoPoints = []+ }+ ""+ "")))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 27 6 27 39+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 27 6 27 39+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 27 6 27 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 27 6 27 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 6 27 11+ , srcInfoPoints = []+ }+ "print")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 12 27 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 27 12 27 13+ , SrcSpan "tests/examples/DsStrictData.hs" 27 38 27 39+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 13 27 38+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 13 27 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 13 27 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 13 27 16+ , srcInfoPoints = []+ }+ "not")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 17 27 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 27 17 27 18+ , SrcSpan "tests/examples/DsStrictData.hs" 27 37 27 38+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 18 27 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 18 27 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 18 27 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 27 18 27 26+ , srcInfoPoints = []+ }+ "isBottom")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 27 27 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 27 27 27 28+ , SrcSpan "tests/examples/DsStrictData.hs" 27 36 27 37+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 27 28 27 36+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 27 28 27 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 27 28 27 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 27+ 28+ 27+ 29+ , srcInfoPoints = []+ }+ "L")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 27 30 27 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 27 30 27 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 27+ 30+ 27+ 36+ , srcInfoPoints = []+ }+ "bottom"))))))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 28 6 28 40+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 28 6 28 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 28 6 28 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 28 6 28 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 6 28 11+ , srcInfoPoints = []+ }+ "print")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 12 28 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 28 12 28 13+ , SrcSpan "tests/examples/DsStrictData.hs" 28 39 28 40+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 13 28 39+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 13 28 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 13 28 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 13 28 16+ , srcInfoPoints = []+ }+ "not")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 17 28 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 28 17 28 18+ , SrcSpan "tests/examples/DsStrictData.hs" 28 38 28 39+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 18 28 38+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 18 28 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 18 28 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 28 18 28 26+ , srcInfoPoints = []+ }+ "isBottom")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 27 28 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 28 27 28 28+ , SrcSpan "tests/examples/DsStrictData.hs" 28 37 28 38+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 28 28 28 37+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 28 28 28 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 28 28 28 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 28+ 28+ 28+ 30+ , srcInfoPoints = []+ }+ "L2")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 28 31 28 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 28 31 28 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 28+ 31+ 28+ 37+ , srcInfoPoints = []+ }+ "bottom"))))))))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 29 6 29 42+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 29 6 29 42+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 29 6 29 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 29 6 29 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 6 29 11+ , srcInfoPoints = []+ }+ "print")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 12 29 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 29 12 29 13+ , SrcSpan "tests/examples/DsStrictData.hs" 29 41 29 42+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 13 29 41+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 13 29 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 13 29 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 13 29 16+ , srcInfoPoints = []+ }+ "not")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 17 29 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 29 17 29 18+ , SrcSpan "tests/examples/DsStrictData.hs" 29 40 29 41+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 18 29 40+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 18 29 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 18 29 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 29 18 29 26+ , srcInfoPoints = []+ }+ "isBottom")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 27 29 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 29 27 29 28+ , SrcSpan "tests/examples/DsStrictData.hs" 29 39 29 40+ ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 29 28 29 39+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 29 28 29 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 29 28 29 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 29+ 28+ 29+ 32+ , srcInfoPoints = []+ }+ "Just")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 29 33 29 39+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 29 33 29 39+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 29+ 33+ 29+ 39+ , srcInfoPoints = []+ }+ "bottom"))))))))))+ ]))+ Nothing+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 34 1 34 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 34 8 34 10 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 34 1 34 7+ , srcInfoPoints = []+ }+ "bottom"+ ]+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 34 11 34 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 34 11 34 12+ , srcInfoPoints = []+ }+ "a"))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 35 1 35 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 35 1 35 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 35 1 35 7+ , srcInfoPoints = []+ }+ "bottom"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 35 8 35 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 35 8 35 9 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 35 10 35 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 35 10 35 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 35 10 35 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 35 10 35 15+ , srcInfoPoints = []+ }+ "error")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 35 16 35 21+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 35 16 35 21+ , srcInfoPoints = []+ }+ "_|_"+ "_|_"))))+ Nothing+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 37 1 37 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 37 10 37 12 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 37 1 37 9+ , srcInfoPoints = []+ }+ "isBottom"+ ]+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 37 13 37 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 37 15 37 17 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 37 13 37 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 37 13 37 14+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 37 18 37 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 37 18 37 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 37 18 37 22+ , srcInfoPoints = []+ }+ "Bool"))))+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 38 1 48 6+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 38 1 48 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 38 1 38 9+ , srcInfoPoints = []+ }+ "isBottom")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 10 38 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 10 38 11+ , srcInfoPoints = []+ }+ "f")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 38 12 48 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 38 12 38 13 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 38 14 48 6+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 14 38 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 14 38 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 14 38 29+ , srcInfoPoints = []+ }+ "unsafePerformIO")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 30 38 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 30 38 31+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 38 30 38 31+ , srcInfoPoints = []+ }+ "$")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 39 3 48 6+ , srcInfoPoints = []+ }+ (Paren+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 39 3 39 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 39 3 39 4+ , SrcSpan "tests/examples/DsStrictData.hs" 39 32 39 33+ ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 39 4 39 32+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 4 39 16+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 4 39 14+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 4 39 14+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 4 39 14+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 4 39 14+ , srcInfoPoints = []+ }+ "evaluate")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 15 39 16+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 15 39 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 15 39 16+ , srcInfoPoints = []+ }+ "f"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 17 39 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 17 39 19+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 17 39 19+ , srcInfoPoints = []+ }+ ">>")))+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 20 39 32+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 20 39 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 20 39 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 20 39 26+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 27 39 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 27 39 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 27 39 32+ , srcInfoPoints = []+ }+ "False"))))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 34 39 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 39 34 39 35+ , SrcSpan "tests/examples/DsStrictData.hs" 39 35 39 44+ , SrcSpan "tests/examples/DsStrictData.hs" 39 44 39 45+ ]+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 34 39 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 39 34 39 35+ , SrcSpan "tests/examples/DsStrictData.hs" 39 35 39 44+ , SrcSpan "tests/examples/DsStrictData.hs" 39 44 39 45+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 35 39 44+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 39 35 39 44+ , srcInfoPoints = []+ }+ "catches")))+ (List+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 40 5 48 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 40 5 40 6+ , SrcSpan "tests/examples/DsStrictData.hs" 41 5 41 6+ , SrcSpan "tests/examples/DsStrictData.hs" 42 5 42 6+ , SrcSpan "tests/examples/DsStrictData.hs" 43 5 43 6+ , SrcSpan "tests/examples/DsStrictData.hs" 44 5 44 6+ , SrcSpan "tests/examples/DsStrictData.hs" 45 5 45 6+ , SrcSpan "tests/examples/DsStrictData.hs" 46 5 46 6+ , SrcSpan "tests/examples/DsStrictData.hs" 47 5 47 6+ , SrcSpan "tests/examples/DsStrictData.hs" 48 5 48 6+ ]+ }+ [ App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 40 7 40 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 7 40 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 7 40 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 7 40 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 7 40 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 17 40 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 40 17 40 18+ , SrcSpan "tests/examples/DsStrictData.hs" 40 59 40 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 18 40 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 40 18 40 19+ , SrcSpan "tests/examples/DsStrictData.hs" 40 45 40 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 19 40 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 40 19 40 20+ , SrcSpan "tests/examples/DsStrictData.hs" 40 41 40 42+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 40 20 40 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 40 22 40 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 40 20 40 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 40 25 40 41+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 40+ 25+ 40+ 41+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 40+ 25+ 40+ 41+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 40+ 25+ 40+ 41+ , srcInfoPoints = []+ }+ "ArrayException"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 48 40 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 48 40 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 40 48 40 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 40 48 40 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 40 55 40 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 40 55 40 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 40 55 40 59+ , srcInfoPoints = []+ }+ "True"))))))+ , App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 41 7 41 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 7 41 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 7 41 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 7 41 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 7 41 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 17 41 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 41 17 41 18+ , SrcSpan "tests/examples/DsStrictData.hs" 41 59 41 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 18 41 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 41 18 41 19+ , SrcSpan "tests/examples/DsStrictData.hs" 41 45 41 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 19 41 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 41 19 41 20+ , SrcSpan "tests/examples/DsStrictData.hs" 41 36 41 37+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 41 20 41 36+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 41 22 41 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 41 20 41 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 41 25 41 36+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 41+ 25+ 41+ 36+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 41+ 25+ 41+ 36+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 41+ 25+ 41+ 36+ , srcInfoPoints = []+ }+ "ErrorCall"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 48 41 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 48 41 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 41 48 41 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 41 48 41 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 41 55 41 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 41 55 41 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 41 55 41 59+ , srcInfoPoints = []+ }+ "True"))))))+ , App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 42 7 42 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 7 42 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 7 42 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 7 42 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 7 42 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 17 42 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 42 17 42 18+ , SrcSpan "tests/examples/DsStrictData.hs" 42 59 42 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 18 42 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 42 18 42 19+ , SrcSpan "tests/examples/DsStrictData.hs" 42 45 42 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 19 42 41+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 42 19 42 20+ , SrcSpan "tests/examples/DsStrictData.hs" 42 40 42 41+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 42 20 42 40+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 42 22 42 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 42 20 42 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 42 25 42 40+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 42+ 25+ 42+ 40+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 42+ 25+ 42+ 40+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 42+ 25+ 42+ 40+ , srcInfoPoints = []+ }+ "NoMethodError"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 48 42 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 48 42 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 42 48 42 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 42 48 42 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 42 55 42 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 42 55 42 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 42 55 42 59+ , srcInfoPoints = []+ }+ "True"))))))+ , App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 43 7 43 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 7 43 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 7 43 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 7 43 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 7 43 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 17 43 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 43 17 43 18+ , SrcSpan "tests/examples/DsStrictData.hs" 43 59 43 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 18 43 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 43 18 43 19+ , SrcSpan "tests/examples/DsStrictData.hs" 43 45 43 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 19 43 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 43 19 43 20+ , SrcSpan "tests/examples/DsStrictData.hs" 43 41 43 42+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 43 20 43 41+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 43 22 43 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 43 20 43 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 43 25 43 41+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 43+ 25+ 43+ 41+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 43+ 25+ 43+ 41+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 43+ 25+ 43+ 41+ , srcInfoPoints = []+ }+ "NonTermination"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 48 43 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 48 43 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 43 48 43 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 43 48 43 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 43 55 43 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 43 55 43 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 43 55 43 59+ , srcInfoPoints = []+ }+ "True"))))))+ , App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 44 7 44 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 7 44 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 7 44 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 7 44 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 7 44 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 17 44 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 44 17 44 18+ , SrcSpan "tests/examples/DsStrictData.hs" 44 59 44 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 18 44 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 44 18 44 19+ , SrcSpan "tests/examples/DsStrictData.hs" 44 45 44 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 19 44 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 44 19 44 20+ , SrcSpan "tests/examples/DsStrictData.hs" 44 43 44 44+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 44 20 44 43+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 44 22 44 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 44 20 44 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 44 25 44 43+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 44+ 25+ 44+ 43+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 44+ 25+ 44+ 43+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 44+ 25+ 44+ 43+ , srcInfoPoints = []+ }+ "PatternMatchFail"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 48 44 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 48 44 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 44 48 44 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 44 48 44 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 44 55 44 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 44 55 44 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 44 55 44 59+ , srcInfoPoints = []+ }+ "True"))))))+ , App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 45 7 45 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 7 45 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 7 45 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 7 45 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 7 45 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 17 45 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 45 17 45 18+ , SrcSpan "tests/examples/DsStrictData.hs" 45 59 45 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 18 45 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 45 18 45 19+ , SrcSpan "tests/examples/DsStrictData.hs" 45 45 45 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 19 45 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 45 19 45 20+ , SrcSpan "tests/examples/DsStrictData.hs" 45 38 45 39+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 45 20 45 38+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 45 22 45 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 45 20 45 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 45 25 45 38+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 45+ 25+ 45+ 38+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 45+ 25+ 45+ 38+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 45+ 25+ 45+ 38+ , srcInfoPoints = []+ }+ "RecConError"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 48 45 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 48 45 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 45 48 45 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 45 48 45 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 45 55 45 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 45 55 45 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 45 55 45 59+ , srcInfoPoints = []+ }+ "True"))))))+ , App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 46 7 46 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 7 46 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 7 46 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 7 46 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 7 46 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 17 46 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 46 17 46 18+ , SrcSpan "tests/examples/DsStrictData.hs" 46 59 46 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 18 46 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 46 18 46 19+ , SrcSpan "tests/examples/DsStrictData.hs" 46 45 46 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 19 46 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 46 19 46 20+ , SrcSpan "tests/examples/DsStrictData.hs" 46 38 46 39+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 46 20 46 38+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 46 22 46 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 46 20 46 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 46 25 46 38+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 46+ 25+ 46+ 38+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 46+ 25+ 46+ 38+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 46+ 25+ 46+ 38+ , srcInfoPoints = []+ }+ "RecSelError"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 48 46 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 48 46 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 46 48 46 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 46 48 46 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 46 55 46 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 46 55 46 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 46 55 46 59+ , srcInfoPoints = []+ }+ "True"))))))+ , App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/DsStrictData.hs" 47 7 47 60+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 7 47 16+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 7 47 16+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 7 47 16+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 7 47 16+ , srcInfoPoints = []+ }+ "Handler")))+ (Paren+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 17 47 60+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 47 17 47 18+ , SrcSpan "tests/examples/DsStrictData.hs" 47 59 47 60+ ]+ }+ (Lambda+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 18 47 59+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 47 18 47 19+ , SrcSpan "tests/examples/DsStrictData.hs" 47 45 47 47+ ]+ }+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 19 47 39+ , srcInfoPoints =+ [ SrcSpan "tests/examples/DsStrictData.hs" 47 19 47 20+ , SrcSpan "tests/examples/DsStrictData.hs" 47 38 47 39+ ]+ }+ (PatTypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 47 20 47 38+ , srcInfoPoints =+ [ SrcSpan+ "tests/examples/DsStrictData.hs" 47 22 47 24+ ]+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 47 20 47 21+ , srcInfoPoints = []+ })+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 47 25 47 38+ , srcInfoPoints = []+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 47+ 25+ 47+ 38+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 47+ 25+ 47+ 38+ , srcInfoPoints = []+ }+ "E")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs"+ 47+ 25+ 47+ 38+ , srcInfoPoints = []+ }+ "RecUpdError"))))+ ]+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 48 47 59+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 48 47 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 47 48 47 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 47 48 47 54+ , srcInfoPoints = []+ }+ "return")))+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/DsStrictData.hs" 47 55 47 59+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 47 55 47 59+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/DsStrictData.hs" 47 55 47 59+ , srcInfoPoints = []+ }+ "True"))))))+ ]))))+ Nothing+ ]+ ]+ , [ Comment+ False+ (SrcSpan "tests/examples/DsStrictData.hs" 3 1 3 43)+ " | Tests the StrictData LANGUAGE pragma."+ , Comment+ False+ (SrcSpan "tests/examples/DsStrictData.hs" 29 43 29 58)+ " sanity check"+ , Comment+ False+ (SrcSpan "tests/examples/DsStrictData.hs" 31 1 31 73)+ "----------------------------------------------------------------------"+ , Comment+ False+ (SrcSpan "tests/examples/DsStrictData.hs" 32 1 32 34)+ " Support for testing for bottom"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,45 @@+{-# LANGUAGE ScopedTypeVariables, StrictData, GADTs #-}+module Main where+import qualified Control.Exception as E+import System.IO.Unsafe (unsafePerformIO)++data Strict a = S a++data Strict2 b = S2 !b++data Strict3 c where+ S3 :: c -> Strict3 c++data UStrict = US {-# UNPACK #-} Int++data Lazy d = L ~d++data Lazy2 e where+ L2 :: ~e -> Lazy2 e++main :: IO ()+main+ = do print (isBottom (S bottom))+ print (isBottom (S2 bottom))+ print (isBottom (US bottom))+ print (isBottom (S3 bottom))+ putStrLn ""+ print (not (isBottom (L bottom)))+ print (not (isBottom (L2 bottom)))+ print (not (isBottom (Just bottom)))++bottom :: a+bottom = error "_|_"++isBottom :: a -> Bool+isBottom f+ = unsafePerformIO $+ (E.evaluate f >> return False) `E.catches`+ [E.Handler (\ (_ :: E.ArrayException) -> return True),+ E.Handler (\ (_ :: E.ErrorCall) -> return True),+ E.Handler (\ (_ :: E.NoMethodError) -> return True),+ E.Handler (\ (_ :: E.NonTermination) -> return True),+ E.Handler (\ (_ :: E.PatternMatchFail) -> return True),+ E.Handler (\ (_ :: E.RecConError) -> return True),+ E.Handler (\ (_ :: E.RecSelError) -> return True),+ E.Handler (\ (_ :: E.RecUpdError) -> return True)]
@@ -0,0 +1,1 @@+{-# ANN foo "Hlint: ignore Test4" #-}
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,49 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyAnn.hs" 1 1 2 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyAnn.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyAnn.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyAnn.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyAnn.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyAnn.hs" 2 1 2 1+ ]+ }+ Nothing+ [ AnnModulePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyAnn.hs" 1 1 1 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyAnn.hs" 1 1 1 8+ , SrcSpan "tests/examples/EmptyAnn.hs" 1 35 1 38+ ]+ }+ (Ann+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyAnn.hs" 1 9 1 34+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyAnn.hs" 1 9 1 12+ , srcInfoPoints = []+ }+ "foo")+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyAnn.hs" 1 13 1 34+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyAnn.hs" 1 13 1 34+ , srcInfoPoints = []+ }+ "Hlint: ignore Test4"+ "Hlint: ignore Test4")))+ ]+ []+ []+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1 @@+{-# ANN foo "Hlint: ignore Test4" #-}
@@ -0,0 +1,6 @@+{-# LANGUAGE EmptyCase #-}+{-# LANGUAGE LambdaCase #-}++f x = case x of {}++g x = \case {}
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,159 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 1 1 7 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyCase.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyCase.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyCase.hs" 4 1 4 1+ , SrcSpan "tests/examples/EmptyCase.hs" 4 1 4 1+ , SrcSpan "tests/examples/EmptyCase.hs" 4 1 4 1+ , SrcSpan "tests/examples/EmptyCase.hs" 6 1 6 1+ , SrcSpan "tests/examples/EmptyCase.hs" 7 1 7 1+ , SrcSpan "tests/examples/EmptyCase.hs" 7 1 7 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 1 1 1 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyCase.hs" 1 1 1 13+ , SrcSpan "tests/examples/EmptyCase.hs" 1 24 1 27+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 1 14 1 23+ , srcInfoPoints = []+ }+ "EmptyCase"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 2 1 2 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyCase.hs" 2 1 2 13+ , SrcSpan "tests/examples/EmptyCase.hs" 2 25 2 28+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 2 14 2 24+ , srcInfoPoints = []+ }+ "LambdaCase"+ ]+ ]+ []+ [ FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 1 4 19+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 1 4 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 1 4 2+ , srcInfoPoints = []+ }+ "f")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 3 4 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 3 4 4+ , srcInfoPoints = []+ }+ "x")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 5 4 19+ , srcInfoPoints = [ SrcSpan "tests/examples/EmptyCase.hs" 4 5 4 6 ]+ }+ (Case+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 7 4 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyCase.hs" 4 7 4 11+ , SrcSpan "tests/examples/EmptyCase.hs" 4 14 4 16+ , SrcSpan "tests/examples/EmptyCase.hs" 4 17 4 18+ , SrcSpan "tests/examples/EmptyCase.hs" 4 18 4 19+ ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 12 4 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 12 4 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 4 12 4 13+ , srcInfoPoints = []+ }+ "x")))+ []))+ Nothing+ ]+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 6 1 6 15+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 6 1 6 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 6 1 6 2+ , srcInfoPoints = []+ }+ "g")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 6 3 6 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 6 3 6 4+ , srcInfoPoints = []+ }+ "x")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 6 5 6 15+ , srcInfoPoints = [ SrcSpan "tests/examples/EmptyCase.hs" 6 5 6 6 ]+ }+ (LCase+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyCase.hs" 6 7 6 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyCase.hs" 6 7 6 8+ , SrcSpan "tests/examples/EmptyCase.hs" 6 8 6 12+ , SrcSpan "tests/examples/EmptyCase.hs" 6 13 6 14+ , SrcSpan "tests/examples/EmptyCase.hs" 6 14 6 15+ ]+ }+ []))+ Nothing+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE EmptyCase #-}+{-# LANGUAGE LambdaCase #-}+f x = case x of { }+g x = \case { }
@@ -0,0 +1,1 @@+happyThen :: () => P a
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,79 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 1 2 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyContext.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyContext.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyContext.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyContext.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyContext.hs" 2 1 2 1+ ]+ }+ Nothing+ []+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 1 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyContext.hs" 1 11 1 13 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 1 1 10+ , srcInfoPoints = []+ }+ "happyThen"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 14 1 23+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxEmpty+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 14 1 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyContext.hs" 1 14 1 15+ , SrcSpan "tests/examples/EmptyContext.hs" 1 15 1 16+ , SrcSpan "tests/examples/EmptyContext.hs" 1 17 1 19+ ]+ }))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 20 1 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 20 1 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 20 1 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 20 1 21+ , srcInfoPoints = []+ }+ "P")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 22 1 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyContext.hs" 1 22 1 23+ , srcInfoPoints = []+ }+ "a"))))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,1 @@+happyThen :: () => P a
@@ -0,0 +1,4 @@+{-# LANGUAGE FunctionalDependencies #-}+module EmptyFunDepPremise where++class C a | -> a
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,115 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 1 4 1+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 5 1 5 1+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 5 1 5 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 2 1 2 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 2 1 2 7+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 2 27 2 32+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 2 8 2 26+ , srcInfoPoints = []+ }+ "EmptyFunDepPremise")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 1 1 1 40+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 1 1 1 13+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 1 37 1 40+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 1 14 1 36+ , srcInfoPoints = []+ }+ "FunctionalDependencies"+ ]+ ]+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 1 4 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 1 4 6+ , SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 11 4 12+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 7 4 10+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 7 4 8+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 7 4 8+ , srcInfoPoints = []+ }+ "C"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ "a")))+ [ FunDep+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 13 4 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 13 4 15 ]+ }+ []+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EmptyFunDepPremise.hs" 4 16 4 17+ , srcInfoPoints = []+ }+ "a"+ ]+ ]+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE FunctionalDependencies #-}+module EmptyFunDepPremise where++class C a | -> a
@@ -0,0 +1,4 @@+instance Traversable Tree where++x :: Int+x = 1
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,141 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyInstance.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 3 1 3 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 4 1 4 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 5 1 5 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 5 1 5 1+ ]+ }+ Nothing+ []+ []+ [ InstDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 1 3 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyInstance.hs" 1 1 1 9+ , SrcSpan "tests/examples/EmptyInstance.hs" 1 27 1 32+ , SrcSpan "tests/examples/EmptyInstance.hs" 3 1 3 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 3 1 3 1+ , SrcSpan "tests/examples/EmptyInstance.hs" 3 0 3 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 10 1 26+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 10 1 26+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 10 1 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 10 1 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 10 1 21+ , srcInfoPoints = []+ }+ "Traversable")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 22 1 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 22 1 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 1 22 1 26+ , srcInfoPoints = []+ }+ "Tree")))))+ (Just [])+ , TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 3 1 3 9+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyInstance.hs" 3 3 3 5 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 3 1 3 2+ , srcInfoPoints = []+ }+ "x"+ ]+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 3 6 3 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 3 6 3 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 3 6 3 9+ , srcInfoPoints = []+ }+ "Int")))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 4 1 4 6+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 4 1 4 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 4 1 4 2+ , srcInfoPoints = []+ }+ "x"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 4 3 4 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyInstance.hs" 4 3 4 4 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 4 5 4 6+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyInstance.hs" 4 5 4 6+ , srcInfoPoints = []+ }+ 1+ "1")))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+instance Traversable Tree where++x :: Int+x = 1
@@ -0,0 +1,3 @@+module EmptyList where++eAttrs = []
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,65 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 1 1 4 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyList.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyList.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyList.hs" 3 1 3 1+ , SrcSpan "tests/examples/EmptyList.hs" 4 1 4 1+ , SrcSpan "tests/examples/EmptyList.hs" 4 1 4 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 1 1 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyList.hs" 1 1 1 7+ , SrcSpan "tests/examples/EmptyList.hs" 1 18 1 23+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 1 8 1 17+ , srcInfoPoints = []+ }+ "EmptyList")+ Nothing+ Nothing))+ []+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 3 1 3 12+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 3 1 3 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 3 1 3 7+ , srcInfoPoints = []+ }+ "eAttrs"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 3 8 3 12+ , srcInfoPoints = [ SrcSpan "tests/examples/EmptyList.hs" 3 8 3 9 ]+ }+ (List+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyList.hs" 3 10 3 12+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyList.hs" 3 10 3 11+ , SrcSpan "tests/examples/EmptyList.hs" 3 11 3 12+ ]+ }+ []))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,2 @@+module EmptyList where+eAttrs = []
@@ -0,0 +1,1 @@+foo = 5 where
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,64 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 1 1 2 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyWhere.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyWhere.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyWhere.hs" 1 1 1 1+ , SrcSpan "tests/examples/EmptyWhere.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyWhere.hs" 2 1 2 1+ ]+ }+ Nothing+ []+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 1 1 2 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyWhere.hs" 1 9 1 14 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 1 1 1 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 1 1 1 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 1 5 1 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyWhere.hs" 1 5 1 6 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 1 7 1 8+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 1 7 1 8+ , srcInfoPoints = []+ }+ 5+ "5")))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/EmptyWhere.hs" 2 0 2 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EmptyWhere.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyWhere.hs" 2 1 2 1+ , SrcSpan "tests/examples/EmptyWhere.hs" 2 0 2 0+ ]+ }+ []))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,2 @@+foo = 5+ where
@@ -0,0 +1,5 @@+-- https://github.com/haskell-suite/haskell-src-exts/issues/91+{-# LANGUAGE GADTs #-}++one :: a ~ Int => a+one = 1
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,178 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 2 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EqualityConstraints1.hs" 2 1 2 1+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 4 1 4 1+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 4 1 4 1+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 4 1 4 1+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 5 1 5 1+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 6 1 6 1+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 6 1 6 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 2 1 2 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EqualityConstraints1.hs" 2 1 2 13+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 2 20 2 23+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 2 14 2 19+ , srcInfoPoints = []+ }+ "GADTs"+ ]+ ]+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 1 4 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 5 4 7 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ "one"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 8 4 20+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 8 4 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 10 4 11+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 4 16 4 18+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 8 4 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 10 4 11+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 4 16 4 18+ ]+ }+ (TyEquals+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 8 4 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 10 4 11+ , SrcSpan "tests/examples/EqualityConstraints1.hs" 4 16 4 18+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 8 4 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 8 4 9+ , srcInfoPoints = []+ }+ "a"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 12 4 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 12 4 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 12 4 15+ , srcInfoPoints = []+ }+ "Int")))))))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 19 4 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 4 19 4 20+ , srcInfoPoints = []+ }+ "a")))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 5 1 5 8+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 5 1 5 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 5 1 5 4+ , srcInfoPoints = []+ }+ "one"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 5 5 5 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/EqualityConstraints1.hs" 5 5 5 6 ]+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 5 7 5 8+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/EqualityConstraints1.hs" 5 7 5 8+ , srcInfoPoints = []+ }+ 1+ "1")))+ Nothing+ ]+ , [ Comment+ False+ (SrcSpan "tests/examples/EqualityConstraints1.hs" 1 1 1 63)+ " https://github.com/haskell-suite/haskell-src-exts/issues/91"+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE GADTs #-}++one :: a ~ Int => a+one = 1
@@ -0,0 +1,2 @@+one :: a ~ Int => a+one = 1
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/EqualityConstraints2.hs" 1 19) "At least one of TypeFamilies or GADTs language extensions needs to be enabled. Please add: {-# LANGUAGE TypeFamilies #-} or {-# LANGUAGE GADTs #-} language pragma at the top of your module."
@@ -0,0 +1,3 @@+ParseFailed+ (SrcLoc "tests/examples/EqualityConstraints2.hs" 1 19)+ "At least one of TypeFamilies or GADTs language extensions needs to be enabled. Please add: {-# LANGUAGE TypeFamilies #-} or {-# LANGUAGE GADTs #-} language pragma at the top of your module."
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/EqualityConstraints2.hs" 1 19) "At least one of TypeFamilies or GADTs language extensions needs to be enabled. Please add: {-# LANGUAGE TypeFamilies #-} or {-# LANGUAGE GADTs #-} language pragma at the top of your module."
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/EqualityConstraints2.hs" 1 19) "At least one of TypeFamilies or GADTs language extensions needs to be enabled. Please add: {-# LANGUAGE TypeFamilies #-} or {-# LANGUAGE GADTs #-} language pragma at the top of your module."
@@ -0,0 +1,4 @@+{-# LANGUAGE ExplicitNamespaces #-}+import Data.Array.Repa ( type (++) )+import Data.Array.Repa ( type {- comment here -} (++) )+import Data.Array.Repa ( type {- comment2 here -} (++) {- and here -} )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,237 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 1 1 1 1+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 1 3 1+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 1 4 1+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 5 1 5 1+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 5 1 5 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 1 1 1 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 1 1 1 13+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 1 33 1 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 1 14 1 32+ , srcInfoPoints = []+ }+ "ExplicitNamespaces"+ ]+ ]+ [ ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 1 2 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 1 2 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 8 2 23+ , srcInfoPoints = []+ }+ "Data.Array.Repa"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 24 2 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 24 2 25+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 36 2 37+ ]+ }+ False+ [ IAbs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 26 2 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 26 2 30+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 31 2 35+ ]+ }+ (TypeNamespace+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 26 2 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 26 2 30 ]+ })+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 31 2 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 31 2 32+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 32 2 34+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 2 34 2 35+ ]+ }+ "++")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 1 3 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 1 3 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 8 3 23+ , srcInfoPoints = []+ }+ "Data.Array.Repa"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 24 3 56+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 24 3 25+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 55 3 56+ ]+ }+ False+ [ IAbs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 26 3 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 26 3 30+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 50 3 54+ ]+ }+ (TypeNamespace+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 26 3 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 26 3 30 ]+ })+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 50 3 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 50 3 51+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 51 3 53+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 53 3 54+ ]+ }+ "++")+ ])+ }+ , ImportDecl+ { importAnn =+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 1 4 76+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 1 4 7 ]+ }+ , importModule =+ ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 8 4 23+ , srcInfoPoints = []+ }+ "Data.Array.Repa"+ , importQualified = False+ , importSrc = False+ , importSafe = False+ , importPkg = Nothing+ , importAs = Nothing+ , importSpecs =+ Just+ (ImportSpecList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 24 4 76+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 24 4 25+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 75 4 76+ ]+ }+ False+ [ IAbs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 29 4 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 29 4 33+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 54 4 58+ ]+ }+ (TypeNamespace+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 29 4 33+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 29 4 33 ]+ })+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 54 4 58+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 54 4 55+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 55 4 57+ , SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 57 4 58+ ]+ }+ "++")+ ])+ }+ ]+ []+ , [ Comment+ True+ (SrcSpan "tests/examples/ExplicitNamespaces1.hs" 3 31 3 49)+ " comment here "+ , Comment+ True+ (SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 34 4 53)+ " comment2 here "+ , Comment+ True+ (SrcSpan "tests/examples/ExplicitNamespaces1.hs" 4 60 4 74)+ " and here "+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE ExplicitNamespaces #-}+import Data.Array.Repa (type (++))+import Data.Array.Repa (type (++))+import Data.Array.Repa (type (++))
@@ -0,0 +1,4 @@+{-# LANGUAGE ExplicitNamespaces #-}+module ExplicitNamespaces2 ( f, type (++) ) where++f = undefined
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,164 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 1 1 1 1+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 1 4 1+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 5 1 5 1+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 5 1 5 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 1 2 50+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 1 2 7+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 45 2 50+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 8 2 27+ , srcInfoPoints = []+ }+ "ExplicitNamespaces2")+ Nothing+ (Just+ (ExportSpecList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 28 2 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 28 2 29+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 31 2 32+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 43 2 44+ ]+ }+ [ EVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 30 2 31+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 30 2 31+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 30 2 31+ , srcInfoPoints = []+ }+ "f"))+ , EAbs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 33 2 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 33 2 37+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 38 2 42+ ]+ }+ (TypeNamespace+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 33 2 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 33 2 37 ]+ })+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 38 2 42+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 38 2 39+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 39 2 41+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 41 2 42+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 2 39 2 41+ , srcInfoPoints = []+ }+ "++"))+ ]))))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 1 1 1 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 1 1 1 13+ , SrcSpan "tests/examples/ExplicitNamespaces2.hs" 1 33 1 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 1 14 1 32+ , srcInfoPoints = []+ }+ "ExplicitNamespaces"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 1 4 14+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 1 4 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 1 4 2+ , srcInfoPoints = []+ }+ "f"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 3 4 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 3 4 4 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 5 4 14+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 5 4 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces2.hs" 4 5 4 14+ , srcInfoPoints = []+ }+ "undefined"))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,3 @@+{-# LANGUAGE ExplicitNamespaces #-}+module ExplicitNamespaces2 (f, type (++)) where+f = undefined
@@ -0,0 +1,5 @@+{-# LANGUAGE ExplicitNamespaces #-}++module Foo(type Str) where++data Str = Str
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,145 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 1 1 1 1+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 1 3 1+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 1 3 1+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 1 5 1+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 6 1 6 1+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 6 1 6 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 1 3 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 1 3 7+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 22 3 27+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 8 3 11+ , srcInfoPoints = []+ }+ "Foo")+ Nothing+ (Just+ (ExportSpecList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 11 3 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 11 3 12+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 20 3 21+ ]+ }+ [ EAbs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 12 3 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 12 3 16+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 17 3 20+ ]+ }+ (TypeNamespace+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 12 3 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 12 3 16 ]+ })+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 17 3 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 3 17 3 20+ , srcInfoPoints = []+ }+ "Str"))+ ]))))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 1 1 1 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 1 1 1 13+ , SrcSpan "tests/examples/ExplicitNamespaces3.hs" 1 33 1 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 1 14 1 32+ , srcInfoPoints = []+ }+ "ExplicitNamespaces"+ ]+ ]+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 1 5 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 10 5 11 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 1 5 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 6 5 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 6 5 9+ , srcInfoPoints = []+ }+ "Str"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 12 5 15+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 12 5 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces3.hs" 5 12 5 15+ , srcInfoPoints = []+ }+ "Str")+ [])+ ]+ []+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE ExplicitNamespaces #-}+module Foo (type Str) where++data Str = Str
@@ -0,0 +1,5 @@+{-# LANGUAGE ExplicitNamespaces #-}+{-# LANGUAGE TypeOperators #-}+module Foo (type (:-)) where++data (:-) = Foo
@@ -0,0 +1,6 @@+{-# LANGUAGE ExplicitNamespaces #-}+{-# LANGUAGE TypeOperators #-}+module Foo (type (:-)) where++data :- = Foo+
@@ -0,0 +1,171 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 1 1 1 1+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 1 3 1+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 1 3 1+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 1 5 1+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 6 1 6 1+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 6 1 6 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 1 3 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 1 3 7+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 24 3 29+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 8 3 11+ , srcInfoPoints = []+ }+ "Foo")+ Nothing+ (Just+ (ExportSpecList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 12 3 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 12 3 13+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 22 3 23+ ]+ }+ [ EAbs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 13 3 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 13 3 17+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 18 3 22+ ]+ }+ (TypeNamespace+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 13 3 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 13 3 17 ]+ })+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 18 3 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 18 3 19+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 19 3 21+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 21 3 22+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 3 19 3 21+ , srcInfoPoints = []+ }+ ":-"))+ ]))))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 1 1 1 36+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 1 1 1 13+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 1 33 1 36+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 1 14 1 32+ , srcInfoPoints = []+ }+ "ExplicitNamespaces"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 2 1 2 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 2 1 2 13+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 2 28 2 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 2 14 2 27+ , srcInfoPoints = []+ }+ "TypeOperators"+ ]+ ]+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 1 5 16+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 11 5 12 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 1 5 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 6 5 10+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 6 5 7+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 7 5 9+ , SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 9 5 10+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 7 5 9+ , srcInfoPoints = []+ }+ ":-"))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 13 5 16+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 13 5 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExplicitNamespaces4.hs" 5 13 5 16+ , srcInfoPoints = []+ }+ "Foo")+ [])+ ]+ []+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+{-# LANGUAGE ExplicitNamespaces #-}+{-# LANGUAGE TypeOperators #-}+module Foo (type (:-)) where++data (:-) = Foo
@@ -0,0 +1,10 @@++foo = _++foo = _ x++foo = _++foo x = baz+ where+ foo _ = _
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,260 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 1 11 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExprHole.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExprHole.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExprHole.hs" 2 1 2 1+ , SrcSpan "tests/examples/ExprHole.hs" 4 1 4 1+ , SrcSpan "tests/examples/ExprHole.hs" 6 1 6 1+ , SrcSpan "tests/examples/ExprHole.hs" 8 1 8 1+ , SrcSpan "tests/examples/ExprHole.hs" 11 1 11 1+ , SrcSpan "tests/examples/ExprHole.hs" 11 1 11 1+ ]+ }+ Nothing+ []+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 1 2 8+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 1 2 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 1 2 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 5 2 8+ , srcInfoPoints = [ SrcSpan "tests/examples/ExprHole.hs" 2 5 2 6 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 7 2 8+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 7 2 8+ , srcInfoPoints = []+ }+ (ExprHole+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 2 7 2 8+ , srcInfoPoints = []+ }))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 1 4 10+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 1 4 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 5 4 10+ , srcInfoPoints = [ SrcSpan "tests/examples/ExprHole.hs" 4 5 4 6 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 7 4 10+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 7 4 8+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 7 4 8+ , srcInfoPoints = []+ }+ (ExprHole+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 7 4 8+ , srcInfoPoints = []+ })))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 4 9 4 10+ , srcInfoPoints = []+ }+ "x")))))+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 6 1 6 11+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 6 5 6 11+ , srcInfoPoints = [ SrcSpan "tests/examples/ExprHole.hs" 6 5 6 6 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 6 10 6 11+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 6 10 6 11+ , srcInfoPoints = []+ }+ (ExprHole+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 6 10 6 11+ , srcInfoPoints = []+ }))))+ Nothing+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 1 10 14+ , srcInfoPoints = [ SrcSpan "tests/examples/ExprHole.hs" 9 3 9 8 ]+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 1 10 14+ , srcInfoPoints = [ SrcSpan "tests/examples/ExprHole.hs" 9 3 9 8 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 1 8 4+ , srcInfoPoints = []+ }+ "foo")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 5 8 6+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 5 8 6+ , srcInfoPoints = []+ }+ "x")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 7 8 12+ , srcInfoPoints = [ SrcSpan "tests/examples/ExprHole.hs" 8 7 8 8 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 9 8 12+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 9 8 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 8 9 8 12+ , srcInfoPoints = []+ }+ "baz"))))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 10 5 10 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExprHole.hs" 10 5 10 5+ , SrcSpan "tests/examples/ExprHole.hs" 11 1 11 0+ ]+ }+ [ FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 10 5 10 14+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 10 5 10 14+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 10 5 10 8+ , srcInfoPoints = []+ }+ "foo")+ [ PWildCard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 10 9 10 10+ , srcInfoPoints = []+ }+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 10 11 10 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExprHole.hs" 10 11 10 12 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ExprHole.hs" 10 13 10 14+ , srcInfoPoints = []+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExprHole.hs" 10 13 10 14+ , srcInfoPoints = []+ }+ (ExprHole+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExprHole.hs" 10 13 10 14+ , srcInfoPoints = []+ }))))+ Nothing+ ]+ ]))+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+foo = _+foo = _ x+foo = _+foo x = baz+ where foo _ = _
@@ -0,0 +1,3 @@+module ExtraEndBrace where++data A = B {c :: D}}
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/ExtraEndBrace.hs" 3 20) "Unexpected }"
@@ -0,0 +1,2 @@+ParseFailed+ (SrcLoc "tests/examples/ExtraEndBrace.hs" 3 20) "Unexpected }"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/ExtraEndBrace.hs" 3 20) "Unexpected }"
@@ -0,0 +1,1 @@+ParseFailed (SrcLoc "tests/examples/ExtraEndBrace.hs" 3 20) "Unexpected }"
@@ -0,0 +1,9 @@+data Q a = Q a a++-- In this example, the pretty-printer should insert extra parentheses around+-- the negative literal pattern.+x * - 1 = negate x++-- In these examples, the pretty-printer should not insert extra parentheses.+Just x <> Nothing = Just x+f (- 1 `Q` _) = ()
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,480 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 1 10 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 1 1 1+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 1 1 1+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 1 1 1+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 1 5 1+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 1 8 1+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 1 9 1+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 10 1 10 1+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 10 1 10 1+ ]+ }+ Nothing+ []+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 1 1 17+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 10 1 11 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 1 1 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 6 1 9+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 6 1 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 6 1 7+ , srcInfoPoints = []+ }+ "Q"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 8 1 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 8 1 9+ , srcInfoPoints = []+ }+ "a")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 12 1 17+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 12 1 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 12 1 13+ , srcInfoPoints = []+ }+ "Q")+ [ TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 14 1 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 14 1 15+ , srcInfoPoints = []+ }+ "a")+ , TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 16 1 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 1 16 1 17+ , srcInfoPoints = []+ }+ "a")+ ])+ ]+ []+ , FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 1 5 19+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 1 5 19+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 1 5 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 1 5 2+ , srcInfoPoints = []+ }+ "x"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 3 5 4+ , srcInfoPoints = []+ }+ "*")+ [ PLit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 5 5 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 5 5 6 ]+ }+ (Negative+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 5 5 6+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 5 5 6 ]+ })+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 7 5 8+ , srcInfoPoints = []+ }+ 1+ "1")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 9 5 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 9 5 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 11 5 19+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 11 5 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 11 5 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 11 5 17+ , srcInfoPoints = []+ }+ "negate")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 5 18 5 19+ , srcInfoPoints = []+ }+ "x")))))+ Nothing+ ]+ , FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 1 8 27+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 1 8 27+ , srcInfoPoints = []+ }+ (PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 1 8 7+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 1 8 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 1 8 5+ , srcInfoPoints = []+ }+ "Just"))+ [ PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ "x")+ ])+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 8 8 10+ , srcInfoPoints = []+ }+ "<>")+ [ PApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 11 8 18+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 11 8 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 11 8 18+ , srcInfoPoints = []+ }+ "Nothing"))+ []+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 19 8 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 19 8 20 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 21 8 27+ , srcInfoPoints = []+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 21 8 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 21 8 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 21 8 25+ , srcInfoPoints = []+ }+ "Just")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 26 8 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 26 8 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 8 26 8 27+ , srcInfoPoints = []+ }+ "x")))))+ Nothing+ ]+ , FunBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 1 9 19+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 1 9 19+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 1 9 2+ , srcInfoPoints = []+ }+ "f")+ [ PParen+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 3 9 14+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 3 9 4+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 13 9 14+ ]+ }+ (PInfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 4 9 13+ , srcInfoPoints = []+ }+ (PLit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 4 9 7+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 4 9 5 ]+ }+ (Negative+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 4 9 5+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 4 9 5 ]+ })+ (Int+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 6 9 7+ , srcInfoPoints = []+ }+ 1+ "1"))+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 8 9 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 8 9 9+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 9 9 10+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 10 9 11+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 9 9 10+ , srcInfoPoints = []+ }+ "Q"))+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 12 9 13+ , srcInfoPoints = []+ }))+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 15 9 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 15 9 16 ]+ }+ (Con+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 17 9 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 17 9 18+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 18 9 19+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 17 9 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 17 9 18+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 18 9 19+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 17 9 19+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 17 9 18+ , SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 9 18 9 19+ ]+ }))))+ Nothing+ ]+ ]+ , [ Comment+ False+ (SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 3 1 3 78)+ " In this example, the pretty-printer should insert extra parentheses around"+ , Comment+ False+ (SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 4 1 4 33)+ " the negative literal pattern."+ , Comment+ False+ (SrcSpan "tests/examples/ExtraPrettyParentheses.hs" 7 1 7 78)+ " In these examples, the pretty-printer should not insert extra parentheses."+ ]+ )
@@ -0,0 +1,10 @@+Roundtrip test failed++AST 1:++Module () Nothing [] [] [DataDecl () (DataType ()) Nothing (DHApp () (DHead () (Ident () "Q")) (UnkindedVar () (Ident () "a"))) [QualConDecl () Nothing Nothing (ConDecl () (Ident () "Q") [TyVar () (Ident () "a"),TyVar () (Ident () "a")])] [],FunBind () [InfixMatch () (PVar () (Ident () "x")) (Symbol () "*") [PLit () (Negative ()) (Int () 1 "1")] (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "negate"))) (Var () (UnQual () (Ident () "x"))))) Nothing],FunBind () [InfixMatch () (PApp () (UnQual () (Ident () "Just")) [PVar () (Ident () "x")]) (Symbol () "<>") [PApp () (UnQual () (Ident () "Nothing")) []] (UnGuardedRhs () (App () (Con () (UnQual () (Ident () "Just"))) (Var () (UnQual () (Ident () "x"))))) Nothing],FunBind () [Match () (Ident () "f") [PParen () (PInfixApp () (PLit () (Negative ()) (Int () 1 "1")) (UnQual () (Ident () "Q")) (PWildCard ()))] (UnGuardedRhs () (Con () (Special () (UnitCon ())))) Nothing]]++AST 2:++Module () Nothing [] [] [DataDecl () (DataType ()) Nothing (DHApp () (DHead () (Ident () "Q")) (UnkindedVar () (Ident () "a"))) [QualConDecl () Nothing Nothing (ConDecl () (Ident () "Q") [TyVar () (Ident () "a"),TyVar () (Ident () "a")])] [],FunBind () [InfixMatch () (PVar () (Ident () "x")) (Symbol () "*") [PParen () (PLit () (Negative ()) (Int () 1 "1"))] (UnGuardedRhs () (App () (Var () (UnQual () (Ident () "negate"))) (Var () (UnQual () (Ident () "x"))))) Nothing],FunBind () [InfixMatch () (PApp () (UnQual () (Ident () "Just")) [PVar () (Ident () "x")]) (Symbol () "<>") [PApp () (UnQual () (Ident () "Nothing")) []] (UnGuardedRhs () (App () (Con () (UnQual () (Ident () "Just"))) (Var () (UnQual () (Ident () "x"))))) Nothing],FunBind () [Match () (Ident () "f") [PParen () (PInfixApp () (PLit () (Negative ()) (Int () 1 "1")) (UnQual () (Ident () "Q")) (PWildCard ()))] (UnGuardedRhs () (Con () (Special () (UnitCon ())))) Nothing]]+
@@ -0,0 +1,4 @@+data Q a = Q a a+x * (-1) = negate x+Just x <> Nothing = Just x+f (-1 `Q` _) = ()
@@ -0,0 +1,7 @@+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI, CApiFFI #-}+module FFIExtensions where++foreign import ccall interruptible+ "sleep" sleep :: CUint -> IO CUint++foreign import capi "header.h f" f :: CInt -> IO CInt
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,234 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 1 1 8 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIExtensions.hs" 1 1 1 1+ , SrcSpan "tests/examples/FFIExtensions.hs" 2 1 2 1+ , SrcSpan "tests/examples/FFIExtensions.hs" 2 1 2 1+ , SrcSpan "tests/examples/FFIExtensions.hs" 4 1 4 1+ , SrcSpan "tests/examples/FFIExtensions.hs" 7 1 7 1+ , SrcSpan "tests/examples/FFIExtensions.hs" 8 1 8 1+ , SrcSpan "tests/examples/FFIExtensions.hs" 8 1 8 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 2 1 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIExtensions.hs" 2 1 2 7+ , SrcSpan "tests/examples/FFIExtensions.hs" 2 22 2 27+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 2 8 2 21+ , srcInfoPoints = []+ }+ "FFIExtensions")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 1 1 1 69+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIExtensions.hs" 1 1 1 13+ , SrcSpan "tests/examples/FFIExtensions.hs" 1 38 1 39+ , SrcSpan "tests/examples/FFIExtensions.hs" 1 56 1 57+ , SrcSpan "tests/examples/FFIExtensions.hs" 1 66 1 69+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 1 14 1 38+ , srcInfoPoints = []+ }+ "ForeignFunctionInterface"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 1 40 1 56+ , srcInfoPoints = []+ }+ "InterruptibleFFI"+ , Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 1 58 1 65+ , srcInfoPoints = []+ }+ "CApiFFI"+ ]+ ]+ []+ [ ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 4 1 5 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIExtensions.hs" 4 1 4 8+ , SrcSpan "tests/examples/FFIExtensions.hs" 4 9 4 15+ , SrcSpan "tests/examples/FFIExtensions.hs" 5 4 5 11+ , SrcSpan "tests/examples/FFIExtensions.hs" 5 18 5 20+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 4 16 4 21+ , srcInfoPoints = []+ })+ (Just+ (PlayInterruptible+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 4 22 4 35+ , srcInfoPoints = []+ }))+ (Just "sleep")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 12 5 17+ , srcInfoPoints = []+ }+ "sleep")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 21 5 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIExtensions.hs" 5 27 5 29 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 21 5 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 21 5 26+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 21 5 26+ , srcInfoPoints = []+ }+ "CUint")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 30 5 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 30 5 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 30 5 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 30 5 32+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 33 5 38+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 33 5 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 5 33 5 38+ , srcInfoPoints = []+ }+ "CUint")))))+ , ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 1 7 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIExtensions.hs" 7 1 7 8+ , SrcSpan "tests/examples/FFIExtensions.hs" 7 9 7 15+ , SrcSpan "tests/examples/FFIExtensions.hs" 7 21 7 33+ , SrcSpan "tests/examples/FFIExtensions.hs" 7 36 7 38+ ]+ }+ (CApi+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 16 7 20+ , srcInfoPoints = []+ })+ Nothing+ (Just "header.h f")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 34 7 35+ , srcInfoPoints = []+ }+ "f")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 39 7 54+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIExtensions.hs" 7 44 7 46 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 39 7 43+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 39 7 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 39 7 43+ , srcInfoPoints = []+ }+ "CInt")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 47 7 54+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 47 7 49+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 47 7 49+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 47 7 49+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 50 7 54+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 50 7 54+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FFIExtensions.hs" 7 50 7 54+ , srcInfoPoints = []+ }+ "CInt")))))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,8 @@+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI, CApiFFI+ #-}+module FFIExtensions where++foreign import ccall interruptible "sleep" sleep ::+ CUint -> IO CUint++foreign import capi "header.h f" f :: CInt -> IO CInt
@@ -0,0 +1,3 @@+{-# LANGUAGE InterruptibleFFI #-}+foo = interruptible+
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,83 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 1 1 4 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIInterruptible.hs" 1 1 1 1+ , SrcSpan "tests/examples/FFIInterruptible.hs" 2 1 2 1+ , SrcSpan "tests/examples/FFIInterruptible.hs" 2 1 2 1+ , SrcSpan "tests/examples/FFIInterruptible.hs" 2 1 2 1+ , SrcSpan "tests/examples/FFIInterruptible.hs" 4 1 4 1+ , SrcSpan "tests/examples/FFIInterruptible.hs" 4 1 4 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 1 1 1 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIInterruptible.hs" 1 1 1 13+ , SrcSpan "tests/examples/FFIInterruptible.hs" 1 31 1 34+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 1 14 1 30+ , srcInfoPoints = []+ }+ "InterruptibleFFI"+ ]+ ]+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 2 1 2 20+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 2 1 2 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 2 1 2 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 2 5 2 20+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FFIInterruptible.hs" 2 5 2 6 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 2 7 2 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 2 7 2 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FFIInterruptible.hs" 2 7 2 20+ , srcInfoPoints = []+ }+ "interruptible"))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,2 @@+{-# LANGUAGE InterruptibleFFI #-}+foo = interruptible
@@ -0,0 +1,4 @@+{-# LANGUAGE TypeFamilies #-}+module FamilyKindSig where++type family WithKindSig (a :: * -> *)
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,107 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyKindSig.hs" 1 1 1 1+ , SrcSpan "tests/examples/FamilyKindSig.hs" 2 1 2 1+ , SrcSpan "tests/examples/FamilyKindSig.hs" 2 1 2 1+ , SrcSpan "tests/examples/FamilyKindSig.hs" 4 1 4 1+ , SrcSpan "tests/examples/FamilyKindSig.hs" 5 1 5 1+ , SrcSpan "tests/examples/FamilyKindSig.hs" 5 1 5 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 2 1 2 27+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyKindSig.hs" 2 1 2 7+ , SrcSpan "tests/examples/FamilyKindSig.hs" 2 22 2 27+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 2 8 2 21+ , srcInfoPoints = []+ }+ "FamilyKindSig")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 1 1 1 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyKindSig.hs" 1 1 1 13+ , SrcSpan "tests/examples/FamilyKindSig.hs" 1 27 1 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 1 14 1 26+ , srcInfoPoints = []+ }+ "TypeFamilies"+ ]+ ]+ []+ [ TypeFamDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 1 4 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyKindSig.hs" 4 1 4 5+ , SrcSpan "tests/examples/FamilyKindSig.hs" 4 6 4 12+ ]+ }+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 13 4 38+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 13 4 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 13 4 24+ , srcInfoPoints = []+ }+ "WithKindSig"))+ (KindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 25 4 38+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyKindSig.hs" 4 25 4 26+ , SrcSpan "tests/examples/FamilyKindSig.hs" 4 28 4 30+ , SrcSpan "tests/examples/FamilyKindSig.hs" 4 37 4 38+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 26 4 27+ , srcInfoPoints = []+ }+ "a")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 31 4 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyKindSig.hs" 4 33 4 35 ]+ }+ (TyStar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 31 4 32+ , srcInfoPoints = []+ })+ (TyStar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyKindSig.hs" 4 36 4 37+ , srcInfoPoints = []+ }))))+ Nothing+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE TypeFamilies #-}+module FamilyKindSig where++type family WithKindSig (a :: * -> *)
@@ -0,0 +1,4 @@+{-# LANGUAGE TypeFamilies #-}+module FamilyVarid where++f family forall = undefined
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,113 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyVarid.hs" 1 1 1 1+ , SrcSpan "tests/examples/FamilyVarid.hs" 2 1 2 1+ , SrcSpan "tests/examples/FamilyVarid.hs" 2 1 2 1+ , SrcSpan "tests/examples/FamilyVarid.hs" 4 1 4 1+ , SrcSpan "tests/examples/FamilyVarid.hs" 5 1 5 1+ , SrcSpan "tests/examples/FamilyVarid.hs" 5 1 5 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 2 1 2 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyVarid.hs" 2 1 2 7+ , SrcSpan "tests/examples/FamilyVarid.hs" 2 20 2 25+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 2 8 2 19+ , srcInfoPoints = []+ }+ "FamilyVarid")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 1 1 1 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyVarid.hs" 1 1 1 13+ , SrcSpan "tests/examples/FamilyVarid.hs" 1 27 1 30+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 1 14 1 26+ , srcInfoPoints = []+ }+ "TypeFamilies"+ ]+ ]+ []+ [ FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 1 4 28+ , srcInfoPoints = []+ }+ [ Match+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 1 4 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 1 4 2+ , srcInfoPoints = []+ }+ "f")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 3 4 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 3 4 9+ , srcInfoPoints = []+ }+ "family")+ , PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 10 4 16+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 10 4 16+ , srcInfoPoints = []+ }+ "forall")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 17 4 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FamilyVarid.hs" 4 17 4 18 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 19 4 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 19 4 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FamilyVarid.hs" 4 19 4 28+ , srcInfoPoints = []+ }+ "undefined"))))+ Nothing+ ]+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,3 @@+{-# LANGUAGE TypeFamilies #-}+module FamilyVarid where+f family forall = undefined
@@ -0,0 +1,3 @@+foo = pure 1 <^> pure 2 <^> pure (+) where+ (<^>) = flip (<*>)+ infixr 4 <^>
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,297 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 1 4 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity2.hs" 1 1 1 1+ , SrcSpan "tests/examples/Fixity2.hs" 1 1 1 1+ , SrcSpan "tests/examples/Fixity2.hs" 1 1 1 1+ , SrcSpan "tests/examples/Fixity2.hs" 4 1 4 1+ , SrcSpan "tests/examples/Fixity2.hs" 4 1 4 1+ ]+ }+ Nothing+ []+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 1 3 15+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity2.hs" 1 38 1 43 ]+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 1 1 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 1 1 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 5 1 37+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity2.hs" 1 5 1 6 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 7 1 37+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 7 1 13+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 7 1 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 7 1 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 7 1 11+ , srcInfoPoints = []+ }+ "pure")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 12 1 13+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 12 1 13+ , srcInfoPoints = []+ }+ 1+ "1")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 14 1 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 14 1 17+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 14 1 17+ , srcInfoPoints = []+ }+ "<^>")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 18 1 37+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 18 1 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 18 1 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 18 1 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 18 1 22+ , srcInfoPoints = []+ }+ "pure")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 23 1 24+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 23 1 24+ , srcInfoPoints = []+ }+ 2+ "2")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 25 1 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 25 1 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 25 1 28+ , srcInfoPoints = []+ }+ "<^>")))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 29 1 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 29 1 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 29 1 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 29 1 33+ , srcInfoPoints = []+ }+ "pure")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 34 1 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity2.hs" 1 34 1 35+ , SrcSpan "tests/examples/Fixity2.hs" 1 35 1 36+ , SrcSpan "tests/examples/Fixity2.hs" 1 36 1 37+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 34 1 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity2.hs" 1 34 1 35+ , SrcSpan "tests/examples/Fixity2.hs" 1 35 1 36+ , SrcSpan "tests/examples/Fixity2.hs" 1 36 1 37+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 1 35 1 36+ , srcInfoPoints = []+ }+ "+")))))))+ (Just+ (BDecls+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 3 3 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity2.hs" 2 3 2 3+ , SrcSpan "tests/examples/Fixity2.hs" 3 3 3 3+ , SrcSpan "tests/examples/Fixity2.hs" 4 1 4 0+ ]+ }+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 3 2 21+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 3 2 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity2.hs" 2 3 2 4+ , SrcSpan "tests/examples/Fixity2.hs" 2 4 2 7+ , SrcSpan "tests/examples/Fixity2.hs" 2 7 2 8+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 4 2 7+ , srcInfoPoints = []+ }+ "<^>"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 9 2 21+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity2.hs" 2 9 2 10 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 11 2 21+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 11 2 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 11 2 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 11 2 15+ , srcInfoPoints = []+ }+ "flip")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 16 2 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity2.hs" 2 16 2 17+ , SrcSpan "tests/examples/Fixity2.hs" 2 17 2 20+ , SrcSpan "tests/examples/Fixity2.hs" 2 20 2 21+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 16 2 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity2.hs" 2 16 2 17+ , SrcSpan "tests/examples/Fixity2.hs" 2 17 2 20+ , SrcSpan "tests/examples/Fixity2.hs" 2 20 2 21+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 2 17 2 20+ , srcInfoPoints = []+ }+ "<*>")))))+ Nothing+ , InfixDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 3 3 3 15+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity2.hs" 3 10 3 11 ]+ }+ (AssocRight+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 3 3 3 9+ , srcInfoPoints = []+ })+ (Just 4)+ [ VarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 3 12 3 15+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity2.hs" 3 12 3 15+ , srcInfoPoints = []+ }+ "<^>")+ ]+ ]))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+foo = pure 1 <^> pure 2 <^> pure (+)+ where (<^>) = flip (<*>)+ + infixr 4 <^>
@@ -0,0 +1,5 @@+class Foo f where+ (<^>) :: Applicative f => f a -> f (a -> b) -> f b+ infixr 4 <^>++foo = pure 1 <^> pure 2 <^> pure (+)
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,466 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 1 1 1 1+ , SrcSpan "tests/examples/Fixity3.hs" 1 1 1 1+ , SrcSpan "tests/examples/Fixity3.hs" 1 1 1 1+ , SrcSpan "tests/examples/Fixity3.hs" 5 1 5 1+ , SrcSpan "tests/examples/Fixity3.hs" 6 1 6 1+ , SrcSpan "tests/examples/Fixity3.hs" 6 1 6 1+ ]+ }+ Nothing+ []+ []+ [ ClassDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 1 1 3 15+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 1 1 1 6+ , SrcSpan "tests/examples/Fixity3.hs" 1 13 1 18+ , SrcSpan "tests/examples/Fixity3.hs" 2 3 2 3+ , SrcSpan "tests/examples/Fixity3.hs" 3 3 3 3+ , SrcSpan "tests/examples/Fixity3.hs" 5 1 5 0+ ]+ }+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 1 7 1 12+ , srcInfoPoints = []+ }+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 1 7 1 10+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 1 7 1 10+ , srcInfoPoints = []+ }+ "Foo"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 1 11 1 12+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 1 11 1 12+ , srcInfoPoints = []+ }+ "f")))+ []+ (Just+ [ ClsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 3 2 53+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 2 9 2 11 ]+ }+ (TypeSig+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 3 2 53+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 2 9 2 11 ]+ }+ [ Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 3 2 8+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 2 3 2 4+ , SrcSpan "tests/examples/Fixity3.hs" 2 4 2 7+ , SrcSpan "tests/examples/Fixity3.hs" 2 7 2 8+ ]+ }+ "<^>"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 12 2 53+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 12 2 28+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 2 26 2 28 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 12 2 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 2 26 2 28 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 12 2 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 2 26 2 28 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 12 2 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 2 26 2 28 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 12 2 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 12 2 23+ , srcInfoPoints = []+ }+ "Applicative")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 24 2 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 24 2 25+ , srcInfoPoints = []+ }+ "f"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 29 2 53+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 2 33 2 35 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 29 2 32+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 29 2 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 29 2 30+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 31 2 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 31 2 32+ , srcInfoPoints = []+ }+ "a")))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 36 2 53+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 2 47 2 49 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 36 2 46+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 36 2 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 36 2 37+ , srcInfoPoints = []+ }+ "f"))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 38 2 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 2 38 2 39+ , SrcSpan "tests/examples/Fixity3.hs" 2 45 2 46+ ]+ }+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 39 2 45+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 2 41 2 43 ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 39 2 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 39 2 40+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 44 2 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 44 2 45+ , srcInfoPoints = []+ }+ "b")))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 50 2 53+ , srcInfoPoints = []+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 50 2 51+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 50 2 51+ , srcInfoPoints = []+ }+ "f"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 2 52 2 53+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/Fixity3.hs" 2 52 2 53+ , srcInfoPoints = []+ }+ "b")))))))+ , ClsDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 3 3 3 15+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 3 10 3 11 ]+ }+ (InfixDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 3 3 3 15+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 3 10 3 11 ]+ }+ (AssocRight+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 3 3 3 9+ , srcInfoPoints = []+ })+ (Just 4)+ [ VarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 3 12 3 15+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 3 12 3 15+ , srcInfoPoints = []+ }+ "<^>")+ ])+ ])+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 1 5 37+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 1 5 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 1 5 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 5 5 37+ , srcInfoPoints = [ SrcSpan "tests/examples/Fixity3.hs" 5 5 5 6 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 7 5 37+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 7 5 13+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 7 5 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 7 5 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 7 5 11+ , srcInfoPoints = []+ }+ "pure")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 12 5 13+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 12 5 13+ , srcInfoPoints = []+ }+ 1+ "1")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 14 5 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 14 5 17+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 14 5 17+ , srcInfoPoints = []+ }+ "<^>")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 18 5 37+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 18 5 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 18 5 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 18 5 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 18 5 22+ , srcInfoPoints = []+ }+ "pure")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 23 5 24+ , srcInfoPoints = []+ }+ (Int+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 23 5 24+ , srcInfoPoints = []+ }+ 2+ "2")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 25 5 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 25 5 28+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 25 5 28+ , srcInfoPoints = []+ }+ "<^>")))+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 29 5 37+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 29 5 33+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 29 5 33+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 29 5 33+ , srcInfoPoints = []+ }+ "pure")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 34 5 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 5 34 5 35+ , SrcSpan "tests/examples/Fixity3.hs" 5 35 5 36+ , SrcSpan "tests/examples/Fixity3.hs" 5 36 5 37+ ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 34 5 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/Fixity3.hs" 5 34 5 35+ , SrcSpan "tests/examples/Fixity3.hs" 5 35 5 36+ , SrcSpan "tests/examples/Fixity3.hs" 5 36 5 37+ ]+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/Fixity3.hs" 5 35 5 36+ , srcInfoPoints = []+ }+ "+")))))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+class Foo f where+ (<^>) :: Applicative f => f a -> f (a -> b) -> f b+ + infixr 4 <^>+foo = pure 1 <^> pure 2 <^> pure (+)
@@ -0,0 +1,3 @@+main = forM_ cmdReports $ \x -> do+ putStrLn $ "Writing report to " ++ x ++ " ..."+ writeReport x ideas
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,343 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 1 4 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FixityTests.hs" 1 1 1 1+ , SrcSpan "tests/examples/FixityTests.hs" 1 1 1 1+ , SrcSpan "tests/examples/FixityTests.hs" 1 1 1 1+ , SrcSpan "tests/examples/FixityTests.hs" 4 1 4 1+ , SrcSpan "tests/examples/FixityTests.hs" 4 1 4 1+ ]+ }+ Nothing+ []+ []+ [ PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 1 3 35+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 1 1 5+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 1 1 5+ , srcInfoPoints = []+ }+ "main"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 6 3 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FixityTests.hs" 1 6 1 7 ]+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 8 3 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 8 1 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 8 1 13+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 8 1 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 8 1 13+ , srcInfoPoints = []+ }+ "forM_")))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 14 1 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 14 1 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 14 1 24+ , srcInfoPoints = []+ }+ "cmdReports"))))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 25 1 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 25 1 26+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 25 1 26+ , srcInfoPoints = []+ }+ "$")))+ (Lambda+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 27 3 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FixityTests.hs" 1 27 1 28+ , SrcSpan "tests/examples/FixityTests.hs" 1 30 1 32+ ]+ }+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 28 1 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 28 1 29+ , srcInfoPoints = []+ }+ "x")+ ]+ (Do+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 1 33 3 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FixityTests.hs" 1 33 1 35+ , SrcSpan "tests/examples/FixityTests.hs" 2 16 2 16+ , SrcSpan "tests/examples/FixityTests.hs" 3 16 3 16+ , SrcSpan "tests/examples/FixityTests.hs" 4 1 4 0+ ]+ }+ [ Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 2 16 2 62+ , srcInfoPoints = []+ }+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 2 16 2 62+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 2 16 2 24+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 16 2 24+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 16 2 24+ , srcInfoPoints = []+ }+ "putStrLn")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 2 25 2 26+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 25 2 26+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 25 2 26+ , srcInfoPoints = []+ }+ "$")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 2 27 2 62+ , srcInfoPoints = []+ }+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 27 2 47+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 27 2 47+ , srcInfoPoints = []+ }+ "Writing report to "+ "Writing report to "))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 48 2 50+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 48 2 50+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 48 2 50+ , srcInfoPoints = []+ }+ "++")))+ (InfixApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 51 2 62+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 51 2 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 51 2 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 51 2 52+ , srcInfoPoints = []+ }+ "x")))+ (QVarOp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 53 2 55+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 53 2 55+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 53 2 55+ , srcInfoPoints = []+ }+ "++")))+ (Lit+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 56 2 62+ , srcInfoPoints = []+ }+ (String+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 2 56 2 62+ , srcInfoPoints = []+ }+ " ..."+ " ...")))))+ , Qualifier+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 3 16 3 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 3 16 3 35+ , srcInfoPoints = []+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 3 16 3 29+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 16 3 27+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 16 3 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 16 3 27+ , srcInfoPoints = []+ }+ "writeReport")))+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 28 3 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 28 3 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 28 3 29+ , srcInfoPoints = []+ }+ "x"))))+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/FixityTests.hs" 3 30 3 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 30 3 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FixityTests.hs" 3 30 3 35+ , srcInfoPoints = []+ }+ "ideas"))))+ ]))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,5 @@+main+ = forM_ cmdReports $+ \ x ->+ do putStrLn $ "Writing report to " ++ x ++ " ..."+ writeReport x ideas
@@ -0,0 +1,3 @@+{-# LANGUAGE FlexibleContexts #-}+f :: Log.Stack => a -> a+f = id
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,187 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 1 1 4 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 1 1 1 1+ , SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 1 2 1+ , SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 1 2 1+ , SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 1 2 1+ , SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 1 3 1+ , SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 4 1 4 1+ , SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 4 1 4 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 1 1 1 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 1 1 1 13+ , SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 1 31 1 34+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 1 14 1 30+ , srcInfoPoints = []+ }+ "FlexibleContexts"+ ]+ ]+ []+ [ TypeSig+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 1 2 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 3 2 5 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 1 2 2+ , srcInfoPoints = []+ }+ "f"+ ]+ (TyForall+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 6 2 25+ , srcInfoPoints = []+ }+ Nothing+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 6 2 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 16 2 18+ ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 6 2 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 16 2 18+ ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 6 2 18+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 16 2 18+ ]+ }+ (Qual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 6 2 15+ , srcInfoPoints = []+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/FlexibleContextsWithoutVars.hs" 2 6 2 15+ , srcInfoPoints = []+ }+ "Log")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan+ "tests/examples/FlexibleContextsWithoutVars.hs" 2 6 2 15+ , srcInfoPoints = []+ }+ "Stack"))))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 19 2 25+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 21 2 23+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 19 2 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 19 2 20+ , srcInfoPoints = []+ }+ "a"))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 24 2 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 2 24 2 25+ , srcInfoPoints = []+ }+ "a"))))+ , PatBind+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 1 3 7+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 1 3 2+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 1 3 2+ , srcInfoPoints = []+ }+ "f"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 3 3 7+ , srcInfoPoints =+ [ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 3 3 4 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 5 3 7+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 5 3 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/FlexibleContextsWithoutVars.hs" 3 5 3 7+ , srcInfoPoints = []+ }+ "id"))))+ Nothing+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE FlexibleContexts #-}++f :: Log.Stack => a -> a+f = id
@@ -0,0 +1,4 @@+{-# LANGUAGE ScopedTypeVariables #-}+module ForallInInstance where++instance forall a. MyClass a => MyClass [a] where
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,195 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 1 1 1 1+ , SrcSpan "tests/examples/ForallInInstance.hs" 2 1 2 1+ , SrcSpan "tests/examples/ForallInInstance.hs" 2 1 2 1+ , SrcSpan "tests/examples/ForallInInstance.hs" 4 1 4 1+ , SrcSpan "tests/examples/ForallInInstance.hs" 5 1 5 1+ , SrcSpan "tests/examples/ForallInInstance.hs" 5 1 5 1+ ]+ }+ (Just+ (ModuleHead+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 2 1 2 30+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 2 1 2 7+ , SrcSpan "tests/examples/ForallInInstance.hs" 2 25 2 30+ ]+ }+ (ModuleName+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 2 8 2 24+ , srcInfoPoints = []+ }+ "ForallInInstance")+ Nothing+ Nothing))+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 1 1 1 37+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 1 1 1 13+ , SrcSpan "tests/examples/ForallInInstance.hs" 1 34 1 37+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 1 14 1 33+ , srcInfoPoints = []+ }+ "ScopedTypeVariables"+ ]+ ]+ []+ [ InstDecl+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 1 5 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 4 1 4 9+ , SrcSpan "tests/examples/ForallInInstance.hs" 4 45 4 50+ , SrcSpan "tests/examples/ForallInInstance.hs" 5 1 5 1+ , SrcSpan "tests/examples/ForallInInstance.hs" 5 1 5 1+ , SrcSpan "tests/examples/ForallInInstance.hs" 5 0 5 0+ ]+ }+ Nothing+ (IRule+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 10 4 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 4 10 4 16+ , SrcSpan "tests/examples/ForallInInstance.hs" 4 18 4 19+ ]+ }+ (Just+ [ UnkindedVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 17 4 18+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 17 4 18+ , srcInfoPoints = []+ }+ "a")+ ])+ (Just+ (CxSingle+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 20 4 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 4 30 4 32 ]+ }+ (TypeA+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 20 4 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 4 30 4 32 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 20 4 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 4 30 4 32 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 20 4 32+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 4 30 4 32 ]+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 20 4 27+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 20 4 27+ , srcInfoPoints = []+ }+ "MyClass")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ "a"))))))+ (IHApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 33 4 44+ , srcInfoPoints = []+ }+ (IHCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 33 4 40+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 33 4 40+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 33 4 40+ , srcInfoPoints = []+ }+ "MyClass")))+ (TyList+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 41 4 44+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForallInInstance.hs" 4 41 4 42+ , SrcSpan "tests/examples/ForallInInstance.hs" 4 43 4 44+ ]+ }+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 42 4 43+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForallInInstance.hs" 4 42 4 43+ , srcInfoPoints = []+ }+ "a")))))+ (Just [])+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE ScopedTypeVariables #-}+module ForallInInstance where++instance forall a . MyClass a => MyClass [a] where
@@ -0,0 +1,4 @@+{- If compiled without ForeignFunctionInterface (part of Haskell2010),+ it complains not about FFI but about missing TemplateHaskell -}+foreign import ccall unsafe "getProgArgv"+ getProgArgv :: Ptr CInt -> Ptr (Ptr CString) -> IO ()
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,212 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 3 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 3 1 3 1+ , SrcSpan "tests/examples/ForeignImport.hs" 3 1 3 1+ , SrcSpan "tests/examples/ForeignImport.hs" 3 1 3 1+ , SrcSpan "tests/examples/ForeignImport.hs" 5 1 5 1+ , SrcSpan "tests/examples/ForeignImport.hs" 5 1 5 1+ ]+ }+ Nothing+ []+ []+ [ ForImp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 3 1 4 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 3 1 3 8+ , SrcSpan "tests/examples/ForeignImport.hs" 3 9 3 15+ , SrcSpan "tests/examples/ForeignImport.hs" 3 29 3 42+ , SrcSpan "tests/examples/ForeignImport.hs" 4 14 4 16+ ]+ }+ (CCall+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 3 16 3 21+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 3 22 3 28+ , srcInfoPoints = []+ }))+ (Just "getProgArgv")+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 2 4 13+ , srcInfoPoints = []+ }+ "getProgArgv")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 17 4 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 4 26 4 28 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 17 4 25+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 17 4 20+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 17 4 20+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 17 4 20+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 21 4 25+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 21 4 25+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 21 4 25+ , srcInfoPoints = []+ }+ "CInt"))))+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 29 4 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 4 47 4 49 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 29 4 46+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 29 4 32+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 29 4 32+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 29 4 32+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 33 4 46+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 4 33 4 34+ , SrcSpan "tests/examples/ForeignImport.hs" 4 45 4 46+ ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 34 4 45+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 34 4 37+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 34 4 37+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImport.hs" 4 34 4 37+ , srcInfoPoints = []+ }+ "Ptr")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 38 4 45+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 38 4 45+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImport.hs" 4 38 4 45+ , srcInfoPoints = []+ }+ "CString"))))))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 50 4 55+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 50 4 52+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 50 4 52+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 50 4 52+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 53 4 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 4 53 4 54+ , SrcSpan "tests/examples/ForeignImport.hs" 4 54 4 55+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 53 4 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 4 53 4 54+ , SrcSpan "tests/examples/ForeignImport.hs" 4 54 4 55+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/ForeignImport.hs" 4 53 4 55+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImport.hs" 4 53 4 54+ , SrcSpan "tests/examples/ForeignImport.hs" 4 54 4 55+ ]+ }))))))+ ]+ , [ Comment+ True+ (SrcSpan "tests/examples/ForeignImport.hs" 1 1 2 67)+ " If compiled without ForeignFunctionInterface (part of Haskell2010),\n it complains not about FFI but about missing TemplateHaskell "+ ]+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,2 @@+foreign import ccall unsafe "getProgArgv" getProgArgv ::+ Ptr CInt -> Ptr (Ptr CString) -> IO ()
@@ -0,0 +1,4 @@+{-# LANGUAGE JavascriptFFI #-}++foreign import javascript unsafe "somethingUseful_ = $1"+ js_set_somethingUseful :: JSFun a -> IO ()
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,166 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImportJavascript.hs" 1 1 1 1+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 1 3 1+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 1 3 1+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 1 3 1+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 5 1 5 1+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 5 1 5 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 1 1 1 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImportJavascript.hs" 1 1 1 13+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 1 28 1 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 1 14 1 27+ , srcInfoPoints = []+ }+ "JavascriptFFI"+ ]+ ]+ []+ [ ForImp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 1 4 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 1 3 8+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 9 3 15+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 34 3 57+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 28 4 30+ ]+ }+ (JavaScript+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 16 3 26+ , srcInfoPoints = []+ })+ (Just+ (PlayRisky+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 3 27 3 33+ , srcInfoPoints = []+ }))+ (Just "somethingUseful_ = $1")+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 5 4 27+ , srcInfoPoints = []+ }+ "js_set_somethingUseful")+ (TyFun+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 31 4 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 39 4 41 ]+ }+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 31 4 38+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 31 4 36+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 31 4 36+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 31 4 36+ , srcInfoPoints = []+ }+ "JSFun")))+ (TyVar+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 37 4 38+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 37 4 38+ , srcInfoPoints = []+ }+ "a")))+ (TyApp+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 42 4 47+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 42 4 44+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 42 4 44+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 42 4 44+ , srcInfoPoints = []+ }+ "IO")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 45 4 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 45 4 46+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 46 4 47+ ]+ }+ (Special+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 45 4 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 45 4 46+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 46 4 47+ ]+ }+ (UnitCon+ SrcSpanInfo+ { srcInfoSpan =+ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 45 4 47+ , srcInfoPoints =+ [ SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 45 4 46+ , SrcSpan "tests/examples/ForeignImportJavascript.hs" 4 46 4 47+ ]+ })))))+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE JavascriptFFI #-}++foreign import javascript unsafe "somethingUseful_ = $1"+ js_set_somethingUseful :: JSFun a -> IO ()
@@ -0,0 +1,4 @@+{-# LANGUAGE GADTs #-}++data T where+ T :: { field :: Int } -> T
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,128 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord.hs" 1 1 1 1+ , SrcSpan "tests/examples/GADTRecord.hs" 3 1 3 1+ , SrcSpan "tests/examples/GADTRecord.hs" 3 1 3 1+ , SrcSpan "tests/examples/GADTRecord.hs" 3 1 3 1+ , SrcSpan "tests/examples/GADTRecord.hs" 5 1 5 1+ , SrcSpan "tests/examples/GADTRecord.hs" 5 1 5 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 1 1 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord.hs" 1 1 1 13+ , SrcSpan "tests/examples/GADTRecord.hs" 1 20 1 23+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 1 14 1 19+ , srcInfoPoints = []+ }+ "GADTs"+ ]+ ]+ []+ [ GDataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 3 1 5 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord.hs" 3 8 3 13+ , SrcSpan "tests/examples/GADTRecord.hs" 4 3 4 3+ , SrcSpan "tests/examples/GADTRecord.hs" 5 1 5 0+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 3 1 3 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 3 6 3 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 3 6 3 7+ , srcInfoPoints = []+ }+ "T"))+ Nothing+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 3 4 29+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord.hs" 4 5 4 7+ , SrcSpan "tests/examples/GADTRecord.hs" 4 8 4 9+ , SrcSpan "tests/examples/GADTRecord.hs" 4 23 4 24+ , SrcSpan "tests/examples/GADTRecord.hs" 4 25 4 27+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 3 4 4+ , srcInfoPoints = []+ }+ "T")+ Nothing+ Nothing+ (Just+ [ FieldDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 10 4 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord.hs" 4 16 4 18 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 10 4 15+ , srcInfoPoints = []+ }+ "field"+ ]+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ "Int")))+ ])+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord.hs" 4 28 4 29+ , srcInfoPoints = []+ }+ "T")))+ ]+ []+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE GADTs #-}++data T where+ T :: {field :: Int} -> T
@@ -0,0 +1,4 @@+{-# LANGUAGE GADTs #-}++data T where+ T :: () => { field :: Int } -> T
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,137 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 1 1 5 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord2.hs" 1 1 1 1+ , SrcSpan "tests/examples/GADTRecord2.hs" 3 1 3 1+ , SrcSpan "tests/examples/GADTRecord2.hs" 3 1 3 1+ , SrcSpan "tests/examples/GADTRecord2.hs" 3 1 3 1+ , SrcSpan "tests/examples/GADTRecord2.hs" 5 1 5 1+ , SrcSpan "tests/examples/GADTRecord2.hs" 5 1 5 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 1 1 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord2.hs" 1 1 1 13+ , SrcSpan "tests/examples/GADTRecord2.hs" 1 20 1 23+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 1 14 1 19+ , srcInfoPoints = []+ }+ "GADTs"+ ]+ ]+ []+ [ GDataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 3 1 5 0+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord2.hs" 3 8 3 13+ , SrcSpan "tests/examples/GADTRecord2.hs" 4 3 4 3+ , SrcSpan "tests/examples/GADTRecord2.hs" 5 1 5 0+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 3 1 3 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 3 6 3 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 3 6 3 7+ , srcInfoPoints = []+ }+ "T"))+ Nothing+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 3 4 35+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord2.hs" 4 5 4 7+ , SrcSpan "tests/examples/GADTRecord2.hs" 4 14 4 15+ , SrcSpan "tests/examples/GADTRecord2.hs" 4 29 4 30+ , SrcSpan "tests/examples/GADTRecord2.hs" 4 31 4 33+ ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 3 4 4+ , srcInfoPoints = []+ }+ "T")+ Nothing+ (Just+ (CxEmpty+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 8 4 13+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord2.hs" 4 8 4 9+ , SrcSpan "tests/examples/GADTRecord2.hs" 4 9 4 10+ , SrcSpan "tests/examples/GADTRecord2.hs" 4 11 4 13+ ]+ }))+ (Just+ [ FieldDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 16 4 28+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GADTRecord2.hs" 4 22 4 24 ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 16 4 21+ , srcInfoPoints = []+ }+ "field"+ ]+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 25 4 28+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 25 4 28+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 25 4 28+ , srcInfoPoints = []+ }+ "Int")))+ ])+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 34 4 35+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 34 4 35+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GADTRecord2.hs" 4 34 4 35+ , srcInfoPoints = []+ }+ "T")))+ ]+ []+ ]+ , []+ )
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,4 @@+{-# LANGUAGE GADTs #-}++data T where+ T :: () => {field :: Int} -> T
@@ -0,0 +1,5 @@+{-# LANGUAGE GADTs #-}++data Foo where+ Foo :: Int -> Foo+ deriving (Eq,Ord,Typeable)
@@ -0,0 +1,1 @@+Match
@@ -0,0 +1,199 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 1 1 6 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GadtDeriving.hs" 1 1 1 1+ , SrcSpan "tests/examples/GadtDeriving.hs" 3 1 3 1+ , SrcSpan "tests/examples/GadtDeriving.hs" 3 1 3 1+ , SrcSpan "tests/examples/GadtDeriving.hs" 3 1 3 1+ , SrcSpan "tests/examples/GadtDeriving.hs" 6 1 6 1+ , SrcSpan "tests/examples/GadtDeriving.hs" 6 1 6 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 1 1 1 23+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GadtDeriving.hs" 1 1 1 13+ , SrcSpan "tests/examples/GadtDeriving.hs" 1 20 1 23+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 1 14 1 19+ , srcInfoPoints = []+ }+ "GADTs"+ ]+ ]+ []+ [ GDataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 3 1 5 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GadtDeriving.hs" 3 10 3 15+ , SrcSpan "tests/examples/GadtDeriving.hs" 4 5 4 5+ , SrcSpan "tests/examples/GadtDeriving.hs" 5 5 5 5+ , SrcSpan "tests/examples/GadtDeriving.hs" 5 5 5 5+ ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 3 1 3 5+ , srcInfoPoints = []+ })+ Nothing+ (DHead+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 3 6 3 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 3 6 3 9+ , srcInfoPoints = []+ }+ "Foo"))+ Nothing+ [ GadtDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 5 4 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GadtDeriving.hs" 4 9 4 11 ]+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 5 4 8+ , srcInfoPoints = []+ }+ "Foo")+ Nothing+ Nothing+ Nothing+ (TyFun+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 12 4 22+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GadtDeriving.hs" 4 16 4 18 ]+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 12 4 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 12 4 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 12 4 15+ , srcInfoPoints = []+ }+ "Int")))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 4 19 4 22+ , srcInfoPoints = []+ }+ "Foo"))))+ ]+ [ Deriving+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 5 5 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/GadtDeriving.hs" 5 5 5 13+ , SrcSpan "tests/examples/GadtDeriving.hs" 5 14 5 15+ , SrcSpan "tests/examples/GadtDeriving.hs" 5 17 5 18+ , SrcSpan "tests/examples/GadtDeriving.hs" 5 21 5 22+ , SrcSpan "tests/examples/GadtDeriving.hs" 5 30 5 31+ ]+ }+ Nothing+ [ IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 15 5 17+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 15 5 17+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 15 5 17+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 15 5 17+ , srcInfoPoints = []+ }+ "Eq")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 18 5 21+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 18 5 21+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 18 5 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 18 5 21+ , srcInfoPoints = []+ }+ "Ord")))+ , IRule+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 22 5 30+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (IHCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 22 5 30+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 22 5 30+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/GadtDeriving.hs" 5 22 5 30+ , srcInfoPoints = []+ }+ "Typeable")))+ ]+ ]+ ]+ , []+ )
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff
file too large to diff