
Daniel Fischer
Removing the `Variable v` context from instance declarations is at least tricky. I don't think you can do it at all here. For the context to become available, you need to pattern-match, but in `newVar`, the `Source` appears only as the result. Therefore you need the `Variable v` context to be able to write
v <- newVar a
Consequently, you can't have an
instance Variable (Source v) where ...
without context, and since `Variable b` is a superclass constraint on `Bindable b`, you need something that guarantees that `Source x` (resp. `BindingList x`) has a `Variable` instance.
You're not pattern-matching on the constructor. I wrote that you have to do that to make the context available:
Thank you, I understand now. So as far as removing redundant code is concerned, this can't really be done? The instance declarations still need the redundant context, and function definitions need a redundant pattern-matching instead of a redundant context.