diff options
author | Alan Zimmerman <alan.zimm@gmail.com> | 2021-10-02 12:01:48 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-10-06 00:11:42 -0400 |
commit | 89e98bdf6e966f42b13a58dc4a5bbeb14d88ff15 (patch) | |
tree | 2b84cc834dac147a466c53b6e7b41298039dc966 | |
parent | 435ff39871776f73c946353689ea4f0305cc4501 (diff) | |
download | haskell-89e98bdf6e966f42b13a58dc4a5bbeb14d88ff15.tar.gz |
EPA: Remove duplicate AnnOpenP/AnnCloseP in DataDecl
The parens EPAs were added in the tyvars where they belong, but also
at the top level of the declaration.
Closes #20452
-rw-r--r-- | compiler/GHC/Parser/PostProcess.hs | 29 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/DumpParsedAst.stderr | 14 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/T20452.hs | 9 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/T20452.stderr | 592 | ||||
-rw-r--r-- | testsuite/tests/parser/should_compile/all.T | 1 |
5 files changed, 618 insertions, 27 deletions
diff --git a/compiler/GHC/Parser/PostProcess.hs b/compiler/GHC/Parser/PostProcess.hs index 55b3c0d8a9..198a14ec72 100644 --- a/compiler/GHC/Parser/PostProcess.hs +++ b/compiler/GHC/Parser/PostProcess.hs @@ -194,9 +194,9 @@ mkClassDecl loc' (L _ (mcxt, tycl_hdr)) fds where_cls layoutInfo annsIn = do { let loc = noAnnSrcSpan loc' ; (binds, sigs, ats, at_defs, _, docs) <- cvBindsAndSigs where_cls ; (cls, tparams, fixity, ann) <- checkTyClHdr True tycl_hdr - ; (tyvars,annst) <- checkTyVars (text "class") whereDots cls tparams + ; tyvars <- checkTyVars (text "class") whereDots cls tparams ; cs <- getCommentsFor (locA loc) -- Get any remaining comments - ; let anns' = addAnns (EpAnn (spanAsAnchor $ locA loc) annsIn emptyComments) (ann++annst) cs + ; let anns' = addAnns (EpAnn (spanAsAnchor $ locA loc) annsIn emptyComments) ann cs ; return (L loc (ClassDecl { tcdCExt = (anns', NoAnnSortKey, layoutInfo) , tcdCtxt = mcxt , tcdLName = cls, tcdTyVars = tyvars @@ -220,9 +220,9 @@ mkTyData loc' new_or_data cType (L _ (mcxt, tycl_hdr)) ksig data_cons (L _ maybe_deriv) annsIn = do { let loc = noAnnSrcSpan loc' ; (tc, tparams, fixity, ann) <- checkTyClHdr False tycl_hdr - ; (tyvars, anns) <- checkTyVars (ppr new_or_data) equalsDots tc tparams + ; tyvars <- checkTyVars (ppr new_or_data) equalsDots tc tparams ; cs <- getCommentsFor (locA loc) -- Get any remaining comments - ; let anns' = addAnns (EpAnn (spanAsAnchor $ locA loc) annsIn emptyComments) (ann ++ anns) cs + ; let anns' = addAnns (EpAnn (spanAsAnchor $ locA loc) annsIn emptyComments) ann cs ; defn <- mkDataDefn new_or_data cType mcxt ksig data_cons maybe_deriv ; return (L loc (DataDecl { tcdDExt = anns', tcdLName = tc, tcdTyVars = tyvars, @@ -254,9 +254,9 @@ mkTySynonym :: SrcSpan mkTySynonym loc lhs rhs annsIn = do { (tc, tparams, fixity, ann) <- checkTyClHdr False lhs ; cs1 <- getCommentsFor loc -- Add any API Annotations to the top SrcSpan [temp] - ; (tyvars, anns) <- checkTyVars (text "type") equalsDots tc tparams + ; tyvars <- checkTyVars (text "type") equalsDots tc tparams ; cs2 <- getCommentsFor loc -- Add any API Annotations to the top SrcSpan [temp] - ; let anns' = addAnns (EpAnn (spanAsAnchor loc) annsIn emptyComments) (ann ++ anns) (cs1 Semi.<> cs2) + ; let anns' = addAnns (EpAnn (spanAsAnchor loc) annsIn emptyComments) ann (cs1 Semi.<> cs2) ; return (L (noAnnSrcSpan loc) (SynDecl { tcdSExt = anns' , tcdLName = tc, tcdTyVars = tyvars @@ -349,9 +349,9 @@ mkFamDecl :: SrcSpan mkFamDecl loc info topLevel lhs ksig injAnn annsIn = do { (tc, tparams, fixity, ann) <- checkTyClHdr False lhs ; cs1 <- getCommentsFor loc -- Add any API Annotations to the top SrcSpan [temp] - ; (tyvars, anns) <- checkTyVars (ppr info) equals_or_where tc tparams + ; tyvars <- checkTyVars (ppr info) equals_or_where tc tparams ; cs2 <- getCommentsFor loc -- Add any API Annotations to the top SrcSpan [temp] - ; let anns' = addAnns (EpAnn (spanAsAnchor loc) annsIn emptyComments) (ann++anns) (cs1 Semi.<> cs2) + ; let anns' = addAnns (EpAnn (spanAsAnchor loc) annsIn emptyComments) ann (cs1 Semi.<> cs2) ; return (L (noAnnSrcSpan loc) (FamDecl noExtField (FamilyDecl { fdExt = anns' @@ -843,13 +843,12 @@ eitherToP (Left err) = addFatalError err eitherToP (Right thing) = return thing checkTyVars :: SDoc -> SDoc -> LocatedN RdrName -> [LHsTypeArg GhcPs] - -> P ( LHsQTyVars GhcPs -- the synthesized type variables - , [AddEpAnn] ) -- action which adds annotations + -> P (LHsQTyVars GhcPs) -- the synthesized type variables -- ^ Check whether the given list of type parameters are all type variables -- (possibly with a kind signature). checkTyVars pp_what equals_or_where tc tparms - = do { (tvs, anns) <- fmap unzip $ mapM check tparms - ; return (mkHsQTvs tvs, concat anns) } + = do { tvs <- mapM check tparms + ; return (mkHsQTvs tvs) } where check (HsTypeArg _ ki@(L loc _)) = addFatalError $ mkPlainErrorMsgEnvelope (locA loc) $ (PsErrUnexpectedTypeAppInDecl ki pp_what (unLoc tc)) @@ -858,12 +857,10 @@ checkTyVars pp_what equals_or_where tc tparms (PsErrMalformedDecl pp_what (unLoc tc)) -- Keep around an action for adjusting the annotations of extra parens chkParens :: [AddEpAnn] -> EpAnnComments -> LHsType GhcPs - -> P (LHsTyVarBndr () GhcPs, [AddEpAnn]) + -> P (LHsTyVarBndr () GhcPs) chkParens acc cs (L l (HsParTy an ty)) = chkParens (mkParensEpAnn (locA l) ++ acc) (cs Semi.<> epAnnComments an) ty - chkParens acc cs ty = do - tv <- chk acc cs ty - return (tv, reverse acc) + chkParens acc cs ty = chk acc cs ty -- Check that the name space is correct! chk :: [AddEpAnn] -> EpAnnComments -> LHsType GhcPs -> P (LHsTyVarBndr () GhcPs) diff --git a/testsuite/tests/parser/should_compile/DumpParsedAst.stderr b/testsuite/tests/parser/should_compile/DumpParsedAst.stderr index d68daf6738..d42a808c62 100644 --- a/testsuite/tests/parser/should_compile/DumpParsedAst.stderr +++ b/testsuite/tests/parser/should_compile/DumpParsedAst.stderr @@ -189,9 +189,7 @@ [(AddEpAnn AnnType (EpaSpan { DumpParsedAst.hs:10:1-4 })) ,(AddEpAnn AnnFamily (EpaSpan { DumpParsedAst.hs:10:6-11 })) ,(AddEpAnn AnnDcolon (EpaSpan { DumpParsedAst.hs:10:32-33 })) - ,(AddEpAnn AnnWhere (EpaSpan { DumpParsedAst.hs:10:41-45 })) - ,(AddEpAnn AnnCloseP (EpaSpan { DumpParsedAst.hs:10:30 })) - ,(AddEpAnn AnnOpenP (EpaSpan { DumpParsedAst.hs:10:20 }))] + ,(AddEpAnn AnnWhere (EpaSpan { DumpParsedAst.hs:10:41-45 }))] (EpaComments [])) (ClosedTypeFamily @@ -468,9 +466,7 @@ { DumpParsedAst.hs:15:1-29 } (UnchangedAnchor)) [(AddEpAnn AnnData (EpaSpan { DumpParsedAst.hs:15:1-4 })) - ,(AddEpAnn AnnEqual (EpaSpan { DumpParsedAst.hs:15:19 })) - ,(AddEpAnn AnnCloseP (EpaSpan { DumpParsedAst.hs:15:17 })) - ,(AddEpAnn AnnOpenP (EpaSpan { DumpParsedAst.hs:15:10 }))] + ,(AddEpAnn AnnEqual (EpaSpan { DumpParsedAst.hs:15:19 }))] (EpaComments [])) (L @@ -631,11 +627,7 @@ [(AddEpAnn AnnType (EpaSpan { DumpParsedAst.hs:17:1-4 })) ,(AddEpAnn AnnFamily (EpaSpan { DumpParsedAst.hs:17:6-11 })) ,(AddEpAnn AnnDcolon (EpaSpan { DumpParsedAst.hs:17:42-43 })) - ,(AddEpAnn AnnWhere (EpaSpan { DumpParsedAst.hs:17:50-54 })) - ,(AddEpAnn AnnCloseP (EpaSpan { DumpParsedAst.hs:17:23 })) - ,(AddEpAnn AnnOpenP (EpaSpan { DumpParsedAst.hs:17:16 })) - ,(AddEpAnn AnnCloseP (EpaSpan { DumpParsedAst.hs:17:40 })) - ,(AddEpAnn AnnOpenP (EpaSpan { DumpParsedAst.hs:17:25 }))] + ,(AddEpAnn AnnWhere (EpaSpan { DumpParsedAst.hs:17:50-54 }))] (EpaComments [])) (ClosedTypeFamily diff --git a/testsuite/tests/parser/should_compile/T20452.hs b/testsuite/tests/parser/should_compile/T20452.hs new file mode 100644 index 0000000000..54a7e83908 --- /dev/null +++ b/testsuite/tests/parser/should_compile/T20452.hs @@ -0,0 +1,9 @@ +{-# LANGUAGE DataKinds #-} +{-# OPTIONS -ddump-parsed-ast #-} +module T20452 where + +data Proxy1 (a :: k) = Proxy1 +data Proxy2 ((a :: k)) = Proxy2 + +class Prods1 (lhs :: Int) (name :: String) (rhs :: [(String, String)]) where {} +class Prods2 ((lhs :: Int)) ((name :: String)) ((rhs :: [(String, String)])) where {} diff --git a/testsuite/tests/parser/should_compile/T20452.stderr b/testsuite/tests/parser/should_compile/T20452.stderr new file mode 100644 index 0000000000..47a05d5770 --- /dev/null +++ b/testsuite/tests/parser/should_compile/T20452.stderr @@ -0,0 +1,592 @@ + +==================== Parser AST ==================== + +(L + { T20452.hs:1:1 } + (HsModule + (EpAnn + (Anchor + { T20452.hs:1:1 } + (UnchangedAnchor)) + (AnnsModule + [(AddEpAnn AnnModule (EpaSpan { T20452.hs:3:1-6 })) + ,(AddEpAnn AnnWhere (EpaSpan { T20452.hs:3:15-19 }))] + (AnnList + (Nothing) + (Nothing) + (Nothing) + [] + [])) + (EpaCommentsBalanced + [] + [(L + (Anchor + { T20452.hs:10:1 } + (UnchangedAnchor)) + (EpaComment + (EpaEofComment) + { T20452.hs:10:1 }))])) + (VirtualBraces + (1)) + (Just + (L + { T20452.hs:3:8-13 } + {ModuleName: T20452})) + (Nothing) + [] + [(L + (SrcSpanAnn (EpAnn + (Anchor + { T20452.hs:5:1-31 } + (UnchangedAnchor)) + (AnnListItem + []) + (EpaComments + [])) { T20452.hs:5:1-31 }) + (TyClD + (NoExtField) + (DataDecl + (EpAnn + (Anchor + { T20452.hs:5:1-31 } + (UnchangedAnchor)) + [(AddEpAnn AnnData (EpaSpan { T20452.hs:5:1-4 })) + ,(AddEpAnn AnnEqual (EpaSpan { T20452.hs:5:24 }))] + (EpaComments + [])) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:5:6-11 }) + (Unqual + {OccName: Proxy1})) + (HsQTvs + (NoExtField) + [(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:5:14-21 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:5:14-21 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:5:17-18 })) + ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:5:14 })) + ,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:5:21 }))] + (EpaComments + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:5:15 }) + (Unqual + {OccName: a})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:5:20 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:5:20 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:5:20 }) + (Unqual + {OccName: k}))))))]) + (Prefix) + (HsDataDefn + (NoExtField) + (DataType) + (Nothing) + (Nothing) + (Nothing) + [(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:5:26-31 }) + (ConDeclH98 + (EpAnn + (Anchor + { T20452.hs:5:26-31 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:5:26-31 }) + (Unqual + {OccName: Proxy1})) + (False) + [] + (Nothing) + (PrefixCon + [] + []) + (Nothing)))] + [])))) + ,(L + (SrcSpanAnn (EpAnn + (Anchor + { T20452.hs:6:1-31 } + (UnchangedAnchor)) + (AnnListItem + []) + (EpaComments + [])) { T20452.hs:6:1-31 }) + (TyClD + (NoExtField) + (DataDecl + (EpAnn + (Anchor + { T20452.hs:6:1-31 } + (UnchangedAnchor)) + [(AddEpAnn AnnData (EpaSpan { T20452.hs:6:1-4 })) + ,(AddEpAnn AnnEqual (EpaSpan { T20452.hs:6:24 }))] + (EpaComments + [])) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:6:6-11 }) + (Unqual + {OccName: Proxy2})) + (HsQTvs + (NoExtField) + [(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:6:13-22 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:6:13-22 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:6:17-18 })) + ,(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 + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:6:15 }) + (Unqual + {OccName: a})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:6:20 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:6:20 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:6:20 }) + (Unqual + {OccName: k}))))))]) + (Prefix) + (HsDataDefn + (NoExtField) + (DataType) + (Nothing) + (Nothing) + (Nothing) + [(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:6:26-31 }) + (ConDeclH98 + (EpAnn + (Anchor + { T20452.hs:6:26-31 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:6:26-31 }) + (Unqual + {OccName: Proxy2})) + (False) + [] + (Nothing) + (PrefixCon + [] + []) + (Nothing)))] + [])))) + ,(L + (SrcSpanAnn (EpAnn + (Anchor + { T20452.hs:8:1-85 } + (UnchangedAnchor)) + (AnnListItem + []) + (EpaComments + [])) { T20452.hs:8:1-85 }) + (TyClD + (NoExtField) + (ClassDecl + ((,,) + (EpAnn + (Anchor + { T20452.hs:8:1-85 } + (UnchangedAnchor)) + [(AddEpAnn AnnClass (EpaSpan { T20452.hs:8:1-5 })) + ,(AddEpAnn AnnWhere (EpaSpan { T20452.hs:8:78-82 })) + ,(AddEpAnn AnnOpenC (EpaSpan { T20452.hs:8:84 })) + ,(AddEpAnn AnnCloseC (EpaSpan { T20452.hs:8:85 }))] + (EpaComments + [])) + (NoAnnSortKey) + (ExplicitBraces)) + (Nothing) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:7-12 }) + (Unqual + {OccName: Prods1})) + (HsQTvs + (NoExtField) + [(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:15-26 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:8:15-26 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:8:20-21 })) + ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:8:15 })) + ,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:8:26 }))] + (EpaComments + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:16-18 }) + (Unqual + {OccName: lhs})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:23-25 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:8:23-25 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:23-25 }) + (Unqual + {OccName: Int})))))) + ,(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:30-45 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:8:30-45 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:8:36-37 })) + ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:8:30 })) + ,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:8:45 }))] + (EpaComments + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:31-34 }) + (Unqual + {OccName: name})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:39-44 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:8:39-44 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:39-44 }) + (Unqual + {OccName: String})))))) + ,(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:49-75 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:8:49-75 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:8:54-55 })) + ,(AddEpAnn AnnOpenP (EpaSpan { T20452.hs:8:49 })) + ,(AddEpAnn AnnCloseP (EpaSpan { T20452.hs:8:75 }))] + (EpaComments + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:50-52 }) + (Unqual + {OccName: rhs})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:57-74 }) + (HsListTy + (EpAnn + (Anchor + { T20452.hs:8:57 } + (UnchangedAnchor)) + (AnnParen + (AnnParensSquare) + (EpaSpan { T20452.hs:8:57 }) + (EpaSpan { T20452.hs:8:74 })) + (EpaComments + [])) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:58-73 }) + (HsTupleTy + (EpAnn + (Anchor + { T20452.hs:8:58 } + (UnchangedAnchor)) + (AnnParen + (AnnParens) + (EpaSpan { T20452.hs:8:58 }) + (EpaSpan { T20452.hs:8:73 })) + (EpaComments + [])) + (HsBoxedOrConstraintTuple) + [(L + (SrcSpanAnn (EpAnn + (Anchor + { T20452.hs:8:59-64 } + (UnchangedAnchor)) + (AnnListItem + [(AddCommaAnn + (EpaSpan { T20452.hs:8:65 }))]) + (EpaComments + [])) { T20452.hs:8:59-64 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:8:59-64 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:59-64 }) + (Unqual + {OccName: String})))) + ,(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:67-72 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:8:67-72 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:8:67-72 }) + (Unqual + {OccName: String}))))]))))))]) + (Prefix) + [] + [] + {Bag(LocatedA (HsBind GhcPs)): + []} + [] + [] + []))) + ,(L + (SrcSpanAnn (EpAnn + (Anchor + { T20452.hs:9:1-85 } + (UnchangedAnchor)) + (AnnListItem + []) + (EpaComments + [])) { T20452.hs:9:1-85 }) + (TyClD + (NoExtField) + (ClassDecl + ((,,) + (EpAnn + (Anchor + { T20452.hs:9:1-85 } + (UnchangedAnchor)) + [(AddEpAnn AnnClass (EpaSpan { T20452.hs:9:1-5 })) + ,(AddEpAnn AnnWhere (EpaSpan { T20452.hs:9:78-82 })) + ,(AddEpAnn AnnOpenC (EpaSpan { T20452.hs:9:84 })) + ,(AddEpAnn AnnCloseC (EpaSpan { T20452.hs:9:85 }))] + (EpaComments + [])) + (NoAnnSortKey) + (ExplicitBraces)) + (Nothing) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:7-12 }) + (Unqual + {OccName: Prods2})) + (HsQTvs + (NoExtField) + [(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:14-27 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:9:14-27 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:9:20-21 })) + ,(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 + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:16-18 }) + (Unqual + {OccName: lhs})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:23-25 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:9:23-25 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:23-25 }) + (Unqual + {OccName: Int})))))) + ,(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:29-46 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:9:29-46 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:9:36-37 })) + ,(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 + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:31-34 }) + (Unqual + {OccName: name})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:39-44 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:9:39-44 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:39-44 }) + (Unqual + {OccName: String})))))) + ,(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:48-76 }) + (KindedTyVar + (EpAnn + (Anchor + { T20452.hs:9:48-76 } + (UnchangedAnchor)) + [(AddEpAnn AnnDcolon (EpaSpan { T20452.hs:9:54-55 })) + ,(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 + [])) + (()) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:50-52 }) + (Unqual + {OccName: rhs})) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:57-74 }) + (HsListTy + (EpAnn + (Anchor + { T20452.hs:9:57 } + (UnchangedAnchor)) + (AnnParen + (AnnParensSquare) + (EpaSpan { T20452.hs:9:57 }) + (EpaSpan { T20452.hs:9:74 })) + (EpaComments + [])) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:58-73 }) + (HsTupleTy + (EpAnn + (Anchor + { T20452.hs:9:58 } + (UnchangedAnchor)) + (AnnParen + (AnnParens) + (EpaSpan { T20452.hs:9:58 }) + (EpaSpan { T20452.hs:9:73 })) + (EpaComments + [])) + (HsBoxedOrConstraintTuple) + [(L + (SrcSpanAnn (EpAnn + (Anchor + { T20452.hs:9:59-64 } + (UnchangedAnchor)) + (AnnListItem + [(AddCommaAnn + (EpaSpan { T20452.hs:9:65 }))]) + (EpaComments + [])) { T20452.hs:9:59-64 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:9:59-64 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:59-64 }) + (Unqual + {OccName: String})))) + ,(L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:67-72 }) + (HsTyVar + (EpAnn + (Anchor + { T20452.hs:9:67-72 } + (UnchangedAnchor)) + [] + (EpaComments + [])) + (NotPromoted) + (L + (SrcSpanAnn (EpAnnNotUsed) { T20452.hs:9:67-72 }) + (Unqual + {OccName: String}))))]))))))]) + (Prefix) + [] + [] + {Bag(LocatedA (HsBind GhcPs)): + []} + [] + [] + [])))] + (Nothing) + (Nothing))) diff --git a/testsuite/tests/parser/should_compile/all.T b/testsuite/tests/parser/should_compile/all.T index e2d4303b7e..d24321a103 100644 --- a/testsuite/tests/parser/should_compile/all.T +++ b/testsuite/tests/parser/should_compile/all.T @@ -178,3 +178,4 @@ test('T19082', normal, compile, ['']) test('T19521', normal, compile, ['']) test('T20186', normal, compile, ['']) +test('T20452', normal, compile, ['']) |