问题标签 [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.

0 投票
3 回答
2209 浏览

haskell - Haskell IO 的 MonadPlus 定义

我只是写了一点代码,我想在 IO Monad 中使用保护功能。但是,对于 IO 没有 MonadPlus 的定义,这意味着我们不能在 IO 领域使用守卫。我已经看到了一个使用 MabyeT 转换器在 Maybe Monad 中使用警卫然后解除所有 IO 操作的示例,但如果我不需要,我真的不想这样做。

我想要的一些例子可能是:

我想知道是否有一种很好的方法可以通过 MonadPlus 的声明或其他方式在 IO Monad 中获取保护函数(或类似的东西)。或者我做错了;有没有更好的方法在上面的函数中编写帮助消息?谢谢。

(PS 我可以使用 if-then-else 语句,但它似乎以某种方式打破了这一点。更不用说对于很多选项它会导致大量的嵌套。)

0 投票
1 回答
2415 浏览

haskell - Haskell:一些和很多

some有什么manyControl.Applicative.Alternative?如果我写类似的东西some $ Just 42,它似乎会导致无限递归,这似乎不是很有用......

0 投票
2 回答
3659 浏览

haskell - Haskell - Control.Applicative.Alternative 有什么用?

我正在查看ApplicativeHaskell 库中的课程并偶然发现Alternative.

这门课有什么用?谷歌搜索没有发现任何特别有见地的东西。它似乎完全不合适,与 Applicative 包捆绑在一起。

有人可以发布一个可能的场景,你会使用这个类吗?

0 投票
3 回答
271 浏览

haskell - 有“单元”类吗?会有用吗?

是否存在具有单个单位值的类型的类(不确定此处的正确术语),即具有某些预定义的类型?

...适用于所有 Monoids、MonadPlus 等。

我想这个类的另一个名字可能是Default. 这对我来说最近两次有用。

可能没有说服力的例子:

这存在吗?其他人认为它可能有用吗?

0 投票
2 回答
2640 浏览

haskell - 'Alternative' 类型类中的 'some' 和 'many' 函数

类型类中的功能some和用途是什么?文档提供了一个我无法理解的递归定义。manyAlternative

0 投票
1 回答
331 浏览

haskell - `Control.Applicative.optional` 的非解析器示例

我最近偶然发现了通用Control.Applicative.optional组合器:

但我对那个组合器没有太多实际用途;例如,当应用于诸如列表或Maybe之类的纯函子时,结果似乎不是很有用:

...什么是更明智的应用optional

0 投票
1 回答
6867 浏览

haskell - 类型类 MonadPlus、Alternative 和 Monoid 之间的区别?

标准库 Haskell 类型类MonadPlusAlternativeMonoid每个都提供了两个具有基本相同语义的方法:

  • 空值:mzeroemptymempty
  • a -> a -> a将类型类中的值连接在一起的运算符: mplus<|>mappend

这三个都指定了实例应遵守的这些法律:

因此,似乎这三个类型类都提供了相同的方法。

Alternative也提供someand many,但它们的默认定义通常就足够了,因此就这个问题而言,它们并不太重要。)

所以,我的疑问是:为什么有这三个极其相似的类?除了它们不同的超类约束之外,它们之间是否有任何真正的区别?

0 投票
2 回答
1206 浏览

haskell - Haskell 提前退出状态单子(守卫?)

我有一个代表我的应用程序游戏状态的类型,对于这个问题,假设它很简单,例如:

我用 State monad 定义我的游戏逻辑。

我希望能够简单地丢弃一些输入

我想要一个看起来像这样的语法

如果它击中守卫,我希望它独自离开状态,并且在 block 中什么也不做

我该怎么做?使用 MonadPlus似乎很接近可能,但我不确定我是否可以使用 mzero 来表示“返回你已经拥有的状态”。谢谢!

0 投票
5 回答
9110 浏览

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 有何不同——或意味着不同的东西。

0 投票
1 回答
1041 浏览

haskell - 什么是 Monad 的一个例子,它是一个 Alternative 但不是 MonadPlus?

Edward Kmett在回答“类型类? 之间的区别”</a> 问题时说MonadPlusAlternativeMonoid

此外,即使Applicative是 的超类Monad,你最终还是需要这个MonadPlus类,因为服从

不足以证明

因此,声称某物是 aMonadPlus比声称它是 强Alternative

很明显,任何不是monad 的 applicative functor 都会自动成为 an which is not a一个例子,但 Edward Kmett 的回答暗示存在一个monad,它是 an但不是 a :它并且会满足定律,1但不是法律。2 我自己想不出这样的例子;有人知道吗?AlternativeMonadPlusAlternativeMonadPlusempty<|>AlternativeMonadPlus


1我无法找到一组Alternative法律的规范参考,但我列出了我认为它们大约是我对“类型类的含义及其与其他类型的关系感到困惑”问题的答案的一半类”</a>(搜索短语“右分布”)。我认为应该遵守的四项法则是:Alternative

  1. (的)右分配<*>  (f <|> g) <*> a = (f <*> a) <|> (g <*> a)
  2. 右吸收(对于<*>):  empty <*> a = empty
  3. 左分布(的fmap):  f <$> (a <|> b) = (f <$> a) <|> (f <$> b)
  4. 左吸收(对于fmap):  f <$> empty = empty

我也很乐意接受获得一套更有用的Alternative法律。

2我知道法律是什么有些含糊不清MonadPlus;我对使用左分布或左捕获的答案感到满意,尽管我更喜欢前者。