Skip to content
  • Simon Peyton Jones's avatar
    [project @ 2005-02-04 17:24:01 by simonpj] · c36a2f9b
    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