问题标签 [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 - 为什么安全的偏函数使用 Maybe 而不是泛化到任何 Monad
我知道有些人认为fail
这是一个错误,我明白为什么。(似乎 MonadPlus 是用来代替它的)。fail
但只要它存在,部分函数使用andpure
而不是Just
and似乎是有意义的Nothing
。因为这将允许您做您当前可以做的所有事情以及更多,所以类似的东西safeHead
可以给您传统的Just
/Nothing
或者您可以返回[x]
/ []
。
从我所读到的内容MonadPlus
来看,它似乎比使用fail
. 但我对它的了解不够肯定,而且它也可能涉及拉入 Prelude,这可能是一个好主意,但会比仅使用fail
.
所以我想我的问题是为什么部分函数不使用fail
OR MonadPlus
,两者似乎都比使用具体类型更好。
haskell - 是否有“可能返回 mzero”的名称?
有固定的名称maybe mzero return
吗?
它具有以下类型:
并转换为Nothing
失败和.Just a
return a
haskell - 在 Haskell 中,是否有-operator 的抽象?
我刚刚发现自己正在编写这段代码:
其中mA :: Maybe a
, mB :: Maybe a
,c :: a
和x :: a
. 基本上,代码说:选择第一个不是empty
并且默认为c
. <?>
您可以将其称为“reverse Maybe monad”,类似于pure
.
等效地,我可以写
但我对无可辩驳的模式感到不舒服。或者,当然,
因为fromMaybe === flip <?>
.
运算符的<?>
灵感来自 parsec。当我发现自己定义了这样的实用函数时,我总是会产生怀疑,但我在任何地方都找不到这种默认行为。
显然Alternative
并Applicative
不够强大。
我错过了一个类型类吗?
haskell - 为什么Alternative的一些和许多是haskell中的无限递归函数
我正在查看Alternative
haskell 中的 typeclass,当我发布这个时,我正在 ghci 中使用它
它挂了,我查看了Alternative的源代码,Alternative的一些和许多默认定义是这样的:
很明显some_v
andmany_v
是间接无限递归的,并且它们不是用 and 来定义empty
的<|>
。
如果它们必须由实例定义,那么它们不应该有默认定义,对吧?并且由于Maybe
没有定义它们,因此我上面的声明被挂起,这对我来说似乎很奇怪,因为文档中没有提到它。
那么为什么他们被这样定义呢?有什么我想念的吗?
haskell - Haskell:如何创建一个不允许、一个或两个 Applicative 的函数?
Control.Applicative.optional 允许处理零个或一个 Applicatives。many & some 分别允许 0 或更多,或 1 或更多。我想创建一个专门处理零、一或二的函数。签名可能与许多/一些一样,即
我觉得这应该很简单,但我已经玩了一段时间了,无法让它工作。任何指针将不胜感激。
parsing - 从头开始解析复数
data CI = CI Int Int
给定一个表示复数的数据类型,我想为 CI 构建一个解析器,它可以转换"a"
为CI a 0
和。例如,我想要一个返回值的函数(理想情况下,类似的东西也可以)。我还想让 CI 成为."(a,b)"
CI a b
parseCI
runParser parseCI "(1,2)"
[(CI 1 2, "")]
read
我想使用下面代码中的函数和定义来做到这一点(基本上,没有任何先进的东西,比如 Parsec),但我不知道从哪里开始。一些让我走上正轨的起始代码和/或提示会很有帮助。我不是在寻找完整的答案,因为我想自己弄清楚。
parsing - 使用解析器组合器实现 try (look-ahead) 和 untilStop
我正在按照本教程在 Haskell 中实现 Parser Combinators (a la parsec)。我实现了这篇文章中提到的所有 NanoParsec。
几个小时以来,我正在努力实施
我实现的最佳尝试untilStop
看起来有点像这样,但不太奏效
我不知道如何组合s
,i
并且递归调用没有失败,因为string
没有把所有东西放在一起。
我想一旦我有了try
,untilStop
应该是直截了当的。有人可以为我指出正确的方向或实施它(try
)吗?
现在我还在学习 Monads、Applicative 和相关的东西,所以试图理解 parsec 的源代码对我来说是不可能的。
haskell - Haskell 函数的作用取决于 monad 类型
我正在尝试实现一个通常将列表的第一个元素放入 monad 的函数,但如果 monad 是一个列表,它会返回整个列表:
应该返回Just 1
,并且
应该返回[1,2,3]
。
有任何想法吗?
haskell - 为什么 `guard` 没有用 MonadPlus 约束定义?
我目前正在阅读 wikibooks 中的 Alternative/MonadPlus 类型类。它很好地描述了差异。然而,一个令人费解的部分是guard
我假设的函数用于“短路”计算。(我对吗?)
该函数guard
虽然在中定义,但Control.Monad
有一个Alternative
约束,如下所示(链接)。
但是上面的文章提到只MonadPlus
需要执行左零和右零定律(因此更强的主张)。
鉴于guard
函数的目的,不应该用MonadPlus
约束来定义它吗?guard
如果应该“短路”计算,我们是否不需要更强大的法律?我很好奇具体设计选择背后的原因。
ps:我不知道除了“短路”这个词之外,还有什么更好的方式来描述“取消前期计算”的行为?
haskell - 会不会是 (Alternative f, Foldable f) => Monad f?
以下类型检查:
这实际上是一个有效的Monad
实例吗?如果是,为什么不使用它?如果不是,它是否违反了任何法律或其他法律?我没有证明这个规律成立,但我也找不到反例。