Type classes in Backpack signatures are dodgy
At the moment, we allow exactly the same type class declarations in hsig files as we do in hs-boot files, and matching requires the type class definitions to match up exactly. But this is quite questionable.
First, this means that I can't write this in a signature:
class K a where
f :: a -> Bool
but then implement K with a type class that provides a default. The matching code will say these are not compatible. That's not so useful.
Second, it means that I can WRITE a default implementation in a signature file. That seems like a step too far: there are many things I might like to write in a specification of a type class, but what the default methods are seems like a step too far.
So it seems we need to fix two things:
- Relax matching so that you can add defaults post-facto in the implementation of the type class
- Make hsig more restrictive w.r.t. what class definitions it will accept.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |