Commit 488a9daa authored by ruperthorlick's avatar ruperthorlick Committed by Ben Gamari

Changed parser message for RankNTypes (#12811)

Added a check for whether RankNTypes is enabled
and changed error message accordingly

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, mpickering

Differential Revision: https://phabricator.haskell.org/D3262
parent 4b1f0721
......@@ -3181,11 +3181,7 @@ tyvarop :: { Located RdrName }
tyvarop : '`' tyvarid '`' {% ams (sLL $1 $> (unLoc $2))
[mj AnnBackquote $1,mj AnnVal $2
,mj AnnBackquote $3] }
| '.' {% parseErrorSDoc (getLoc $1)
(vcat [text "Illegal symbol '.' in type",
text "Perhaps you intended to use RankNTypes or a similar language",
text "extension to enable explicit-forall syntax: forall <tvs>. <type>"])
}
| '.' {% hintExplicitForall' (getLoc $1) }
tyvarid :: { Located RdrName }
: VARID { sL1 $1 $! mkUnqual tvName (getVARID $1) }
......@@ -3585,6 +3581,22 @@ hintExplicitForall span = do
, text "extension to enable explicit-forall syntax: \x2200 <tvs>. <type>"
]
-- Hint about explicit-forall, assuming UnicodeSyntax is off
hintExplicitForall' :: SrcSpan -> P (GenLocated SrcSpan RdrName)
hintExplicitForall' span = do
forall <- extension explicitForallEnabled
let illegalDot = "Illegal symbol '.' in type"
if forall
then parseErrorSDoc span $ vcat
[ text illegalDot
, text "Perhaps you meant to write 'forall <tvs>. <type>'?"
]
else parseErrorSDoc span $ vcat
[ text illegalDot
, text "Perhaps you intended to use RankNTypes or a similar language"
, text "extension to enable explicit-forall syntax: forall <tvs>. <type>"
]
{-
%************************************************************************
%* *
......
{-# LANGUAGE RankNTypes #-}
module Bug where
foo :: foral a. a -> a
foo x = x
testsuite/tests/parser/should_fail/T12811.hs:4:15: error:
Illegal symbol '.' in type
Perhaps you meant to write 'forall <tvs>. <type>'?
|
4 | foo :: foral a. a -> a
| ^
......@@ -95,3 +95,4 @@ test('T10498a', normal, compile_fail, [''])
test('T10498b', normal, compile_fail, [''])
test('T12051', normal, compile_fail, [''])
test('T12429', normal, compile_fail, [''])
test('T12811', normal, compile_fail, [''])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment