Allow "instances" for non-typeclass constraints in signature files
The contiguous library defines a typeclass for primitive arrays, with an associated constraint:
type Contiguous :: ( Type -> Type ) -> Constraint
class Contiguous arr where
type Element arr :: Type -> Constraint
-- ... array methods
Now, with backpack one might want to declare:
- an array type that is an instance of
Contiguous, - a key type which is an allowed element of the array.
Specifically:
data Key
data Array k
instance Contiguous Array
instance Element Array Key
This currently isn't allowed:
* Illegal instance for a associated type family
A class instance must be for a class
* In the instance declaration for `Element Array Key'
|
| instance Element Array Key
| ^^^^^^^^^^^^^^^^^
However I think it would make sense to allow this; I don't think there's any other available mechanism to specify that any instantiation of Key and Array should satisfy the additional constraint Element Array Key. Of course it's not strictly an instance (as Element is not a typeclass, but a constraint synonym), but the alternative would be to invent backpack-specific syntax.