Skip to content

Don't suppress warnings in the presence of errors

Consider this fragment of code (uses injective type families, not yet merged into HEAD):

type family Bar a = r | r -> a where
    Bar Int  = Bool
    Bar Bool = Int
    Bar Bool = Char

bar :: Bar a -> Bar a
bar x = x

barapp :: Char
barapp = bar 'c'

GHC rejects this with an error:

Couldn't match expected type ‘Bar a0’ with actual type ‘Char’
The type variable ‘a0’ is ambiguous
In the first argument of ‘bar’, namely ‘'c'’
In the expression: bar 'c'
In an equation for ‘barapp’: barapp = bar 'c'

The reason why this is rejected is that the last type family equation is not reachable. GHC warns about that if I comment out barapp:

Dropping overlapped type family instance equation:
  Bar Bool = Char

I believe that with that warning source of the error would be easier to find. So I propose that by default GHC does not suppress warnings in the presence of errors.

Trac metadata
Trac field Value
Version 7.11
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information