问题标签 [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 投票
1 回答
236 浏览

list - 列表的另一种选择

现在有几次,我发现自己在定义:

当然,这是一个关联操作,空列表[]既是左标识又是右标识。它的功能类似于 Python 的or.

在我看来,这会做得很好(<|>),比(++)会更好。选择第一个非空列表感觉更像是我对命名类型类的期望,Alternative而不是连接列表。诚然,它并不适合MonadPlus,但我认为这是为救赎付出的小代价。我们已经拥有(++)(<>)在标准库中;我们是否需要另一个同义词,或者一个新功能(据我所知)会更有帮助?

起初我认为这可能是一个很好的Alternative例子ZipList,但是在这个答案之后对相关问题的讨论让我信服了。除了向后兼容和保持MonadPlus明智之外,对于当前实例而不是这个新实例还有什么论据?

0 投票
1 回答
116 浏览

haskell - 为什么 runConduit 不发送所有数据?

这是我正在解析的一些xml:

我一直在试图弄清楚如何让管道解析器拒绝记录,除非ows_Category它包含Weekly Report并且ows_Document不包含Spanish. 起初,我使用一个虚拟值(在parseDoc'下面)在解析后将它们过滤掉,但后来我意识到我应该能够使用Maybe(在下面其他相同的情况parseDoc下),以及用事件使用的层join折叠我的Maybetag'基于名称或属性匹配失败的解析器。它可以编译,但行为很奇怪,显然甚至没有尝试将某些元素发送到解析器!这怎么可能?

输出——注意parseDoc甚至没有发送一条记录(应该成功的记录,从 10.14 开始),而parseDoc'行为符合预期:

当我尝试通过删除与 相关的所有内容来进一步简化时ows_Category,突然parseDoc工作正常,确立了这个想法的合理性?当我改为删除与 相关的所有内容时ows_Document,问题仍然存在。

我怀疑我应该这样做requireAttrRaw,但我无法理解它并且找不到文档/示例。

这是否与Applicative- 现在我想起来了,它不应该基于检查价值观而失败,对吧?

更新

我从作者那里找到了该库先前版本的答案force "fail msg" $ return Nothing,其中包括在类似情况下的有趣之处,但它放弃了所有解析,而不是仅仅使当前解析失败。

这个评论表明我需要抛出一个异常,并且在源代码中,他们使用类似的东西lift $ throwM $ XmlException "failed check" $ Just event,但是就像这样force ... return Nothing,这会杀死所有的解析,而不仅仅是当前的解析器。我也不知道怎么弄到手event

这是一个合并的拉取请求,声称已经解决了这个问题,但它没有讨论如何使用它,只是它是“微不足道的”:)

回答

明确回答:

或者,因为在这种情况下可以独立检查属性值:

但后者留下了以下问题requireAttrRaw

  • 如果我们负责验证,我们不应该知道命名空间Name吗?
  • 为什么要requireAttrRaw送我们[Content]而不是两个Maybe Content,一个用于ContentTextContentEntity
  • 我们应该如何处理ContentEntity“For pass-through parsing”?
0 投票
1 回答
68 浏览

haskell - 无法理解 `MonadPlus` 类型类的不同实例的源代码

我正在浏览类型类的源代码MonadPlus及其实例,例如Maybe[]等等。我没有找到这些实例的方法 -mzeromplus定义。这是实例的源代码MaybeMonadPlus

在Real World Haskell 的第 15 章中,它说以下是 and 的标准定义mzeroand 。mplusMaybe[]

所以基本上我的问题是为什么会有区别?

0 投票
1 回答
62 浏览

haskell - 使用 Logic monad 回溯使用 exceptT 引发的异常

我想使用Logicmonad 来确保错误抛出代码(在 monad 堆栈中,包括ExcepT)在抛出错误时回溯。这是一个简单的例子:

这不会回溯;它不会产生任何结果。lift (msum ...)我可以通过取消选择操作(即使用而不是现在的普通msum调用)使其回溯。但是,出于各种原因,我希望能够在ExceptTmonad 中编写代码,并且基本上只是将MonadPlus实例从 Logic monad 提升到转换后的版本。我试图在这里编写一个自定义MonadPlus实例来完成此操作:

相同的代码也适用于该Alternative实例。但是,这实际上并没有帮助。它仍然没有回溯。这个实例有问题吗?有没有更好的方法来解决这个问题?我在尝试做一些没有意义的事情吗?在一天结束时,我总是可以举起所有东西,但宁愿避免这样做。

编辑:一直在搞砸一些。如果我MonadPlus使用上面的实例,则可以使用mplus,但如果像上面那样使用,则无法使用...msum

0 投票
1 回答
112 浏览

haskell - 如果 a 有 Monoid,是否可以为 Identity a 编写 Alternative 实例?

我想为新类型写一个Alternative实例Identity。骨架并不难:

但是,所有类型都无法实现。如果我有一个 Monoid 实例,那将很容易a

有没有办法告诉编译器我只想在Alternative内部类型具有 Monoid 实例时才定义实例?由于a没有在任何地方提及,我不能只使用约束Monoid a =>

0 投票
2 回答
171 浏览

haskell - “不可撤销”的应用函子的例子?

我宣布了一个关于应用函子的小组。从我们通常所说的“动作”来看,似乎这样的组可以使动作被撤消

作为一个群体,对于所有人x :: Undoable f => f a,以下法律应满足:

一些实例:

至少对我来说,这些例子是没有意义的。一些非实例包括:

  • Maybe:一旦成功,无论其他选择如何,它总是会成功。

  • []and ZipList: 选项总是添加不确定性,而不是从中减去。

    • ReadPReadPrec:如上所述。
  • IO: 从字面上看,这个实例将是一台时间机器。即使我们可以取现实与时空的商,也有一个实际的反例:一个新的IORef不能被遗忘。

有什么特别有趣的例子Undoable吗?

0 投票
3 回答
116 浏览

list - Haskell - 为什么要为 List 实施替代方案

我已经阅读了这篇文章的一些替代含义(很长)

引导我去那篇文章的原因是Alternative总体上了解。这篇文章给出了一个很好的答案,解释了为什么它是以它的方式实现的List

我的问题是:

  • 为什么要Alternative实施List呢?

是否可能有一种算法使用Alternative并且List可能会传递给它,所以定义它以保持一般性?

我想是因为Alternative默认情况下定义了someand many,这可能是其中的一部分,但是What are some and many useful for包含评论:

澄清一下somemany对于最基本的类型的定义,例如[]Maybe只是循环。所以虽然somemany对它们的定义是有效的,但它没有任何意义。

在上面的“什么是一些有用的”链接中,Will 对可能包含我的问题的答案的 OP 给出了答案,但是在我的 Haskelling 中,森林有点厚,看不到树木。

谢谢

0 投票
3 回答
716 浏览

haskell - 如何在 MonadPlus/Alternative 中组合然后分支

我最近写

这似乎很尴尬。我知道protolude(和其他一些包)定义

但即便如此,这一切都感觉有点手动。有没有一些我没见过的很好的模式来收紧它?

0 投票
1 回答
63 浏览

haskell - 打印 `Control.Alternative.Free.Alt` 类型

鉴于,

您将如何实际打印它?我明白了

来源:https ://blog.jle.im/entry/free-alternative-regexp.html