问题标签 [alternative-functor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Haskell IO 的 MonadPlus 定义
我只是写了一点代码,我想在 IO Monad 中使用保护功能。但是,对于 IO 没有 MonadPlus 的定义,这意味着我们不能在 IO 领域使用守卫。我已经看到了一个使用 MabyeT 转换器在 Maybe Monad 中使用警卫然后解除所有 IO 操作的示例,但如果我不需要,我真的不想这样做。
我想要的一些例子可能是:
我想知道是否有一种很好的方法可以通过 MonadPlus 的声明或其他方式在 IO Monad 中获取保护函数(或类似的东西)。或者我做错了;有没有更好的方法在上面的函数中编写帮助消息?谢谢。
(PS 我可以使用 if-then-else 语句,但它似乎以某种方式打破了这一点。更不用说对于很多选项它会导致大量的嵌套。)
haskell - Haskell:一些和很多
some
有什么many
用Control.Applicative.Alternative
?如果我写类似的东西some $ Just 42
,它似乎会导致无限递归,这似乎不是很有用......
haskell - Haskell - Control.Applicative.Alternative 有什么用?
我正在查看Applicative
Haskell 库中的课程并偶然发现Alternative
.
这门课有什么用?谷歌搜索没有发现任何特别有见地的东西。它似乎完全不合适,与 Applicative 包捆绑在一起。
有人可以发布一个可能的场景,你会使用这个类吗?
haskell - 有“单元”类吗?会有用吗?
是否存在具有单个单位值的类型的类(不确定此处的正确术语),即具有某些预定义值的类型?
...适用于所有 Monoids、MonadPlus 等。
我想这个类的另一个名字可能是Default
. 这对我来说最近两次有用。
可能没有说服力的例子:
这存在吗?其他人认为它可能有用吗?
haskell - 'Alternative' 类型类中的 'some' 和 'many' 函数
类型类中的功能some
和用途是什么?文档提供了一个我无法理解的递归定义。many
Alternative
haskell - `Control.Applicative.optional` 的非解析器示例
我最近偶然发现了通用Control.Applicative.optional
组合器:
但我对那个组合器没有太多实际用途;例如,当应用于诸如列表或Maybe
之类的纯函子时,结果似乎不是很有用:
...什么是更明智的应用optional
?
haskell - 类型类 MonadPlus、Alternative 和 Monoid 之间的区别?
标准库 Haskell 类型类MonadPlus
、Alternative
和Monoid
每个都提供了两个具有基本相同语义的方法:
- 空值:
mzero
、empty
或mempty
。 a -> a -> a
将类型类中的值连接在一起的运算符:mplus
、<|>
或mappend
。
这三个都指定了实例应遵守的这些法律:
因此,似乎这三个类型类都提供了相同的方法。
(Alternative
也提供some
and many
,但它们的默认定义通常就足够了,因此就这个问题而言,它们并不太重要。)
所以,我的疑问是:为什么有这三个极其相似的类?除了它们不同的超类约束之外,它们之间是否有任何真正的区别?
haskell - Haskell 提前退出状态单子(守卫?)
我有一个代表我的应用程序游戏状态的类型,对于这个问题,假设它很简单,例如:
我用 State monad 定义我的游戏逻辑。
我希望能够简单地丢弃一些输入
我想要一个看起来像这样的语法
如果它击中守卫,我希望它独自离开状态,并且在 block 中什么也不做。
我该怎么做?使用 MonadPlus似乎很接近可能,但我不确定我是否可以使用 mzero 来表示“返回你已经拥有的状态”。谢谢!
haskell - 对“替代”类型类的含义及其与其他类型类的关系感到困惑
我一直在浏览Typeclassopedia来学习类型类。我被困在理解中Alternative
(并且MonadPlus
,就此而言)。
我遇到的问题:
'pedia 说“Alternative 类型类适用于也具有幺半群结构的 Applicative 函子。” 我不明白——Alternative 不是意味着与 Monoid 完全不同的东西吗?即,我将 Alternative 类型类的要点理解为在两件事之间进行选择,而我将 Monoids 理解为关于组合事物。
为什么 Alternative 需要
empty
方法/成员?我可能是错的,但它似乎根本没有被使用......至少在我能找到的代码中。而且这似乎不符合课堂的主题——如果我有两件事,并且需要选择一个,我需要一个“空”做什么?为什么 Alternative 类型类需要一个 Applicative 约束,为什么它需要一种
* -> *
?为什么不只是有<|> :: a -> a -> a
?所有实例仍然可以以相同的方式实现......我认为(不确定)。它提供了 Monoid 没有的什么价值?MonadPlus
类型类的意义何在?我不能通过同时使用 aMonad
和来解锁它的所有优点Alternative
吗?为什么不直接放弃呢?(我确定我错了,但我没有任何反例)
希望所有这些问题都是连贯的......!
赏金更新:@Antal 的回答是一个很好的开始,但 Q3 仍然开放:Alternative 提供了 Monoid 没有提供的什么?我觉得这个答案不能令人满意,因为它缺乏具体的例子,以及关于 Alternative 的更高善意如何将其与 Monoid 区分开来的具体讨论。
如果要将 applicative 的效果与 Monoid 的行为结合起来,为什么不只是:
这对我来说更令人困惑,因为许多 Monoid 实例与 Alternative 实例完全相同。
这就是为什么我要寻找具体的例子来说明为什么 Alternative 是必要的,以及它与 Monoid 有何不同——或意味着不同的东西。
haskell - 什么是 Monad 的一个例子,它是一个 Alternative 但不是 MonadPlus?
Edward Kmett在回答“类型类、和? 之间的区别”</a> 问题时说MonadPlus
Alternative
Monoid
此外,即使
Applicative
是 的超类Monad
,你最终还是需要这个MonadPlus
类,因为服从不足以证明
因此,声称某物是 a
MonadPlus
比声称它是 强Alternative
。
很明显,任何不是monad 的 applicative functor 都会自动成为 an which is not a的一个例子,但 Edward Kmett 的回答暗示存在一个monad,它是 an但不是 a :它并且会满足定律,1但不是法律。2 我自己想不出这样的例子;有人知道吗?Alternative
MonadPlus
Alternative
MonadPlus
empty
<|>
Alternative
MonadPlus
1我无法找到一组Alternative
法律的规范参考,但我列出了我认为它们大约是我对“类型类的含义及其与其他类型的关系感到困惑”问题的答案的一半类”</a>(搜索短语“右分布”)。我认为应该遵守的四项法则是:Alternative
- (的)右分配
<*>
:(f <|> g) <*> a = (f <*> a) <|> (g <*> a)
- 右吸收(对于
<*>
):empty <*> a = empty
- 左分布(的
fmap
):f <$> (a <|> b) = (f <$> a) <|> (f <$> b)
- 左吸收(对于
fmap
):f <$> empty = empty
我也很乐意接受获得一套更有用的Alternative
法律。
2我知道法律是什么有些含糊不清MonadPlus
;我对使用左分布或左捕获的答案感到满意,尽管我更喜欢前者。