Временами я сталкиваюсь с "особенностью", что Haskell соответствует только головкам экземпляров, а именно: instance (a ~ NewDataTyp b) => C a теперь будет соответствовать любому типу, т.е. писать еще один экземпляр ...
У меня есть следующий класс типов, который моделирует оптимизацию запросов в стиле SQL: class OptimizableQuery q, где type Optimized q :: * optimize :: q -> Optimized q instance Query q => ...