summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Zimmerman <alan.zimm@gmail.com>2021-10-11 23:05:08 +0100
committerAlan Zimmerman <alan.zimm@gmail.com>2021-10-12 22:18:51 +0100
commitedf3988bde3c932813a7abbf0662ece76d88d175 (patch)
tree261b921e009293faf2d73906a6aabec5fe5a2554
parent64b29004a2113df779efaa1dfa3af2f73ac9da43 (diff)
downloadhaskell-wip/az/ghc-9.2-n-plus-k.tar.gz
EPA: Preserve semicolon order in annotationswip/az/ghc-9.2-n-plus-k
Ensure the AddSemiAnn items appear in increasing order, so that if they are converted to delta format they are still in the correct order. Prior to this the exact printer sorted by Span, which is meaningless for EpaDelta locations. (cherry picked from commit fcf8d3f5edab65e3b310bd7213ff7c4766ce00a7)
-rw-r--r--compiler/GHC/Parser.y40
-rw-r--r--compiler/GHC/Parser/Annotation.hs7
-rw-r--r--compiler/GHC/Parser/PostProcess.hs8
-rw-r--r--testsuite/tests/parser/should_compile/DumpSemis.hs35
-rw-r--r--testsuite/tests/parser/should_compile/DumpSemis.stderr1688
-rw-r--r--testsuite/tests/parser/should_compile/T20452.stderr8
-rw-r--r--testsuite/tests/parser/should_compile/all.T2
-rw-r--r--utils/check-exact/Main.hs6
8 files changed, 1763 insertions, 31 deletions
diff --git a/compiler/GHC/Parser.y b/compiler/GHC/Parser.y
index a696c6aea2..b8a8e311ab 100644
--- a/compiler/GHC/Parser.y
+++ b/compiler/GHC/Parser.y
@@ -931,7 +931,7 @@ body2 :: { (AnnList
top :: { ([TrailingAnn]
,([LImportDecl GhcPs], [LHsDecl GhcPs])) }
- : semis top1 { ($1, $2) }
+ : semis top1 { (reverse $1, $2) }
top1 :: { ([LImportDecl GhcPs], [LHsDecl GhcPs]) }
: importdecls_semi topdecls_cs_semi { (reverse $1, cvTopDecls $2) }
@@ -1080,7 +1080,7 @@ importdecls
importdecls_semi :: { [LImportDecl GhcPs] }
importdecls_semi
: importdecls_semi importdecl semis1
- {% do { i <- amsA $2 $3
+ {% do { i <- amsA $2 (reverse $3)
; return (i : $1)} }
| {- empty -} { [] }
@@ -1181,7 +1181,7 @@ topdecls :: { OrdList (LHsDecl GhcPs) }
-- May have trailing semicolons, can be empty
topdecls_semi :: { OrdList (LHsDecl GhcPs) }
- : topdecls_semi topdecl semis1 {% do { t <- amsA $2 $3
+ : topdecls_semi topdecl semis1 {% do { t <- amsA $2 (reverse $3)
; return ($1 `snocOL` t) }}
| {- empty -} { nilOL }
@@ -1194,7 +1194,7 @@ topdecls_cs :: { OrdList (LHsDecl GhcPs) }
-- May have trailing semicolons, can be empty
topdecls_cs_semi :: { OrdList (LHsDecl GhcPs) }
- : topdecls_cs_semi topdecl_cs semis1 {% do { t <- amsA $2 $3
+ : topdecls_cs_semi topdecl_cs semis1 {% do { t <- amsA $2 (reverse $3)
; return ($1 `snocOL` t) }}
| {- empty -} { nilOL }
@@ -1674,7 +1674,7 @@ decl_cls : at_decl_cls { $1 }
decls_cls :: { Located ([AddEpAnn],OrdList (LHsDecl GhcPs)) } -- Reversed
: decls_cls ';' decl_cls {% if isNilOL (snd $ unLoc $1)
- then return (sLLlA $1 $> ((mz AnnSemi $2) ++ (fst $ unLoc $1)
+ then return (sLLlA $1 $> ((fst $ unLoc $1) ++ (mz AnnSemi $2)
, unitOL $3))
else case (snd $ unLoc $1) of
SnocOL hs t -> do
@@ -1682,7 +1682,7 @@ decls_cls :: { Located ([AddEpAnn],OrdList (LHsDecl GhcPs)) } -- Reversed
return (sLLlA $1 $> (fst $ unLoc $1
, snocOL hs t' `appOL` unitOL $3)) }
| decls_cls ';' {% if isNilOL (snd $ unLoc $1)
- then return (sLL $1 $> ((mz AnnSemi $2) ++ (fst $ unLoc $1)
+ then return (sLL $1 $> ( (fst $ unLoc $1) ++ (mz AnnSemi $2)
,snd $ unLoc $1))
else case (snd $ unLoc $1) of
SnocOL hs t -> do
@@ -1720,7 +1720,7 @@ decl_inst : at_decl_inst { sL1A $1 (unitOL (sL1 $1 (InstD noExtFi
decls_inst :: { Located ([AddEpAnn],OrdList (LHsDecl GhcPs)) } -- Reversed
: decls_inst ';' decl_inst {% if isNilOL (snd $ unLoc $1)
- then return (sLL $1 $> ((mz AnnSemi $2) ++ (fst $ unLoc $1)
+ then return (sLL $1 $> ((fst $ unLoc $1) ++ (mz AnnSemi $2)
, unLoc $3))
else case (snd $ unLoc $1) of
SnocOL hs t -> do
@@ -1728,7 +1728,7 @@ decls_inst :: { Located ([AddEpAnn],OrdList (LHsDecl GhcPs)) } -- Reversed
return (sLL $1 $> (fst $ unLoc $1
, snocOL hs t' `appOL` unLoc $3)) }
| decls_inst ';' {% if isNilOL (snd $ unLoc $1)
- then return (sLL $1 $> ((mz AnnSemi $2) ++ (fst $ unLoc $1)
+ then return (sLL $1 $> ((fst $ unLoc $1) ++ (mz AnnSemi $2)
,snd $ unLoc $1))
else case (snd $ unLoc $1) of
SnocOL hs t -> do
@@ -1758,7 +1758,7 @@ where_inst :: { Located ([AddEpAnn]
--
decls :: { Located ([TrailingAnn], OrdList (LHsDecl GhcPs)) }
: decls ';' decl {% if isNilOL (snd $ unLoc $1)
- then return (sLLlA $1 $> ((msemi $2) ++ (fst $ unLoc $1)
+ then return (sLLlA $1 $> ((fst $ unLoc $1) ++ (msemi $2)
, unitOL $3))
else case (snd $ unLoc $1) of
SnocOL hs t -> do
@@ -1769,7 +1769,7 @@ decls :: { Located ([TrailingAnn], OrdList (LHsDecl GhcPs)) }
return (rest `seq` this `seq` these `seq`
(sLLlA $1 $> (fst $ unLoc $1, these))) }
| decls ';' {% if isNilOL (snd $ unLoc $1)
- then return (sLL $1 $> (((msemi $2) ++ (fst $ unLoc $1)
+ then return (sLL $1 $> (((fst $ unLoc $1) ++ (msemi $2)
,snd $ unLoc $1)))
else case (snd $ unLoc $1) of
SnocOL hs t -> do
@@ -3206,21 +3206,21 @@ alts :: { forall b. DisambECP b => PV (Located ([AddEpAnn],[LMatch GhcPs (Loc
: alts1 { $1 >>= \ $1 -> return $
sL1 $1 (fst $ unLoc $1,snd $ unLoc $1) }
| ';' alts { $2 >>= \ $2 -> return $
- sLL $1 $> (((mz AnnSemi $1) ++ (fst $ unLoc $2))
+ sLL $1 $> (((fst $ unLoc $2) ++ (mz AnnSemi $1))
,snd $ unLoc $2) }
alts1 :: { forall b. DisambECP b => PV (Located ([AddEpAnn],[LMatch GhcPs (LocatedA b)])) }
: alts1 ';' alt { $1 >>= \ $1 ->
$3 >>= \ $3 ->
case snd $ unLoc $1 of
- [] -> return (sLL $1 (reLoc $>) ((mz AnnSemi $2) ++(fst $ unLoc $1)
+ [] -> return (sLL $1 (reLoc $>) ((fst $ unLoc $1) ++ (mz AnnSemi $2)
,[$3]))
(h:t) -> do
h' <- addTrailingSemiA h (gl $2)
return (sLL $1 (reLoc $>) (fst $ unLoc $1,$3 : h' : t)) }
| alts1 ';' { $1 >>= \ $1 ->
case snd $ unLoc $1 of
- [] -> return (sLL $1 $> ((mz AnnSemi $2) ++(fst $ unLoc $1)
+ [] -> return (sLL $1 $> ((fst $ unLoc $1) ++ (mz AnnSemi $2)
,[]))
(h:t) -> do
h' <- addTrailingSemiA h (gl $2)
@@ -3289,9 +3289,9 @@ apats :: { [LPat GhcPs] }
stmtlist :: { forall b. DisambECP b => PV (LocatedL [LocatedA (Stmt GhcPs (LocatedA b))]) }
: '{' stmts '}' { $2 >>= \ $2 -> amsrl
- (sLL $1 $> (reverse $ snd $ unLoc $2)) (AnnList (Just $ glR $2) (Just $ moc $1) (Just $ mcc $3) (fst $ unLoc $2) []) } -- AZ:performance of reverse?
+ (sLL $1 $> (reverse $ snd $ unLoc $2)) (AnnList (Just $ glR $2) (Just $ moc $1) (Just $ mcc $3) (fromOL $ fst $ unLoc $2) []) }
| vocurly stmts close { $2 >>= \ $2 -> amsrl
- (L (gl $2) (reverse $ snd $ unLoc $2)) (AnnList (Just $ glR $2) Nothing Nothing (fst $ unLoc $2) []) }
+ (L (gl $2) (reverse $ snd $ unLoc $2)) (AnnList (Just $ glR $2) Nothing Nothing (fromOL $ fst $ unLoc $2) []) }
-- do { ;; s ; s ; ; s ;; }
-- The last Stmt should be an expression, but that's hard to enforce
@@ -3299,11 +3299,11 @@ stmtlist :: { forall b. DisambECP b => PV (LocatedL [LocatedA (Stmt GhcPs (Locat
-- So we use BodyStmts throughout, and switch the last one over
-- in ParseUtils.checkDo instead
-stmts :: { forall b. DisambECP b => PV (Located ([AddEpAnn],[LStmt GhcPs (LocatedA b)])) }
+stmts :: { forall b. DisambECP b => PV (Located (OrdList AddEpAnn,[LStmt GhcPs (LocatedA b)])) }
: stmts ';' stmt { $1 >>= \ $1 ->
$3 >>= \ ($3 :: LStmt GhcPs (LocatedA b)) ->
case (snd $ unLoc $1) of
- [] -> return (sLL $1 (reLoc $>) ((mj AnnSemi $2) : (fst $ unLoc $1)
+ [] -> return (sLL $1 (reLoc $>) ((fst $ unLoc $1) `snocOL` (mj AnnSemi $2)
,$3 : (snd $ unLoc $1)))
(h:t) -> do
{ h' <- addTrailingSemiA h (gl $2)
@@ -3311,13 +3311,13 @@ stmts :: { forall b. DisambECP b => PV (Located ([AddEpAnn],[LStmt GhcPs (Locate
| stmts ';' { $1 >>= \ $1 ->
case (snd $ unLoc $1) of
- [] -> return (sLL $1 $> ((mj AnnSemi $2) : (fst $ unLoc $1),snd $ unLoc $1))
+ [] -> return (sLL $1 $> ((fst $ unLoc $1) `snocOL` (mj AnnSemi $2),snd $ unLoc $1))
(h:t) -> do
{ h' <- addTrailingSemiA h (gl $2)
; return $ sL1 $1 (fst $ unLoc $1,h':t) }}
| stmt { $1 >>= \ $1 ->
- return $ sL1A $1 ([],[$1]) }
- | {- empty -} { return $ noLoc ([],[]) }
+ return $ sL1A $1 (nilOL,[$1]) }
+ | {- empty -} { return $ noLoc (nilOL,[]) }
-- For typing stmts at the GHCi prompt, where
diff --git a/compiler/GHC/Parser/Annotation.hs b/compiler/GHC/Parser/Annotation.hs
index 801721faca..42c98a7e36 100644
--- a/compiler/GHC/Parser/Annotation.hs
+++ b/compiler/GHC/Parser/Annotation.hs
@@ -392,7 +392,7 @@ instance Outputable EpaComment where
-- The usual way an 'AddEpAnn' is created is using the 'mj' ("make
-- jump") function, and then it can be inserted into the appropriate
-- annotation.
-data AddEpAnn = AddEpAnn AnnKeywordId EpaLocation deriving (Data,Eq,Ord)
+data AddEpAnn = AddEpAnn AnnKeywordId EpaLocation deriving (Data,Eq)
-- | The anchor for an @'AnnKeywordId'@. The Parser inserts the
-- @'EpaSpan'@ variant, giving the exact location of the original item
@@ -453,6 +453,9 @@ instance Outputable EpaLocation where
instance Outputable AddEpAnn where
ppr (AddEpAnn kw ss) = text "AddEpAnn" <+> ppr kw <+> ppr ss
+instance Ord AddEpAnn where
+ compare (AddEpAnn kw1 loc1) (AddEpAnn kw2 loc2) = compare (loc1, kw1) (loc2,kw2)
+
-- ---------------------------------------------------------------------
-- | The exact print annotations (EPAs) are kept in the HsSyn AST for
@@ -812,7 +815,7 @@ addTrailingAnnToA s t cs EpAnnNotUsed
addTrailingAnnToA _ t cs n = n { anns = addTrailing (anns n)
, comments = comments n <> cs }
where
- addTrailing n = n { lann_trailing = t : lann_trailing n }
+ addTrailing n = n { lann_trailing = lann_trailing n ++ [t] }
-- | Helper function used in the parser to add a comma location to an
-- existing annotation.
diff --git a/compiler/GHC/Parser/PostProcess.hs b/compiler/GHC/Parser/PostProcess.hs
index 19f78135c3..43423b52d5 100644
--- a/compiler/GHC/Parser/PostProcess.hs
+++ b/compiler/GHC/Parser/PostProcess.hs
@@ -834,7 +834,7 @@ checkTyVars pp_what equals_or_where tc tparms
chkParens :: [AddEpAnn] -> EpAnnComments -> LHsType GhcPs
-> P (LHsTyVarBndr () GhcPs)
chkParens acc cs (L l (HsParTy an ty))
- = chkParens (mkParensEpAnn (locA l) ++ acc) (cs Semi.<> epAnnComments an) ty
+ = chkParens (sort $ mkParensEpAnn (locA l) ++ acc) (cs Semi.<> epAnnComments an) ty
chkParens acc cs ty = chk acc cs ty
-- Check that the name space is correct!
@@ -937,7 +937,7 @@ checkTyClHdr is_cls ty
| isRdrTc tc = return (ltc, acc, fix, ann)
go _ (HsOpTy _ t1 ltc@(L _ tc) t2) acc ann _fix
| isRdrTc tc = return (ltc, HsValArg t1:HsValArg t2:acc, Infix, ann)
- go l (HsParTy _ ty) acc ann fix = goL ty acc (ann ++mkParensEpAnn l) fix
+ go l (HsParTy _ ty) acc ann fix = goL ty acc (sort $ ann ++mkParensEpAnn l) fix
go _ (HsAppTy _ t1 t2) acc ann fix = goL t1 (HsValArg t2:acc) ann fix
go _ (HsAppKindTy l ty ki) acc ann fix = goL ty (HsTypeArg l ki:acc) ann fix
go l (HsTupleTy _ HsBoxedOrConstraintTuple ts) [] ann fix
@@ -1023,7 +1023,7 @@ checkContext orig_t@(L (SrcSpanAnn _ l) _orig_t) =
EpAnnNotUsed -> ([],[],emptyComments)
EpAnn _ (AnnParen _ o c) cs -> ([o],[c],cs)
return (L (SrcSpanAnn (EpAnn (spanAsAnchor l)
- (AnnContext Nothing (op Semi.<> oparens) (cp Semi.<> cparens)) (cs Semi.<> cs')) l) ts)
+ (AnnContext Nothing (sort $ op Semi.<> oparens) (sort $ cp Semi.<> cparens)) (cs Semi.<> cs')) l) ts)
check (opi,cpi,csi) (L _lp1 (HsParTy ann' ty))
-- to be sure HsParTy doesn't get into the way
@@ -1284,7 +1284,7 @@ isFunLhs e = go e [] []
| not (isRdrDataCon f) = return (Just (L loc f, Prefix, es, ann))
go (L _ (PatBuilderApp f e)) es ann = go f (e:es) ann
go (L l (PatBuilderPar e _an)) es@(_:_) ann
- = go e es (ann ++ mkParensEpAnn (locA l))
+ = go e es (sort $ ann ++ mkParensEpAnn (locA l))
go (L loc (PatBuilderOpApp l (L loc' op) r (EpAnn loca anns cs))) es ann
| not (isRdrDataCon op) -- We have found the function!
= return (Just (L loc' op, Infix, (l:r:es), (anns ++ ann)))
diff --git a/testsuite/tests/parser/should_compile/DumpSemis.hs b/testsuite/tests/parser/should_compile/DumpSemis.hs
new file mode 100644
index 0000000000..ee674a8d63
--- /dev/null
+++ b/testsuite/tests/parser/should_compile/DumpSemis.hs
@@ -0,0 +1,35 @@
+module DumpSemis where
+
+-- Make sure we get all the semicolons in statements
+;;;; ;;
+import Data.List
+; ; ;
+import Data.Kind
+ ; ;;
+foo :: IO ()
+foo = do
+ do { ;;;; a }
+ a
+; ;;
+bar :: IO ()
+bar = do
+ { ; ;
+ a ;;
+ b
+ }
+ ; ;; ;
+baz :: IO ()
+baz = do { ;; s ; s ; ; s ;; }
+;
+a = undefined
+b = undefined
+s = undefined
+;
+class LiftingMonad2 ((trans :: Type)) where
+ proof :: trans -> Int
+;
+f :: ((Eq a, Ord a)) => a -> a
+f x = x
+;
+ ;;x=let{;;;;;y=2;;z=3;;;;}in y;
+;
diff --git a/testsuite/tests/parser/should_compile/DumpSemis.stderr b/testsuite/tests/parser/should_compile/DumpSemis.stderr
new file mode 100644
index 0000000000..788a9a2e0d
--- /dev/null
+++ b/testsuite/tests/parser/should_compile/DumpSemis.stderr
@@ -0,0 +1,1688 @@
+
+==================== Parser AST ====================
+
+(L
+ { DumpSemis.hs:1:1 }
+ (HsModule
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:1:1 }
+ (UnchangedAnchor))
+ (AnnsModule
+ [(AddEpAnn AnnModule (EpaSpan { DumpSemis.hs:1:1-6 }))
+ ,(AddEpAnn AnnWhere (EpaSpan { DumpSemis.hs:1:18-22 }))]
+ (AnnList
+ (Nothing)
+ (Nothing)
+ (Nothing)
+ []
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:4:1 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:4:2 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:4:3 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:4:4 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:4:7 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:4:8 }))]))
+ (EpaCommentsBalanced
+ []
+ [(L
+ (Anchor
+ { DumpSemis.hs:36:1 }
+ (UnchangedAnchor))
+ (EpaComment
+ (EpaEofComment)
+ { DumpSemis.hs:36:1 }))]))
+ (VirtualBraces
+ (1))
+ (Just
+ (L
+ { DumpSemis.hs:1:8-16 }
+ {ModuleName: DumpSemis}))
+ (Nothing)
+ [(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:5:1-16 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:6:1 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:6:3 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:6:5 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:5:1-16 })
+ (ImportDecl
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:5:1-6 }
+ (UnchangedAnchor))
+ (EpAnnImportDecl
+ (EpaSpan { DumpSemis.hs:5:1-6 })
+ (Nothing)
+ (Nothing)
+ (Nothing)
+ (Nothing)
+ (Nothing))
+ (EpaComments
+ []))
+ (NoSourceText)
+ (L
+ { DumpSemis.hs:5:8-16 }
+ {ModuleName: Data.List})
+ (Nothing)
+ (NotBoot)
+ (False)
+ (NotQualified)
+ (False)
+ (Nothing)
+ (Nothing)))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:7:1-16 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:8:4 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:8:6 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:8:7 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:7:1-16 })
+ (ImportDecl
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:7:1-6 }
+ (UnchangedAnchor))
+ (EpAnnImportDecl
+ (EpaSpan { DumpSemis.hs:7:1-6 })
+ (Nothing)
+ (Nothing)
+ (Nothing)
+ (Nothing)
+ (Nothing))
+ (EpaComments
+ []))
+ (NoSourceText)
+ (L
+ { DumpSemis.hs:7:8-16 }
+ {ModuleName: Data.Kind})
+ (Nothing)
+ (NotBoot)
+ (False)
+ (NotQualified)
+ (False)
+ (Nothing)
+ (Nothing)))]
+ [(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:9:1-12 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:9:1-12 })
+ (SigD
+ (NoExtField)
+ (TypeSig
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:9:1-3 }
+ (UnchangedAnchor))
+ (AnnSig
+ (AddEpAnn AnnDcolon (EpaSpan { DumpSemis.hs:9:5-6 }))
+ [])
+ (EpaComments
+ []))
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:9:1-3 })
+ (Unqual
+ {OccName: foo}))]
+ (HsWC
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:9:8-12 })
+ (HsSig
+ (NoExtField)
+ (HsOuterImplicit
+ (NoExtField))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:9:8-12 })
+ (HsAppTy
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:9:8-9 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:9:8-9 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:9:8-9 })
+ (Unqual
+ {OccName: IO}))))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:9:11-12 })
+ (HsTupleTy
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:9:11 }
+ (UnchangedAnchor))
+ (AnnParen
+ (AnnParens)
+ (EpaSpan { DumpSemis.hs:9:11 })
+ (EpaSpan { DumpSemis.hs:9:12 }))
+ (EpaComments
+ []))
+ (HsBoxedOrConstraintTuple)
+ []))))))))))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:(10,1)-(12,3) }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:13:1 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:13:3 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:13:4 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:(10,1)-(12,3) })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:10:1-3 })
+ (Unqual
+ {OccName: foo}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:(10,1)-(12,3) })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:(10,1)-(12,3) })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:(10,1)-(12,3) }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:10:1-3 })
+ (Unqual
+ {OccName: foo}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:(10,5)-(12,3) }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:(10,5)-(12,3) }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:10:5 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:(10,7)-(12,3) })
+ (HsDo
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:(10,7)-(12,3) }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:(11,3)-(12,3) }
+ (UnchangedAnchor)))
+ (Nothing)
+ (Nothing)
+ [(AddEpAnn AnnDo (EpaSpan { DumpSemis.hs:10:7-8 }))]
+ [])
+ (EpaComments
+ []))
+ (DoExpr
+ (Nothing))
+ (L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:(11,3)-(12,3) }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:(11,3)-(12,3) }
+ (UnchangedAnchor)))
+ (Nothing)
+ (Nothing)
+ []
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:(11,3)-(12,3) })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:11:3-15 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:11:3-15 })
+ (HsDo
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:11:3-15 }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:11:6-15 }
+ (UnchangedAnchor)))
+ (Nothing)
+ (Nothing)
+ [(AddEpAnn AnnDo (EpaSpan { DumpSemis.hs:11:3-4 }))]
+ [])
+ (EpaComments
+ []))
+ (DoExpr
+ (Nothing))
+ (L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:11:6-15 }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:11:8-13 }
+ (UnchangedAnchor)))
+ (Just
+ (AddEpAnn AnnOpenC (EpaSpan { DumpSemis.hs:11:6 })))
+ (Just
+ (AddEpAnn AnnCloseC (EpaSpan { DumpSemis.hs:11:15 })))
+ [(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:11:8 }))
+ ,(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:11:9 }))
+ ,(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:11:10 }))
+ ,(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:11:11 }))]
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:11:6-15 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:11:13 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:11:13 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:11:13 })
+ (Unqual
+ {OccName: a}))))
+ (NoExtField)
+ (NoExtField)))])))
+ (NoExtField)
+ (NoExtField)))
+ ,(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:12:3 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:12:3 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:12:3 })
+ (Unqual
+ {OccName: a}))))
+ (NoExtField)
+ (NoExtField)))])))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:14:1-12 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:14:1-12 })
+ (SigD
+ (NoExtField)
+ (TypeSig
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:14:1-3 }
+ (UnchangedAnchor))
+ (AnnSig
+ (AddEpAnn AnnDcolon (EpaSpan { DumpSemis.hs:14:5-6 }))
+ [])
+ (EpaComments
+ []))
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:14:1-3 })
+ (Unqual
+ {OccName: bar}))]
+ (HsWC
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:14:8-12 })
+ (HsSig
+ (NoExtField)
+ (HsOuterImplicit
+ (NoExtField))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:14:8-12 })
+ (HsAppTy
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:14:8-9 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:14:8-9 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:14:8-9 })
+ (Unqual
+ {OccName: IO}))))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:14:11-12 })
+ (HsTupleTy
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:14:11 }
+ (UnchangedAnchor))
+ (AnnParen
+ (AnnParens)
+ (EpaSpan { DumpSemis.hs:14:11 })
+ (EpaSpan { DumpSemis.hs:14:12 }))
+ (EpaComments
+ []))
+ (HsBoxedOrConstraintTuple)
+ []))))))))))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:(15,1)-(19,3) }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:20:2 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:20:4 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:20:5 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:20:8 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:(15,1)-(19,3) })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:15:1-3 })
+ (Unqual
+ {OccName: bar}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:(15,1)-(19,3) })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:(15,1)-(19,3) })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:(15,1)-(19,3) }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:15:1-3 })
+ (Unqual
+ {OccName: bar}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:(15,5)-(19,3) }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:(15,5)-(19,3) }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:15:5 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:(15,7)-(19,3) })
+ (HsDo
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:(15,7)-(19,3) }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:(16,3)-(19,3) }
+ (UnchangedAnchor)))
+ (Nothing)
+ (Nothing)
+ [(AddEpAnn AnnDo (EpaSpan { DumpSemis.hs:15:7-8 }))]
+ [])
+ (EpaComments
+ []))
+ (DoExpr
+ (Nothing))
+ (L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:(16,3)-(19,3) }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:(16,5)-(18,5) }
+ (UnchangedAnchor)))
+ (Just
+ (AddEpAnn AnnOpenC (EpaSpan { DumpSemis.hs:16:3 })))
+ (Just
+ (AddEpAnn AnnCloseC (EpaSpan { DumpSemis.hs:19:3 })))
+ [(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:16:5 }))
+ ,(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:16:8 }))]
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:(16,3)-(19,3) })
+ [(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:17:5 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:17:7 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:17:8 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:17:5 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:17:5 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:17:5 })
+ (Unqual
+ {OccName: a}))))
+ (NoExtField)
+ (NoExtField)))
+ ,(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:18:5 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:18:5 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:18:5 })
+ (Unqual
+ {OccName: b}))))
+ (NoExtField)
+ (NoExtField)))])))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:21:1-12 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:21:1-12 })
+ (SigD
+ (NoExtField)
+ (TypeSig
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:21:1-3 }
+ (UnchangedAnchor))
+ (AnnSig
+ (AddEpAnn AnnDcolon (EpaSpan { DumpSemis.hs:21:5-6 }))
+ [])
+ (EpaComments
+ []))
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:21:1-3 })
+ (Unqual
+ {OccName: baz}))]
+ (HsWC
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:21:8-12 })
+ (HsSig
+ (NoExtField)
+ (HsOuterImplicit
+ (NoExtField))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:21:8-12 })
+ (HsAppTy
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:21:8-9 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:21:8-9 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:21:8-9 })
+ (Unqual
+ {OccName: IO}))))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:21:11-12 })
+ (HsTupleTy
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:21:11 }
+ (UnchangedAnchor))
+ (AnnParen
+ (AnnParens)
+ (EpaSpan { DumpSemis.hs:21:11 })
+ (EpaSpan { DumpSemis.hs:21:12 }))
+ (EpaComments
+ []))
+ (HsBoxedOrConstraintTuple)
+ []))))))))))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:1-30 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:23:1 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:22:1-30 })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:1-3 })
+ (Unqual
+ {OccName: baz}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:1-30 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:1-30 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:1-30 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:1-3 })
+ (Unqual
+ {OccName: baz}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:22:5-30 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:5-30 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:22:5 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:7-30 })
+ (HsDo
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:7-30 }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:22:10-30 }
+ (UnchangedAnchor)))
+ (Nothing)
+ (Nothing)
+ [(AddEpAnn AnnDo (EpaSpan { DumpSemis.hs:22:7-8 }))]
+ [])
+ (EpaComments
+ []))
+ (DoExpr
+ (Nothing))
+ (L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:10-30 }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:22:12-25 }
+ (UnchangedAnchor)))
+ (Just
+ (AddEpAnn AnnOpenC (EpaSpan { DumpSemis.hs:22:10 })))
+ (Just
+ (AddEpAnn AnnCloseC (EpaSpan { DumpSemis.hs:22:30 })))
+ [(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:22:12 }))
+ ,(AddEpAnn AnnSemi (EpaSpan { DumpSemis.hs:22:13 }))]
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:22:10-30 })
+ [(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:15 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:22:17 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:22:15 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:15 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:15 })
+ (Unqual
+ {OccName: s}))))
+ (NoExtField)
+ (NoExtField)))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:19 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:22:21 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:22:23 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:22:19 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:19 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:19 })
+ (Unqual
+ {OccName: s}))))
+ (NoExtField)
+ (NoExtField)))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:22:25 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:22:27 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:22:28 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:22:25 })
+ (BodyStmt
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:25 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:22:25 })
+ (Unqual
+ {OccName: s}))))
+ (NoExtField)
+ (NoExtField)))])))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:24:1-13 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:24:1-13 })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:24:1 })
+ (Unqual
+ {OccName: a}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:24:1-13 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:24:1-13 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:24:1-13 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:24:1 })
+ (Unqual
+ {OccName: a}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:24:3-13 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:24:3-13 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:24:3 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:24:5-13 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:24:5-13 })
+ (Unqual
+ {OccName: undefined}))))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:25:1-13 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:25:1-13 })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:25:1 })
+ (Unqual
+ {OccName: b}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:25:1-13 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:25:1-13 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:25:1-13 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:25:1 })
+ (Unqual
+ {OccName: b}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:25:3-13 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:25:3-13 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:25:3 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:25:5-13 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:25:5-13 })
+ (Unqual
+ {OccName: undefined}))))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:26:1-13 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:27:1 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:26:1-13 })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:26:1 })
+ (Unqual
+ {OccName: s}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:26:1-13 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:26:1-13 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:26:1-13 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:26:1 })
+ (Unqual
+ {OccName: s}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:26:3-13 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:26:3-13 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:26:3 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:26:5-13 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:26:5-13 })
+ (Unqual
+ {OccName: undefined}))))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:(28,1)-(29,23) }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:30:1 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:(28,1)-(29,23) })
+ (TyClD
+ (NoExtField)
+ (ClassDecl
+ ((,,)
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:(28,1)-(29,23) }
+ (UnchangedAnchor))
+ [(AddEpAnn AnnClass (EpaSpan { DumpSemis.hs:28:1-5 }))
+ ,(AddEpAnn AnnWhere (EpaSpan { DumpSemis.hs:28:40-44 }))]
+ (EpaComments
+ []))
+ (NoAnnSortKey)
+ (VirtualBraces
+ (3)))
+ (Nothing)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:28:7-19 })
+ (Unqual
+ {OccName: LiftingMonad2}))
+ (HsQTvs
+ (NoExtField)
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:28:22-38 })
+ (KindedTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:28:22-38 }
+ (UnchangedAnchor))
+ [(AddEpAnn AnnDcolon (EpaSpan { DumpSemis.hs:28:30-31 }))
+ ,(AddEpAnn AnnOpenP (EpaSpan { DumpSemis.hs:28:22 }))
+ ,(AddEpAnn AnnOpenP (EpaSpan { DumpSemis.hs:28:23 }))
+ ,(AddEpAnn AnnCloseP (EpaSpan { DumpSemis.hs:28:37 }))
+ ,(AddEpAnn AnnCloseP (EpaSpan { DumpSemis.hs:28:38 }))]
+ (EpaComments
+ []))
+ (())
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:28:24-28 })
+ (Unqual
+ {OccName: trans}))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:28:33-36 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:28:33-36 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:28:33-36 })
+ (Unqual
+ {OccName: Type}))))))])
+ (Prefix)
+ []
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:3-23 })
+ (ClassOpSig
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:29:3-7 }
+ (UnchangedAnchor))
+ (AnnSig
+ (AddEpAnn AnnDcolon (EpaSpan { DumpSemis.hs:29:9-10 }))
+ [])
+ (EpaComments
+ []))
+ (False)
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:3-7 })
+ (Unqual
+ {OccName: proof}))]
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:12-23 })
+ (HsSig
+ (NoExtField)
+ (HsOuterImplicit
+ (NoExtField))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:12-23 })
+ (HsFunTy
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:29:12-16 }
+ (UnchangedAnchor))
+ (NoEpAnns)
+ (EpaComments
+ []))
+ (HsUnrestrictedArrow
+ (L
+ (TokenLoc
+ (EpaSpan { DumpSemis.hs:29:18-19 }))
+ (HsNormalTok)))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:12-16 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:29:12-16 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:12-16 })
+ (Unqual
+ {OccName: trans}))))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:21-23 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:29:21-23 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:29:21-23 })
+ (Unqual
+ {OccName: Int}))))))))))]
+ {Bag(LocatedA (HsBind GhcPs)):
+ []}
+ []
+ []
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:1-30 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:31:1-30 })
+ (SigD
+ (NoExtField)
+ (TypeSig
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:1 }
+ (UnchangedAnchor))
+ (AnnSig
+ (AddEpAnn AnnDcolon (EpaSpan { DumpSemis.hs:31:3-4 }))
+ [])
+ (EpaComments
+ []))
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:1 })
+ (Unqual
+ {OccName: f}))]
+ (HsWC
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:6-30 })
+ (HsSig
+ (NoExtField)
+ (HsOuterImplicit
+ (NoExtField))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:6-30 })
+ (HsQualTy
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:6-20 }
+ (UnchangedAnchor))
+ (AnnContext
+ (Just
+ ((,)
+ (NormalSyntax)
+ (EpaSpan { DumpSemis.hs:31:22-23 })))
+ [(EpaSpan { DumpSemis.hs:31:6 })
+ ,(EpaSpan { DumpSemis.hs:31:7 })]
+ [(EpaSpan { DumpSemis.hs:31:19 })
+ ,(EpaSpan { DumpSemis.hs:31:20 })])
+ (EpaComments
+ [])) { DumpSemis.hs:31:6-20 })
+ [(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:8-11 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddCommaAnn
+ (EpaSpan { DumpSemis.hs:31:12 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:31:8-11 })
+ (HsAppTy
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:8-9 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:8-9 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:8-9 })
+ (Unqual
+ {OccName: Eq}))))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:11 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:11 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:11 })
+ (Unqual
+ {OccName: a}))))))
+ ,(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:14-18 })
+ (HsAppTy
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:14-16 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:14-16 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:14-16 })
+ (Unqual
+ {OccName: Ord}))))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:18 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:18 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:18 })
+ (Unqual
+ {OccName: a}))))))])
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:25-30 })
+ (HsFunTy
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:25 }
+ (UnchangedAnchor))
+ (NoEpAnns)
+ (EpaComments
+ []))
+ (HsUnrestrictedArrow
+ (L
+ (TokenLoc
+ (EpaSpan { DumpSemis.hs:31:27-28 }))
+ (HsNormalTok)))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:25 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:25 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:25 })
+ (Unqual
+ {OccName: a}))))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:30 })
+ (HsTyVar
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:31:30 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (NotPromoted)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:31:30 })
+ (Unqual
+ {OccName: a}))))))))))))))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:32:1-7 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [])
+ (EpaComments
+ [])) { DumpSemis.hs:32:1-7 })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:32:1 })
+ (Unqual
+ {OccName: f}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:32:1-7 })
+ [(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:32:1-7 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:33:1 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:6 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:7 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:32:1-7 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:32:1-7 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:32:1 })
+ (Unqual
+ {OccName: f}))
+ (Prefix)
+ (NoSrcStrict))
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:32:3 })
+ (VarPat
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:32:3 })
+ (Unqual
+ {OccName: x}))))]
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:32:5-7 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:32:5-7 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:32:5 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:32:7 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:32:7 })
+ (Unqual
+ {OccName: x}))))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:8-35 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:36 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:35:1 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:34:8-35 })
+ (ValD
+ (NoExtField)
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:8 })
+ (Unqual
+ {OccName: x}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:8-35 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:8-35 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:8-35 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:8 })
+ (Unqual
+ {OccName: x}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:34:9-35 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:9-35 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:34:9 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:10-35 })
+ (HsLet
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:10-35 }
+ (UnchangedAnchor))
+ (AnnsLet
+ (EpaSpan { DumpSemis.hs:34:10-12 })
+ (EpaSpan { DumpSemis.hs:34:32-33 }))
+ (EpaComments
+ []))
+ (HsValBinds
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:13-31 }
+ (UnchangedAnchor))
+ (AnnList
+ (Just
+ (Anchor
+ { DumpSemis.hs:34:14-30 }
+ (UnchangedAnchor)))
+ (Just
+ (AddEpAnn AnnOpenC (EpaSpan { DumpSemis.hs:34:13 })))
+ (Just
+ (AddEpAnn AnnCloseC (EpaSpan { DumpSemis.hs:34:31 })))
+ []
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:14 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:15 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:16 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:17 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:18 }))])
+ (EpaComments
+ []))
+ (ValBinds
+ (NoAnnSortKey)
+ {Bag(LocatedA (HsBind GhcPs)):
+ [(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:19-21 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:22 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:23 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:34:19-21 })
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:19 })
+ (Unqual
+ {OccName: y}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:19-21 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:19-21 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:19-21 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:19 })
+ (Unqual
+ {OccName: y}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:34:20-21 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:20-21 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:34:20 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:21 })
+ (HsOverLit
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:21 }
+ (UnchangedAnchor))
+ (NoEpAnns)
+ (EpaComments
+ []))
+ (OverLit
+ (NoExtField)
+ (HsIntegral
+ (IL
+ (SourceText 2)
+ (False)
+ (2))))))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ []))
+ ,(L
+ (SrcSpanAnn (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:24-26 }
+ (UnchangedAnchor))
+ (AnnListItem
+ [(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:27 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:28 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:29 }))
+ ,(AddSemiAnn
+ (EpaSpan { DumpSemis.hs:34:30 }))])
+ (EpaComments
+ [])) { DumpSemis.hs:34:24-26 })
+ (FunBind
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:24 })
+ (Unqual
+ {OccName: z}))
+ (MG
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:24-26 })
+ [(L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:24-26 })
+ (Match
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:24-26 }
+ (UnchangedAnchor))
+ []
+ (EpaComments
+ []))
+ (FunRhs
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:24 })
+ (Unqual
+ {OccName: z}))
+ (Prefix)
+ (NoSrcStrict))
+ []
+ (GRHSs
+ (EpaComments
+ [])
+ [(L
+ { DumpSemis.hs:34:25-26 }
+ (GRHS
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:25-26 }
+ (UnchangedAnchor))
+ (GrhsAnn
+ (Nothing)
+ (AddEpAnn AnnEqual (EpaSpan { DumpSemis.hs:34:25 })))
+ (EpaComments
+ []))
+ []
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:26 })
+ (HsOverLit
+ (EpAnn
+ (Anchor
+ { DumpSemis.hs:34:26 }
+ (UnchangedAnchor))
+ (NoEpAnns)
+ (EpaComments
+ []))
+ (OverLit
+ (NoExtField)
+ (HsIntegral
+ (IL
+ (SourceText 3)
+ (False)
+ (3))))))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ []))]}
+ []))
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:35 })
+ (HsVar
+ (NoExtField)
+ (L
+ (SrcSpanAnn (EpAnnNotUsed) { DumpSemis.hs:34:35 })
+ (Unqual
+ {OccName: y}))))))))]
+ (EmptyLocalBinds
+ (NoExtField)))))])
+ (FromSource))
+ [])))]
+ (Nothing)
+ (Nothing))) \ No newline at end of file
diff --git a/testsuite/tests/parser/should_compile/T20452.stderr b/testsuite/tests/parser/should_compile/T20452.stderr
index 8cd03e685f..c5eded00e9 100644
--- a/testsuite/tests/parser/should_compile/T20452.stderr
+++ b/testsuite/tests/parser/should_compile/T20452.stderr
@@ -155,9 +155,9 @@
{ T20452.hs:6:13-22 }
(UnchangedAnchor))
[(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:6:17-18 }))
+ ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:6:13 }))
,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:6:14 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:6:21 }))
- ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:6:13 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:6:22 }))]
(EpaComments
[]))
@@ -436,9 +436,9 @@
{ T20452.hs:9:14-27 }
(UnchangedAnchor))
[(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:9:20-21 }))
+ ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:14 }))
,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:15 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:9:26 }))
- ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:14 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:9:27 }))]
(EpaComments
[]))
@@ -470,9 +470,9 @@
{ T20452.hs:9:29-46 }
(UnchangedAnchor))
[(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:9:36-37 }))
+ ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:29 }))
,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:30 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:9:45 }))
- ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:29 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:9:46 }))]
(EpaComments
[]))
@@ -504,9 +504,9 @@
{ T20452.hs:9:48-76 }
(UnchangedAnchor))
[(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:9:54-55 }))
+ ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:48 }))
,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:49 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:9:75 }))
- ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:9:48 }))
,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:9:76 }))]
(EpaComments
[]))
diff --git a/testsuite/tests/parser/should_compile/all.T b/testsuite/tests/parser/should_compile/all.T
index d24321a103..5f81a651c3 100644
--- a/testsuite/tests/parser/should_compile/all.T
+++ b/testsuite/tests/parser/should_compile/all.T
@@ -179,3 +179,5 @@ test('T19521', normal, compile, [''])
test('T20186', normal, compile, [''])
test('T20452', normal, compile, [''])
+
+test('DumpSemis', normal, compile, ['-dsuppress-uniques -ddump-parsed-ast'])
diff --git a/utils/check-exact/Main.hs b/utils/check-exact/Main.hs
index e13fdf832e..bcb6dc3525 100644
--- a/utils/check-exact/Main.hs
+++ b/utils/check-exact/Main.hs
@@ -188,9 +188,13 @@ _tt = testOneFile changers "/home/alanz/mysrc/git.haskell.org/worktree/exactprin
-- "../../testsuite/tests/printer/Test19813.hs" Nothing
-- "../../testsuite/tests/printer/Test19814.hs" Nothing
-- "../../testsuite/tests/printer/Test19821.hs" Nothing
- "../../testsuite/tests/printer/Test19834.hs" Nothing
+ -- "../../testsuite/tests/printer/Test19834.hs" Nothing
-- "../../testsuite/tests/printer/Test19840.hs" Nothing
-- "../../testsuite/tests/printer/Test19850.hs" Nothing
+ -- "../../testsuite/tests/printer/PprLinearArrow.hs" Nothing
+ -- "../../testsuite/tests/printer/PprSemis.hs" Nothing
+ -- "../../testsuite/tests/printer/PprEmptyMostly.hs" Nothing
+ "../../testsuite/tests/parser/should_compile/DumpSemis.hs" Nothing
-- cloneT does not need a test, function can be retired