gpt4 book ai didi

monads - "a monoid on applicative functors"与 "a monoid in the category of endofunctors"有何不同?

转载 作者:行者123 更新时间:2023-12-04 01:34:35 25 4
gpt4 key购买 nike

也许这些陈述都不是绝对精确的,但是单子(monad)通常被定义为“内仿函数类别中的一个幺半群”; Haskell Alternative 被定义为“应用仿函数上的幺半群”,其中 applicative functor是一个“强松弛幺半函数”。现在,这两个定义听起来与无知者(我)非常相似,但效果却大不相同。替代的中性元素具有类型 f a因此是“空的”,对于 monad 的类型为 a -> m a因而有“非空”之意;替代操作的类型为 f a -> f a -> f a , monad 的操作类型为 (a -> f b) -> (b -> f c) -> (a -> f c) .在我看来,真正重要的细节是在 endofunctors 与 over endofunctors 的类别中,尽管替代方案中的“强松散”细节可能很重要;但这就是我感到困惑的地方,因为至少在 Haskell 中,monads 最终成为替代品:而且我发现我还没有对这里的所有细节有一个精确的分类理解。

如何准确表达alternative 和monad 之间的区别是什么,使得它们都是与内仿函数相关的幺半群,而一个具有“空”中性元素,而另一个具有“非空”中性元素?

最佳答案

为了用一些 Haskell 代码补充其他答案,以下是我们如何表示 Day 卷积幺半群结构 @Bartosz Milewski 指的是:

data Day f g a = forall x y. Day (x -> y -> a) (f x) (g y)

单位对象为仿函数 Identity .

然后我们可以根据这个幺半群结构将应用类重新表述为一个幺半群对象:
type f ~> g = forall x. f x -> g x
class Functor f => Applicative' f
where
dappend :: Day f f ~> f
dempty :: Identity ~> f

您可能会注意到这与其他熟悉的幺半群对象是如何押韵的,例如:
class Functor f => Monad f
where
join :: Compose f f ~> f
return :: Identity ~> f

或者:
class Monoid m
where
mappend :: (,) m m -> m
mempty :: () -> m

稍稍眯起眼睛,您也许还可以看到 dappend只是 liftA2 的包装版本,同样 demptypure .

关于monads - "a monoid on applicative functors"与 "a monoid in the category of endofunctors"有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008852/

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