diff --git a/compiler/GHC/Parser.y b/compiler/GHC/Parser.y
index 53991343336b735c3e357a9432aad97f9293b067..64247027aedcc67756ad6a9949670c185bc4d333 100644
--- a/compiler/GHC/Parser.y
+++ b/compiler/GHC/Parser.y
@@ -2874,10 +2874,11 @@ aexp    :: { ECP }
                       mkHsLamPV (comb2 $1 $>) (\cs -> mkMatchGroup FromSource
                             (sLLa $1 $>
                             [sLLa $1 $>
-                                         $ Match { m_ext = EpAnn (glR $1) [mj AnnLam $1] cs
+                                         $ Match { m_ext = EpAnn (glR $1) [] cs
                                                  , m_ctxt = LamAlt LamSingle
                                                  , m_pats = $2
-                                                 , m_grhss = unguardedGRHSs (comb2 $3 $4) $4 (EpAnn (glR $3) (GrhsAnn Nothing (mu AnnRarrow $3)) emptyComments) }])) }
+                                                 , m_grhss = unguardedGRHSs (comb2 $3 $4) $4 (EpAnn (glR $3) (GrhsAnn Nothing (mu AnnRarrow $3)) emptyComments) }]))
+                            [mj AnnLam $1] }
         | '\\' 'lcase' altslist(pats1)
             {  ECP $ $3 >>= \ $3 ->
                  mkHsLamCasePV (comb2 $1 $>) LamCase $3 [mj AnnLam $1,mj AnnCase $2] }
diff --git a/compiler/GHC/Parser/PostProcess.hs b/compiler/GHC/Parser/PostProcess.hs
index 6bd7291eb0168bba9e26f9406526e0f521fbdd35..7c0ef8e92bc9a0e78b7e0f668de4a7c17bdecf9d 100644
--- a/compiler/GHC/Parser/PostProcess.hs
+++ b/compiler/GHC/Parser/PostProcess.hs
@@ -1556,9 +1556,6 @@ class (b ~ (Body b) GhcPs, AnnoBody b) => DisambECP b where
   ecpFromExp' :: LHsExpr GhcPs -> PV (LocatedA b)
   mkHsProjUpdatePV :: SrcSpan -> Located [LocatedAn NoEpAnns (DotFieldOcc GhcPs)]
     -> LocatedA b -> Bool -> [AddEpAnn] -> PV (LHsRecProj GhcPs (LocatedA b))
-  -- | Disambiguate "\... -> ..." (lambda)
-  mkHsLamPV
-    :: SrcSpan -> (EpAnnComments -> MatchGroup GhcPs (LocatedA b)) -> PV (LocatedA b)
   -- | Disambiguate "let ... in ..."
   mkHsLetPV
     :: SrcSpan
@@ -1579,6 +1576,9 @@ class (b ~ (Body b) GhcPs, AnnoBody b) => DisambECP b where
   -- | Disambiguate "case ... of ..."
   mkHsCasePV :: SrcSpan -> LHsExpr GhcPs -> (LocatedL [LMatch GhcPs (LocatedA b)])
              -> EpAnnHsCase -> PV (LocatedA b)
+  -- | Disambiguate "\... -> ..." (lambda)
+  mkHsLamPV
+    :: SrcSpan -> (EpAnnComments -> MatchGroup GhcPs (LocatedA b)) -> [AddEpAnn] -> PV (LocatedA b)
   -- | Disambiguate "\case" and "\cases"
   mkHsLamCasePV :: SrcSpan -> HsLamVariant
                 -> (LocatedL [LMatch GhcPs (LocatedA b)]) -> [AddEpAnn]
@@ -1707,9 +1707,9 @@ instance DisambECP (HsCmd GhcPs) where
   ecpFromExp' (L l e) = cmdFail (locA l) (ppr e)
   mkHsProjUpdatePV l _ _ _ _ = addFatalError $ mkPlainErrorMsgEnvelope l $
                                                  PsErrOverloadedRecordDotInvalid
-  mkHsLamPV l mg = do
+  mkHsLamPV l mg anns = do
     cs <- getCommentsFor l
-    return $ L (noAnnSrcSpan l) (HsCmdLam (EpAnn (spanAsAnchor l) [] cs) LamSingle (mg cs))
+    return $ L (noAnnSrcSpan l) (HsCmdLam (EpAnn (spanAsAnchor l) anns cs) LamSingle (mg cs))
 
   mkHsLamCasePV l lam_variant (L lm m) anns = do
     cs <- getCommentsFor l
@@ -1800,11 +1800,6 @@ instance DisambECP (HsExpr GhcPs) where
   mkHsProjUpdatePV l fields arg isPun anns = do
     cs <- getCommentsFor l
     return $ mkRdrProjUpdate (noAnnSrcSpan l) fields arg isPun (EpAnn (spanAsAnchor l) anns cs)
