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.
|Component||Compiler (Type checker)|