- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
也许这些陈述都不是绝对精确的,但是单子(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
的包装版本,同样
dempty
的
pure
.
关于monads - "a monoid on applicative functors"与 "a monoid in the category of endofunctors"有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008852/
我是一名优秀的程序员,十分优秀!