#4940: Bad error message using poly pat bind with MonoPatBinds
---------------------------------+------------------------------------------
    Reporter:  batterseapower    |       Owner:                                 
  
        Type:  feature request   |      Status:  new                            
  
    Priority:  normal            |   Component:  Compiler (Type checker)        
  
     Version:  7.0.1             |    Keywords:                                 
  
    Testcase:                    |   Blockedby:                                 
  
          Os:  Unknown/Multiple  |    Blocking:                                 
  
Architecture:  Unknown/Multiple  |     Failure:  Incorrect warning at 
compile-time
---------------------------------+------------------------------------------
 This program:

 {{{
 foo :: a -> a
 bar :: a -> a
 (foo, bar) = (\x -> x, \y -> y)

 main = print $ foo $ bar 1
 }}}

 Is trying to pattern-bind a polymorphic function. The error message is
 dreadful:

 {{{
 /Users/mbolingbroke/Junk/PolyPatBinds.hs:5:15:
     Couldn't match expected type `t -> t1'
                 with actual type `forall a. a -> a'
     The lambda expression `\ x -> x' has one argument one argument,
     but its type `forall a. a -> a' has none
     In the expression: \ x -> x
     In the expression: (\ x -> x, \ y -> y)
 }}}

 The issues are:

 1. It repeats itself: "one argument one argument"
 2. It is patently incorrect: the type forall a. a -> a DOES have one
 argument in the standard nomenclature
 3. It does not point the user towards the fix (-XNoMonoPatBinds)

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4940>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to