问题标签 [maybe]

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 投票
2 回答
172 浏览

haskell - 错误处理和单子?

我试图了解如何应用 Haskel 的 Maybe-idiom。我正在阅读http://en.wikibooks.org/wiki/Haskell/Understanding_monads/Maybe这表明字典中的查找可能会返回一个Maybe和该值通过>>=运算符传播。

来自 URL 的示例:

如果我们想在第三次查询中使用政府数据库查询的结果(比如我们想查询他们的注册号,看看他们是否欠任何汽车税),那么我们可以扩展我们的 getRegistrationNumber 函数:

或者,使用 do-block 样式:

问题:

我如何处理错误处理?我认为大多数代码将受益于告诉哪里出了问题。而不是仅仅报告“在电话簿或政府数据库中找不到 John Doe”,它应该报告哪个资源有问题。

0 投票
1 回答
104 浏览

list - haskell - 包含可能不起作用的列表的函数

我有以下功能:

该函数接受 2 个列表。ws 是 xs 中我想更改为 0 的值的索引。

出于某种原因,它适用于某些情况,而不适用于其他情况:

[1,2,0,0] -- 正确

[1,2,0,4] -- 正确

[1,1,2,1,3] -- 应该是 [1,1,2,0,3]

谁能解释这是为什么?

提前致谢!

0 投票
2 回答
485 浏览

haskell - 使用可能预期的 do 块中的编译错误

这是我的代码:

这是我得到的错误(在指示的行上):

怎么了?我虽然<-会做 IO 动作并将结果放在 m 中?为什么它期望一个Maybethen?

0 投票
3 回答
561 浏览

f# - 嵌套布尔测试的 F# 计算表达式?

我认为我对 F# monads(工作流)有足够的了解,我在我的代码中看到了一些地方实现它们是有意义的。

例如,我有一个具有多个嵌套 if/then 的函数,即只要数据一路通过某些“测试”,该函数就应该继续。

我熟悉“可能”单子,但在我见过的所有示例中,它都被编码为对let!绑定进行操作,而我没有这样做。我希望有人可以为我提供一个为嵌套布尔测试而不是let绑定量身定制的“可能”工作流程示例。

0 投票
1 回答
201 浏览

list - 标准 Haskell 函数 :: (a -> Maybe a) -> a -> [a]

我定义了一个函数

这个功能看起来很明显,我不敢相信它不是标准的。它是否在某个模块中定义(我已经检查过 Data.Maybe)?

0 投票
2 回答
2881 浏览

haskell - 使用 Maybe a、IO a 和 MaybeT IO a

我正在编写一个快速响应式系统,其中包含了 Maybe a、IO a 和 MaybeT IO a 的各种组合,并且有很多东西需要考虑。一些没有无效输入的 IO 操作(因此不包含在 MaybeT 中),一些是(并返回 MaybeT IO a)一些不是 IO 操作但可能失败,因此返回 Maybe a,还有一些这只是简单的值,并且开始似乎我必须记住过度组合<$>, Just, fmap, MaybeT, lift, =<<,并且return只是为了使所有内容都成为正确的类型。有没有更简单的方法来管理这个或推理我需要使用哪些函数来获取我需要的值?还是我只希望随着时间的推移我会变得更好?这是我的例子:

我必须说,我对缺乏简洁性感到失望,即使我删除了类型提示,我也可能会编写一个更短的函数来在 C# 或 python 中做同样的事情

0 投票
1 回答
132 浏览

haskell - MaybeT 编译错误

错误:

和代码:

如果有人可以帮助我使用 MaybeT 变压器,我将不胜感激。我不知道如何让这个工作。

0 投票
2 回答
204 浏览

haskell - 使用 Maybe's 从 ADT 链中检索值

我有一些 ADT,每个 ADT 可能包含或不包含另一个 ADT。我需要从较低级别检索数据,并且我正在编写一些非常重复的代码,我确信这些代码可以被消除。我在 Real World Haskell 和“Learn You a Haskell For Great Good”中查看了一些示例代码,但我不太明白。这是一个关于 ADT 被遗漏的无关细节的示例。

要从 StreetAddress 中检索邮政编码,我一直这样做:

随着对象链的深度增加,代码的重复性也会增加。肯定有更好的办法。想法?参考?我在 StackOverflow 上找不到类似的问题,但我相信它一定在这里......这似乎是一个必须被问到的简单问题。

谢谢,蒂姆

0 投票
1 回答
295 浏览

haskell - Snap 框架 - 重复可能会整理

我正在将我(有限的)Haskell 知识应用到 Snap Web 框架中,看看我能构建什么。我正在尝试获取一个(可能不存在的)参数并将其解析为一个 int。显然“也许”是我想要的。

在下面的代码中AppHandler定义为Handler App App(我认为具有两个状态级别的 monad,尽管我现在在教程中找不到任何东西)。B8ByteString.Char8readInt返回_Maybe(Int,ByteString)

下面的代码有效,但大概应该有一种方法将可能的调用链接在一起(大概是通过MaybeT,因为我已经在 Monad 中了)。链接特别有意义,因为下一步将根据解析的 id 从数据库中获取一行,所以当然这也会返回一个“Maybe a”。显然,这是一种非常普遍的模式。

我尝试应用 runMaybeT 但坦率地说,我没有真正了解需要更改的类型,我正在随机更改以希望错误消失。它没有,尽管它改变并从一行到另一行移动。

我将此视为进步,因为我现在完全迷失在一个比我开始探索 Haskell 时更高的水平......


编辑:遍历kosmikus的答案,希望我已经理解了...

我想我正试图朝着这个方向努力,但一直试图getParam在与其他步骤相同的块内强行。

在第 3 行,对 getParam 的调用发生在 AppHandler 中。我们有 raw_param 这是一个Maybe ByteString. 在第 5 行,我们在一个嵌套的 do 中,所以绑定(?)发生在 Maybe monadparam中,要么是 aByteString要么我们得到Nothing,其余的 do 块将短路*。同样在第 6 行,p 要么是 Int,要么我们短路。

一切顺利,第 6 行p包含一个 Int (比如 42),第 7 行将返回Just 42. 回到第 4 行,变成AppHandler (Just 42). 现在不需要关心 AppHandler 是什么 - 类型都很高兴。

这里有一些变体也可以进行类型检查,并且可能证明对那些试图思考这一点的人有用。

在这种情况下,非执行变体实际上看起来更简单。唯一需要考虑的是<$>,如果我没看错的话,它是公正fmap的,并且适用于fstMaybe (Int,ByteString)所以我们可以得到Maybe Int


*如果我理解正确,则必须访问后续每一行,但只返回 Nothing,因此实际上不是 goto 样式的快捷方式。 Edit2:请参阅下面的 kosmikus 评论 - 懒惰 + 右嵌套意味着我们不需要评估每一行。

0 投票
1 回答
232 浏览

haskell - Haskell 中的模糊模式匹配调度

我正在在一棵树上编写一些解析代码。(即斯坦福 nlp 依赖树)

基本上我有这样的功能:

如果节点有一条nsubj和一条dobj边从它出来,我想要的是分派到第一条规则。我不在乎它可能还有什么。

显然,我的示例函数没有这样做,因为它要求边缘以正确的顺序出现,并且如果存在更多边缘,它将不匹配。

一种方法是使用警卫来提高表现力,我可以这样做:

但这要画得多,我什至不了解目标节点。

有没有一种标准方法可以在像我这样的图上编写模式匹配解析器?或者是否有一些基于 Maybe monad 的魔法..?