diff options
Diffstat (limited to 'compiler/GHC/Parser.y')
-rw-r--r-- | compiler/GHC/Parser.y | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/compiler/GHC/Parser.y b/compiler/GHC/Parser.y index fc546c515d..2b259354e5 100644 --- a/compiler/GHC/Parser.y +++ b/compiler/GHC/Parser.y @@ -2788,7 +2788,7 @@ aexp :: { ECP } unECP $2 >>= \ $2 -> mkHsNegAppPV (comb2A $1 $>) $2 [mj AnnMinus $1] } - | '\\' apats '->' exp + | '\\' matchpats '->' exp { ECP $ unECP $4 >>= \ $4 -> mkHsLamPV (comb2 $1 (reLoc $>)) (\cs -> mkMatchGroup FromSource @@ -3243,7 +3243,7 @@ alt :: { forall b. DisambECP b => PV (LMatch GhcPs (LocatedA b)) } acsA (\cs -> sLL (reLoc $1) $> (Match { m_ext = (EpAnn (glAR $1) [] cs) , m_ctxt = CaseAlt - , m_pats = [$1] + , m_pats = [L noSrcSpanA (VisPat noExtField $1)] , m_grhss = unLoc $2 }))} alt_rhs :: { forall b. DisambECP b => PV (Located (GRHSs GhcPs (LocatedA b))) } @@ -3289,12 +3289,14 @@ bindpat : exp {% -- See Note [Parser-Validator Details] in GHC.Parse checkPattern_details incompleteDoBlock (unECP $1) } -apat :: { LPat GhcPs } -apat : aexp {% (checkPattern <=< runPV) (unECP $1) } +matchpat :: { LMatchPat GhcPs } +matchpat : aexp {% (fmap mkVisPat . checkPattern <=< runPV) (unECP $1) } + | PREFIX_AT tyvar { (L noSrcSpanA (InvisTyVarPat noAnn $2)) } + | PREFIX_AT '_' { (L noSrcSpanA (InvisWildTyPat noExtField)) } -apats :: { [LPat GhcPs] } - : apat apats { $1 : $2 } - | {- empty -} { [] } +matchpats :: { [LMatchPat GhcPs] } + : matchpat matchpats { $1 : $2 } + | {- empty -} { [] } ----------------------------------------------------------------------------- -- Statement sequences |