Написание универсального моноида поверх Cofree; неразрешима?

Я пытаюсь написать следующий экземпляр Monoid для Cofree:

instance (Monoid a, Monoid (f (Cofree f a))) => Monoid (Cofree f a) where
  mempty = mempty :< mempty
  (a :< rest) `mappend` (b :< rest') = (a `mappend` b) :< (rest `mappend` rest')

но я получаю следующую ошибку:

• Variable ‘f’ occurs more often
    in the constraint ‘Monoid (f (Cofree f a))’
    than in the instance head
  (Use UndecidableInstances to permit this)
• In the instance declaration for ‘Monoid (Cofree f a)’

Я сталкивался с Неразрешимыми Экземплярами прежде, но я не совсем уверен, ПОЧЕМУ это неразрешимо, и как я могу это исправить? Нужно ли добавлять UndecidableInstances? Спасибо!!

0 ответов

Другие вопросы по тегам