-  mkHsLamPV l mg = do
-    cs <- getCommentsFor l
-    let mg' = mg cs
-    checkLamMatchGroup l mg'
-    return $ L (noAnnSrcSpan l) (HsLam (EpAnn (spanAsAnchor l) [] cs) LamSingle mg')
   mkHsLetPV l tkLet bs tkIn c = do
     cs <- getCommentsFor l
     return $ L (noAnnSrcSpan l) (HsLet (EpAnn (spanAsAnchor l) NoEpAnns cs) tkLet bs tkIn c)
@@ -1817,6 +1812,11 @@ instance DisambECP (HsExpr GhcPs) where
     cs <- getCommentsFor l
     let mg = mkMatchGroup FromSource (L lm m)
     return $ L (noAnnSrcSpan l) (HsCase (EpAnn (spanAsAnchor l) anns cs) e mg)
+  mkHsLamPV l mg anns = do
+    cs <- getCommentsFor l
+    let mg' = mg cs
+    checkLamMatchGroup l mg'
+    return $ L (noAnnSrcSpan l) (HsLam (EpAnn (spanAsAnchor l) anns cs) LamSingle mg')
   mkHsLamCasePV l lam_variant (L lm m) anns = do
     cs <- getCommentsFor l
     let mg = mkLamCaseMatchGroup FromSource lam_variant (L lm m)
@@ -1894,7 +1894,6 @@ instance DisambECP (PatBuilder GhcPs) where
   type Body (PatBuilder GhcPs) = PatBuilder
   ecpFromCmd' (L l c)    = addFatalError $ mkPlainErrorMsgEnvelope (locA l) $ PsErrArrowCmdInPat c
   ecpFromExp' (L l e)    = addFatalError $ mkPlainErrorMsgEnvelope (locA l) $ PsErrArrowExprInPat e
-  mkHsLamPV l _          = addFatalError $ mkPlainErrorMsgEnvelope l PsErrLambdaInPat
   mkHsLetPV l _ _ _ _    = addFatalError $ mkPlainErrorMsgEnvelope l PsErrLetInPat
   mkHsProjUpdatePV l _ _ _ _ = addFatalError $ mkPlainErrorMsgEnvelope l PsErrOverloadedRecordDotInvalid
   type InfixOp (PatBuilder GhcPs) = RdrName
@@ -1903,6 +1902,7 @@ instance DisambECP (PatBuilder GhcPs) where
     cs <- getCommentsFor l
     let anns = EpAnn (spanAsAnchor l) [] cs
     return $ L (noAnnSrcSpan l) $ PatBuilderOpApp p1 op p2 anns
+  mkHsLamPV l _ _        = addFatalError $ mkPlainErrorMsgEnvelope l PsErrLambdaInPat
   mkHsCasePV l _ _ _          = addFatalError $ mkPlainErrorMsgEnvelope l PsErrCaseInPat
   mkHsLamCasePV l lam_variant _ _ = addFatalError $ mkPlainErrorMsgEnvelope l (PsErrLambdaCaseInPat lam_variant)
   type FunArg (PatBuilder GhcPs) = PatBuilder GhcPs
diff --git a/utils/check-exact/ExactPrint.hs b/utils/check-exact/ExactPrint.hs
index 00263bbc9ce0f0365f3b716d9db18e044e333153..5cc51fc659865b1ad753ca2ba214313cd7f0ad73 100644
--- a/utils/check-exact/ExactPrint.hs
+++ b/utils/check-exact/ExactPrint.hs
@@ -2762,14 +2762,12 @@ instance ExactPrint (HsExpr GhcPs) where
     lit' <- withPpr lit
     return (HsLit an lit')
 
-  -- ToDo: Do these two cases need to be handled separately?
-  exact (HsLam an LamSingle mg) = do
-    mg' <- markAnnotated mg
-    return (HsLam an LamSingle mg')
   exact (HsLam an lam_variant mg) = do
     an0 <- markEpAnnL an lidl AnnLam
-    an1 <- markEpAnnL an0 lidl (case lam_variant of LamCase -> AnnCase
-                                                    LamCases -> AnnCases)
+    an1 <- case lam_variant of
+             LamSingle -> return an0
+             LamCase -> markEpAnnL an0 lidl AnnCase
+             LamCases -> markEpAnnL an0 lidl AnnCases
     mg' <- markAnnotated mg
     return (HsLam an1 lam_variant mg')
 
@@ -3286,14 +3284,12 @@ instance ExactPrint (HsCmd GhcPs) where
     e2' <- markAnnotated e2
     return (HsCmdApp an e1' e2')
 
-  exact (HsCmdLam a LamSingle match) = do
-    match' <- markAnnotated match
-    return (HsCmdLam a LamSingle match')
-
   exact (HsCmdLam an lam_variant matches) = do
     an0 <- markEpAnnL an lidl AnnLam
-    an1 <- markEpAnnL an0 lidl (case lam_variant of LamCase -> AnnCase
-                                                    LamCases -> AnnCases)
+    an1 <- case lam_variant of
+             LamSingle -> return an0
+             LamCase -> markEpAnnL an0 lidl AnnCase
+             LamCases -> markEpAnnL an0 lidl AnnCases
     matches' <- markAnnotated matches
     return (HsCmdLam an1 lam_variant matches')