Commit 23cb13ad authored by's avatar
Browse files

Improve error message (idea in Trac #3805)

If we see

   foreign export ccall foo :: ...blah...

we now use the "foreign" to suggest -XForeignFunctionInterface
parent e87df67d
......@@ -867,8 +867,20 @@ checkValSig
checkValSig (L l (HsVar v)) ty
| isUnqual v && not (isDataOcc (rdrNameOcc v))
= return (TypeSig (L l v) ty)
checkValSig (L l _) _
checkValSig lhs@(L l _) _
| looks_like_foreign lhs
= parseError l "Invalid type signature; perhaps you meant to use -XForeignFunctionInterface?"
| otherwise
= parseError l "Invalid type signature"
-- A common error is to forget the ForeignFunctionInterface flag
-- so check for that, and suggest. cf Trac #3805
-- Sadly 'foreign import' still barfs 'parse error' because 'import' is a keyword
looks_like_foreign (L _ (HsVar v)) = v == foreign_RDR
looks_like_foreign (L _ (HsApp lhs _)) = looks_like_foreign lhs
looks_like_foreign _ = False
foreign_RDR = mkUnqual varName (fsLit "foreign")
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