Type class overlapping instances check doesn't understand type equality
Here is a sample program which we'd expect to give an overlapping instances error, but does not:
{-# LANGUAGE TypeFamilies, FlexibleInstances #-}
module Foo where
type family F a :: *
type instance F Bool = Int
type instance F Int = Bool
class C a where
instance (F Bool ~ a) => C a where
instance C Int where
Fortunately, GHC does notice when you actually try to use the instance.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.9 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | low |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |