summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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