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

Reply via email to