问题标签 [do-notation]

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 回答
149 浏览

haskell - Haskell:'做[1,2,3]; ["hello"]' 行为说明

所以我试图准确地理解 Haskelldo符号是如何工作的。我知道它与 monads 一起使用,并且它基本上扩展(因为它实际上是语法糖)成与 bind ( >>=) 或 then ( >>) 连接的匿名函数,如此处所示https://en.wikibooks.org/wiki/Haskell /Syntactic_sugar#Do_notation

但是我的问题是为什么下面的命令

返回

我知道数组实际上是 monad(并且字符串是字符数组),但我看不出这是如何导致上述行为的。

0 投票
2 回答
211 浏览

haskell - 使用 do 表示法对 Haskell 和 Frege 中的基本解析器进行排序

我尝试在 Graham Hutton 的“在 Haskell 中编程”中运行第 8 章中关于功能解析器的片段,无论是 inghci还是frege-repl. 我无法使用do语法对解析器进行排序。我在 Frege 中有以下定义(Haskell 版本仅与item不打包和解包的更简单定义不同,String并且Char与书中相同):

p'适用于ghcifrege-repl。但是,在尝试加载模块时,我收到了这些消息。首先来自ghci

frege-repl甚至更不友好,因为它只是用错误堆栈跟踪将我从 repl 中踢了出来:

我的直觉是我需要一些不同的东西>>=return或者我应该告诉编译器一些东西。或者也许我需要将p定义放入Statemonad?

0 投票
2 回答
650 浏览

maybe - 如何从 PureScript 中的 do 表示法返回 Maybe 值?

我试图从一个使用 do 表示法的函数返回一个 Maybe 值,但我似乎无法让它工作。这个函数需要一个字符串(“文件名”)和一个要搜索的路径...

在哪里...

但是我不断收到错误“Count not match Type Array with type Maybe”,所以看起来编译器期望 do 表示法返回一个数组。我将如何返回一个可能的值?

0 投票
2 回答
317 浏览

haskell - 自定义数据类型与参数的比较

我正在学习 Haskell 并尝试实现这个程序。我有一个自定义数据类型

然后我有一个getInput返回这种类型值的方法。

现在我很困惑如何调度这种类型的值。我有一个方法

我想知道输入是否是Number x

我也尝试使用case

Eq我也尝试创建实例

如何将自定义数据类型与参数进行比较或在一个case分支中有多个语句?

0 投票
1 回答
66 浏览

haskell - Using (_ <- f) instead of f Alone?

Looking at this ZeroMQ HelloWorldClient.hs code snippet:

Is there any reason why _ <- receive requester wouldn't be written as receive requester?

Also, in general, is there any reason to use _ <- f (where f : Monad m => m a) instead of f?

0 投票
2 回答
773 浏览

haskell - put 命令在使用 State monad 的典型函数中做了什么?

这是来自https://wiki.haskell.org/All_About_Monads 的示例 这是使用StatemonadStdGen通过一系列随机数生成命令来线程化值的示例。如果我理解最后一个return正确的做法,它应该只创建一个的monadx作为值。但那put g'实际上是做什么的呢?为什么g'实际上不会丢失?

0 投票
1 回答
102 浏览

haskell - 脱糖符号

我想对以下 do 表示法进行脱糖。但我不确定我是否做对了:

是:

相当于:

任何帮助表示赞赏!

0 投票
1 回答
357 浏览

haskell - Haskell 解析器组合器 - do 表示法

我正在阅读有关构建解析器组合器库的教程,并且遇到了一种我不太了解的方法。

是操作符bind的实现(>>=)。我不太明白这个chainl1功能是如何工作的。从我可以看到你从中提取f然后op将其应用于f a b并递归,但是我不知道当它应该返回元组列表时如何从解析器中提取函数?

0 投票
1 回答
60 浏览

haskell - 一元脱糖哈斯克尔

阅读关于现实世界 Haskell 中单子的章节。我遇到了 do 符号的脱糖,特别是当我们有类似pattern <- action.

上面的例子被简化为:

我很难理解如何在 let 子句中有两个模式匹配案例?

我不明白你怎么能在同一个 let 子句中拥有f pattern和。f _我尝试查找是否可以在 let 子句中有多个模式匹配,但据我所见,大多数人使用 case 语句来做到这一点。

我需要一些帮助来了解这里实际发生了什么?

0 投票
1 回答
146 浏览

haskell - Haskell - 奇怪的阻止行为

在阅读有关MonadPlus的Haskell Wikibook时,我发现以下函数基本上采用 a和 a并在此类 char 等于字符串头时返回,否则:CharStringJust (char,tail)Nothing

他们解释说这let (c':s') = s不会产生异常,因为它位于一个do块中,该块将评估Nothing模式何时失败,但是,事实并非如此,因为当我尝试它时:

所以我不得不将其重写为:

它按预期工作......为什么会发生在我身上?