simonpj 2005/02/04 09:24:16 PST
Modified files:
ghc/compiler/typecheck TcBinds.lhs TcEnv.lhs TcRnTypes.lhs
TcSimplify.lhs
Log:
------------------------------------------------------
Report top-level implicit parameter errors more nicely
------------------------------------------------------
Consider
module Main where
main = let ?x = 5 in print foo
foo = woggle 3
woggle :: (?x :: Int) => Int -> Int
woggle y = ?x + y
GHC's current rules say that 'foo' is monomorphic, so we get
foo :: Int
but we also get an unbound top-level constraint (?x::Int). GHC 6.2 emits a
message like:
Unbound implicit parameter (?x::Int)
arising from use of `woggle' at ...
The point is that THERE IS NO WAY FOR THIS CONSTRAINT TO GET BOUND,
because we don't have a top-level binding form for implicit parameters.
So it's stupid for 'foo' to be monomorphic.
This commit improves matters by giving a much nicer error message:
Implicit parameters escape from the monomorphic top-level binding(s) of
`foo':
?x::Int arising from use of `woggle' at tcfail130.hs:10:6-11
Probably fix: add type signatures for the top-level binding(s)
When generalising the type(s) for `foo'
Revision Changes Path
1.135 +7 -10 fptools/ghc/compiler/typecheck/TcBinds.lhs
1.139 +10 -7 fptools/ghc/compiler/typecheck/TcEnv.lhs
1.52 +8 -2 fptools/ghc/compiler/typecheck/TcRnTypes.lhs
1.145 +58 -9 fptools/ghc/compiler/typecheck/TcSimplify.lhs
_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc