[GHC] #9323: Confusing type error behaviour

GHC ghc-devs at haskell.org
Thu Jul 17 08:59:40 UTC 2014


#9323: Confusing type error behaviour
-------------------------------------+-------------------------------------
              Reporter:  simonpj     |             Owner:
                  Type:  bug         |            Status:  new
              Priority:  normal      |         Milestone:
             Component:  Compiler    |           Version:  7.8.3
            Resolution:              |          Keywords:
Differential Revisions:              |  Operating System:  Unknown/Multiple
          Architecture:              |   Type of failure:  None/Unknown
  Unknown/Multiple                   |         Test Case:
            Difficulty:  Unknown     |          Blocking:
            Blocked By:              |
       Related Tickets:              |
-------------------------------------+-------------------------------------
Changes (by simonpj):

 * version:  7.8.2 => 7.8.3


Old description:

> Compile this example with GHC 7.8.3.
> {{{
> module Foo where
>
> broken :: [Int]
> broken = ()
>
> ambiguous :: a -> String
> ambiguous _ = show 0
> }}}
> You get
> {{{
> Foo.hs:4:10:
>     Couldn't match expected type ‘[Int]’ with actual type ‘()’
>     In the expression: ()
>     In an equation for ‘broken’: broken = ()
>
> Foo.hs:7:15:
>     No instance for (Show a0) arising from a use of ‘show’
>     The type variable ‘a0’ is ambiguous
> }}}
> (and a similar ambiguous `(Num a0)` error).
>
> '''But if you comment out `broken`, the program compiles.''', using the
> defaulting rules to choose `a0` = `Integer`.
>
> This is obviously wrong.
>
> Reported by Evan Laforge.

New description:

 Compile this example with GHC 7.8.3.
 {{{
 module Foo where

 broken :: [Int]
 broken = ()

 ambiguous :: a -> String
 ambiguous _ = show 0
 }}}
 You get
 {{{
 Foo.hs:4:10:
     Couldn't match expected type ‘[Int]’ with actual type ‘()’
     In the expression: ()
     In an equation for ‘broken’: broken = ()

 Foo.hs:7:15:
     No instance for (Show a0) arising from a use of ‘show’
     The type variable ‘a0’ is ambiguous
 }}}
 (and a similar ambiguous `(Num a0)` error).

 '''But if you comment out `broken`, the program compiles''', using the
 defaulting rules to choose `a0` = `Integer`.

 This is obviously wrong.

 Reported by Evan Laforge.

--

Comment:

 Everything is fine in HEAD. (I don't know which of the many changes
 between 7.8 and HEAD is responsible.)

 I'll add a regression test. But I don't propose to fix 7.8.

 Simon

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9323#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list