#2900: Confusing error message for monadic function with wrong number of 
arguments
----------------------------------------+-----------------------------------
    Reporter:  tim                      |        Owner:                  
        Type:  bug                      |       Status:  new             
    Priority:  normal                   |    Milestone:                  
   Component:  Compiler (Type checker)  |      Version:  6.10.1          
    Severity:  minor                    |   Resolution:                  
    Keywords:                           |   Difficulty:  Unknown         
    Testcase:                           |           Os:  Unknown/Multiple
Architecture:  Unknown/Multiple         |  
----------------------------------------+-----------------------------------
Changes (by simonpj):

 * cc: chak (added)
  * difficulty:  => Unknown

Comment:

 Good example!  Sadly, it's quite awkward to fix.  Here's what is
 happening.

  * GHC tries to make the type `Int -> m ()` look like `ty1 -> ty2 -> ty3`
 (to match the syntactic form of the LHS.
  * It's ''possible'' that the context `(MonadIO m)` might have, as a
 "superclass" the equality `m ~ (->) Int`.  In that case we'd get `ty2 =
 Int`, `ty3 = ()`.
  * Because `m` might be elucidated by the context, GHC can't reject the
 result type `(m ())` right away.  Instead it invents a fresh type variable
 alpha, and generates the contraint that `(m ~ (->) alpha)`, leaving the
 constraint to be solved later.
  * Now we go on to the RHS, and that gives a type error.

 What we really want here is to solve the first constraint "eagerly", and
 proceed only if it succeeds.  The type checker isn't set up to do that at
 the moment, but this is an interesting example to bear in mind, thank you.

 Simon

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2900#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to