gpt4 book ai didi

haskell - Monoid vs MonadPlus

转载 作者:行者123 更新时间:2023-12-03 11:07:14 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why MonadPlus and not Monad + Monoid?

(4 个回答)


6年前关闭。




我对 MonadsMonoids 都很陌生,最近还了解了 MonadPlus 。据我所见,MonoidMonadPlus 都提供了一种具有关联二元运算和标识的类型。 (我称之为数学术语中的半群。)那么 MonoidMonadPlus 之间有什么区别?

最佳答案

一个 semigroup是配备关联二元运算的结构。一个 monoid是具有二元运算的单位元的半群。

单子(monad)和半群

每个 monad 都必须遵守 the monad laws .对于我们的例子,重要的是结合律。使用 >>= 表示:

(m >>= f) >>= g     ≡   m >>= (\x -> f x >>= g)

现在让我们应用这个定律来推断 >> :: m a -> m b -> m b 的关联性。 :
(m >> n) >> p       ≡ (m >>= \_ -> n) >>= \_ -> p
≡ m >>= (\x -> (\_ -> n) x >>= \_ -> p)
≡ m >>= (\x -> n >>= \_ -> p)
≡ m >>= (\x -> n >> p)
≡ m >> (n >> p)

(我们选择 x 使其不会出现在 mnp 中)。

如果我们专业 >>到类型 m a -> m a -> m a (用 b 代替 a ),我们看到 对于任何类型a操作>>m a 上形成一个半群. 因为对于任何 a 都是如此,我们得到一类由 a 索引的半群.但是,它们通常不是幺半群——我们没有 >> 的标识元素。 .

MonadPlus 和类半群
MonadPlus增加了两个操作, mplusmzero . MonadPlus laws明确声明 mplusmzero必须在 m a 上形成一个幺半群对于任意 a .再一次,我们得到了一类由 a 索引的幺半群。 .

注意 MonadPlus 之间的区别和 Monoid : Monoid表示某些单一类型满足幺半群规则,而 MonadPlus说所有可能的 a类型 m a满足幺半群定律。这是一个更强大的条件。

所以一个 MonadPlus实例形成两种不同的代数结构: 一类具有 >> 的半群和一类具有 mplus 的幺半群和 mzero . (这并不少见,例如大于零的自然数集 {1,2,...}+ 形成一个半群,并与 ×1 形成一个幺半群。)

关于haskell - Monoid vs MonadPlus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056881/

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