Put the generic-default type in the Class
This is an internal GHC refactoring ticket. Consider
{-# LANGUAGE DefaultSignatures #-}
class C a where
op :: a -> a -> Bool
default op :: Ord a => a -> a -> Bool
op x y = x < y
The Class object for C has a ClassOpItem that specifies
- the name
op - the type of the method
a -> a -> Bool - that
ophas a generic-default signature
BUT it does not contain the actual signature Ord a => a -> a -> Bool. That's really wrong; it is certainly part of the definition of the class, and we should print it out when we say :info C in ghci.
Instead this type is kept solely in the top-level generic-default Id binding. But that means that default-method Ids and generic-default method Ids are treated differently; see gen_dm_ids in tcTyClDecl1 in TcTyClsDecls, and mkDefaultMethodIds in TcTyDecls.
We should treat them uniformly. I know how but have too much in flight to do it immediately.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.10.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |