gpt4 book ai didi

haskell - cofree comonad 的可展开实例

转载 作者:行者123 更新时间:2023-12-02 14:19:03 26 4
gpt4 key购买 nike

我试图找出 unfold/coiter 之间的区别来自Control.Comonad.Cofreeunfold/ana来自Data.Control.Fixedpoint 。 Hackage 库分别是。 freerecursion-schemes .

CofreeFix似乎是表兄弟,我正在尝试弄清楚两者都可以做什么,以及只有其中一个可以做什么。

我可以写一个 Foldable 的实例对于 Cofree这样我就可以申请cata到从 unfold/coiter 获得的免费 monad :

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

这可能吗?

最佳答案

不,一般情况下您不能为 Cofree 编写此函数。考虑f ~ Proxy(其中data Proxy a = Proxy):

xembed :: Proxy (Cofree Proxy a) -> Cofree Proxy a
-- i.e.
xembed :: () -> a

必须从不知道什么地方得到一个a

但是,您可以为 Free 编写 xembed:wrap::f (Free f a) -> Free f a。同样,一般情况下您也不能编写 xproject::Free fa -> f (Free fa)

关于haskell - cofree comonad 的可展开实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com