-
Simon Peyton Jones authored
------------------------------------------------------ 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'
c36a2f9b