问题标签 [monadplus]
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 - 当 Exc 是成员时 Control.Eff 的 MonadPlus 实例
在单子变换器中,我们有
在可扩展效果中,没有这样的东西
我试过实现它,但徒劳无功。这是我到目前为止所拥有的:
有2个问题:
对于
mzero
,GHC 抱怨如下:为什么 GHC 不
e0
匹配e
?答案(在评论中提供):开启
ScopedTypeVariables
for
mplus
,undefined
应该换成 的反函数runExc
,但是在extensible-effects的API中找不到。我错过了什么 ?
理由:我希望能够在a <|> b
范围内写作Member (Exc e) r => Eff r a
,意思是:
- 尝试
a
- 如果
a
抛出ea
,尝试b
- 如果
b
抛出eb
,则抛出mappend ea eb
这需要一个Alternative
实例,这就是为什么我MonadPlus
首先尝试实现一个实例。
注意:我使用的是 GHC 7.8.3 。
预先感谢您的帮助。
haskell - MonadPlus 的错误处理
在尝试学习一些 Haskell 时再次陷入困境。我正在尝试做的是head/tail
为具有错误处理的列表实现一种组合方法。签名必须如下所示:
但是,我对使用 MonadPlus 进行错误处理的方式有点迷茫。我尝试了以下方法:
但它抱怨:预期类型:m(a,[a])实际类型:也许(a,[a])。只是为了好玩,我也试过:
但这不仅看起来多余,而且也不起作用。
任何提示表示赞赏!
haskell - 无法理解 monad 的错误处理
我正在尝试构建一个函数,它返回列表中的单个元素。该列表是元组的一部分Maybe (Int,[Int])
。
如果列表不包含任何元素,我想返回一个错误。如果列表正好包含 1 个元素,我想将该元素作为 Monad 返回。如果列表包含超过 1 个元素,我想返回一个错误。
我有点迷茫,看不出如何让这个相当简单的事情发挥作用。这是我到目前为止所拥有的:
不幸的是,我在尝试编译时收到的错误消息对我作为初学者来说绝对没有用..
非常感谢任何帮助!
haskell - mzero 如何匹配保护类型签名?
我很难理解如何guard
工作。为什么要进行类型检查?不能mzero
返回一些m a
地方a /= ()
吗?
haskell - 在 Aeson 解析器中展平 MonadPlus
我不确定我是否在这里找错了树,但我有一个 AesonFromJSON
定义,看起来相当庞大,我想知道它是否可以变成更简洁的东西。如果 URI 的嵌套解析失败,我想缩短整个对象的解析。
parseURI
isparseURI :: String -> Maybe URI
和 both的类型Maybe
以及Parser
具有MonadPlus
实例。有没有办法将两者直接组合并在最后删除丑陋的case语句?
haskell - 我们可以用 Alternative 做什么,但不能用 Monoid 做什么?
我读了为什么是 MonadPlus 而不是 Monad + Monoid?我理解理论上的区别,但我无法弄清楚实际的区别,因为对于 List 它看起来是一样的。
是的。也许有不同的实现
但是我们可以像 Alternative 一样实现 Maybe Monoid
那么,有人可以展示解释Alternative和Monoid之间实际区别的代码示例吗?
haskell - 是否存在渐近优化一系列 MonadPlus 操作的 Codensity MonadPlus?
最近有一个关于DList
<->[]
与Codensity
<->之间关系的问题Free
。
这让我思考是否有这样的事情MonadPlus
。Codensity
monad 仅对 monadic 操作提高渐近性能,对mplus
.
此外,虽然曾经有Control.MonadPlus.Free
,但它已被删除以支持FreeT f []
. 而且由于没有明确的 free MonadPlus
,我不确定如何表达相应的improve
变体。也许像
?
更新:我尝试使用回溯LogicT
monad 创建这样的 monad,它似乎以类似于以下方式定义Codensity
:
并且适用于回溯计算,即MonadPlus
.
然后我定义lowerLogic
了,类似lowerCodensity
如下:
然后,补充相应的MonadFree
实例后
可以定义
但是,它有些不对劲,从我最初的实验看来,对于某些示例,k
它与improvePlus k
. 我不确定,如果这是一个基本的限制,LogicT
并且需要一个不同的、更复杂的 monad,或者只是我lowerLogic
错误地定义(或其他东西)。
haskell - 如何使用自由(或更自由)的单子对采用单子参数的动作进行编码?
大多数 monadic 函数采用纯参数并返回一个 monadic 值。但是有一些也需要单子参数,例如:
他们每个人似乎都提出了一个不同的问题,我无法掌握如何使用自由单子对这些动作进行编码的通用方法。
在两者中
finally
,forkIO
问题在于一元参数的类型与结果不同。但是免费的人需要它们是相同的类型,因为IO a
被编码类型的类型变量替换,比如data MyFunctor x = Finally x x x
,它只会 encodeIO a -> IO a -> IO a
。在33 行 Haskell 代码中从零到协作线程作者
Fork next next
用来拳头实现然后用它来实现
其中输入和输出具有不同的类型。但我不明白这是使用某些过程得出的,还是只是一个适用于这个特定目的的临时想法。
mplus
特别令人困惑:天真的编码为分布
>>=
,建议更好的实现更复杂。并且从 free 中删除了 free 的本机MonadPlus
实现。在更自由的情况下,它是通过添加来实现的
为什么是
MPlus
NonDetEff Bool
而不是NonDetEff a a
?除了使用CoYoneda 函子之外,有没有办法让它与Free
我们需要数据类型成为函子一起工作?- 因为
forkExec
我根本不知道如何进行。
haskell - Haskell 解析器、Monad 和 MonadPlus
这是我的解析器代码。显然我已经完成了“旧方式”并且无法真正让它以新方式工作。您能告诉我需要修复哪些问题才能使其正常工作吗?我阅读了这篇文章(https://wiki.haskell.org/Functor-Applicative-Monad_Proposal)并尝试更改我的代码,但我认为我在这里做错了。
我得到的编译错误:
编辑 //
现在的代码:
错误: