我试图找出unfold/coiter
fromControl.Comonad.Cofree
和unfold/ana
from之间的区别Data.Control.Fixedpoint
。黑客库分别是。free
和recursion-schemes
。
Cofree
似乎是堂兄弟,Fix
我试图弄清楚两者都有什么可能,只有其中一个有什么可能。
Foldable
我可以写一个for的实例,Cofree
这样我就可以申请cata
一个从以下位置获得的免费 monad unfold/coiter
:
type instance Base (Cofree f a) = f
instance Functor f => Foldable (Cofree f a) where
project = unwrap
但我无法构造一个Unfoldable
实例:
instance Functor f => Unfoldable (Cofree f a) where
embed = xembed
xembed :: Functor f => f (Cofree f a) -> Cofree f a
xembed = undefined
有可能吗?