Использование AllBF Барби в голове экземпляра без UndecidableInstances
Я бы хотел использовать AllBF
из barbies
в головке экземпляра, например:
import Barbies
import Barbies.Constraints
class MyClass a where
instance (ConstraintsB b, AllBF MyClass f b) => MyClass (Barbie b f) where
Это не удается из-за скрытого полиморфизма видов. Саймон говорит:
• переменная
k
чаще встречается в ограниченииAllBF MyClass f b
чем в голове экземпляраMyClass (Barbie b f)
(ИспользуйтеUndecidableInstances
чтобы разрешить это)
Я бы хотел избежать UndecidableInstances
Вот. Одна вещь, которую я пробовал, - это сделать мой экземпляр мономорфным в видеf
:
instance (ConstraintsB b, AllBF MyClass (f :: Type -> Type) b) => MyClass (Barbie b f) where
Однако это приводит к другой ошибке:
• Недопустимое вложенное ограничение
AllBF MyClass f b
(ИспользуйтеUndecidableInstances
чтобы разрешить это)
Наивно, я попытался вставить определение AllBF
, но это ничего не меняет:
instance (ConstraintsB b, AllB (ClassF MyClass (f :: Type -> Type)) b) => MyClass (Barbie b f) where
• Недопустимое вложенное ограничение
AllB (ClassF MyClass f) b
(ИспользуйтеUndecidableInstances
чтобы разрешить это)
Есть ли способ создать этот экземпляр без включения UndecidableInstances
?