diff options
-rw-r--r-- | compiler/GHC/Parser.y | 40 | ||||
-rw-r--r-- | compiler/GHC/Parser/Annotation.hs | 7 | ||||
-rw-r--r-- | compiler/GHC/Parser/PostProcess.hs | 8 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/DumpSemis.hs | 35 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/DumpSemis.stderr | 1688 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/T20452.stderr | 8 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/all.T | 2 | ||||
-rw-r--r-- | utils/check-exact/Main.hs | 6 |
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 |