Код Cofree comonad полезен для итерации частичных функций способом, который является полиморфным по типу ошибки. Его coiter напоминает forM -looping в monad ошибки, но он собирает полученные значения
Мы можем описать монаду, поскольку реализация вычислительного контекста и реализация монады точно сохраняет смысл этого контекста. Например, Option - значение контекста означает, что значение может ес
data Tree t = Empty | Node t (Tree t) (Tree t)
Мы можем создать экземпляр Functor и использовать fmap :: (t -> a) -> Tree t -> Tree a
Но что, если вместо (т -> а) Я хочу (Дерево т -> а), так что я
В this answer на "Может ли монада быть комонадой?" мы видим, что Каждый CofreeComonad над Alternative functor дает монаду. Что было бы двойным в этом вопросе? Есть ли класс функторов, который автомати