问题标签 [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.
haskell - Haskell:'做[1,2,3]; ["hello"]' 行为说明
所以我试图准确地理解 Haskelldo
符号是如何工作的。我知道它与 monads 一起使用,并且它基本上扩展(因为它实际上是语法糖)成与 bind ( >>=
) 或 then ( >>
) 连接的匿名函数,如此处所示https://en.wikibooks.org/wiki/Haskell /Syntactic_sugar#Do_notation。
但是我的问题是为什么下面的命令
返回
我知道数组实际上是 monad(并且字符串是字符数组),但我看不出这是如何导致上述行为的。
haskell - 使用 do 表示法对 Haskell 和 Frege 中的基本解析器进行排序
我尝试在 Graham Hutton 的“在 Haskell 中编程”中运行第 8 章中关于功能解析器的片段,无论是 inghci
还是frege-repl
. 我无法使用do
语法对解析器进行排序。我在 Frege 中有以下定义(Haskell 版本仅与item
不打包和解包的更简单定义不同,String
并且Char
与书中相同):
p'
适用于ghci
和frege-repl
。但是,在尝试加载模块时,我收到了这些消息。首先来自ghci
:
frege-repl
甚至更不友好,因为它只是用错误堆栈跟踪将我从 repl 中踢了出来:
我的直觉是我需要一些不同的东西>>=
,return
或者我应该告诉编译器一些东西。或者也许我需要将p
定义放入State
monad?
maybe - 如何从 PureScript 中的 do 表示法返回 Maybe 值?
我试图从一个使用 do 表示法的函数返回一个 Maybe 值,但我似乎无法让它工作。这个函数需要一个字符串(“文件名”)和一个要搜索的路径...
在哪里...
但是我不断收到错误“Count not match Type Array with type Maybe”,所以看起来编译器期望 do 表示法返回一个数组。我将如何返回一个可能的值?
haskell - 自定义数据类型与参数的比较
我正在学习 Haskell 并尝试实现这个程序。我有一个自定义数据类型
然后我有一个getInput
返回这种类型值的方法。
现在我很困惑如何调度这种类型的值。我有一个方法
我想知道输入是否是Number x
我也尝试使用case
:
Eq
我也尝试创建实例
如何将自定义数据类型与参数进行比较或在一个case
分支中有多个语句?
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
?
haskell - put 命令在使用 State monad 的典型函数中做了什么?
这是来自https://wiki.haskell.org/All_About_Monads
的示例 这是使用State
monadStdGen
通过一系列随机数生成命令来线程化值的示例。如果我理解最后一个return
正确的做法,它应该只创建一个新的monadx
作为值。但那put g'
实际上是做什么的呢?为什么g'
实际上不会丢失?
haskell - 脱糖符号
我想对以下 do 表示法进行脱糖。但我不确定我是否做对了:
是:
和
相当于:
任何帮助表示赞赏!
haskell - Haskell 解析器组合器 - do 表示法
我正在阅读有关构建解析器组合器库的教程,并且遇到了一种我不太了解的方法。
是操作符bind
的实现(>>=)
。我不太明白这个chainl1
功能是如何工作的。从我可以看到你从中提取f
然后op
将其应用于f a b
并递归,但是我不知道当它应该返回元组列表时如何从解析器中提取函数?
haskell - 一元脱糖哈斯克尔
阅读关于现实世界 Haskell 中单子的章节。我遇到了 do 符号的脱糖,特别是当我们有类似pattern <- action
.
上面的例子被简化为:
我很难理解如何在 let 子句中有两个模式匹配案例?
我不明白你怎么能在同一个 let 子句中拥有f pattern
和。f _
我尝试查找是否可以在 let 子句中有多个模式匹配,但据我所见,大多数人使用 case 语句来做到这一点。
我需要一些帮助来了解这里实际发生了什么?
haskell - Haskell - 奇怪的阻止行为
在阅读有关MonadPlus的Haskell Wikibook时,我发现以下函数基本上采用 a和 a并在此类 char 等于字符串头时返回,否则:Char
String
Just (char,tail)
Nothing
他们解释说这let (c':s') = s
不会产生异常,因为它位于一个do
块中,该块将评估Nothing
模式何时失败,但是,事实并非如此,因为当我尝试它时:
所以我不得不将其重写为:
它按预期工作......为什么会发生在我身上?