gpt4 book ai didi

haskell - 为什么 'Alternative' 没有 'Control.Applicative.Const' 实例

转载 作者:行者123 更新时间:2023-12-03 22:38:38 24 4
gpt4 key购买 nike

有实例Monoid a => Monoid (Const a b)对于 Const 来自 Control.Applicative 的仿函数.还有一个实例Monoid m => Applicative (Const m) .

因此,我希望还有一个实例 Monoid m => Alternative (Const m)Monoid 的一致.这只是一个应该修复的遗漏,还是有更深层次的原因?

最佳答案

我相信有更深层次的原因。虽然 Alternative 似乎没有规范的规则集, 为了 Alternative说得通,Alternative 之间肯定应该有关系。及其Applicative操作(否则它只是一个任意的幺半群。)

This answerConfused by the meaning of the 'Alternative' type class and its relationship to other type classes说明这些法律

  1. Right distributivity (of <*>):  (f <|> g) <*> a = (f <*> a) <|> (g <*> a)
  2. Right absorption (for <*>):  empty <*> a = empty
  3. Left distributivity (of fmap):  f <$> (a <|> b) = (f <$> a) <|> (f <$> b)
  4. Left absorption (for fmap):  f <$> empty = empty


这对我来说很有意义。粗略地说, empty<|>pure<$>/ <*> 0 和 + 对应于 1 和 *。

现在如果我们添加实例 Monoid m => Alternative (Const m)Monoid 的一致/ Applicative ,右法不成立。

例如,2.失败,因为
empty <*> (Const x)
= Const mempty <*> Const x -- by the suggested definition of Alternative
= Const $ mempty `mappend` x -- by the definition of <*> for COnst
= Const x -- by monoid laws

不等于 empty = Const mempty .同样,1. 失败,一个简单的反例是设置 f = Const (Sum 1); g = Const (Sum 1) ; a = Const (Sum 1) .

也可以看看:
  • What are the relations between Alternative, MonadPlus(LeftCatch) and MonadPlus(LeftDistributive)?
  • What’s an example of a Monad which is an Alternative but not a MonadPlus?
  • 关于haskell - 为什么 'Alternative' 没有 'Control.Applicative.Const' 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681260/

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