问题标签 [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 输入缩进有什么问题?
在下面的 Haskell 代码中,我收到一个错误“输入 'in' 上的解析错误”。根据我的阅读,我使用的缩进应该没问题。事实上,我在代码的其他地方成功地使用了具有类似缩进的 'let' 和 'in'('let' 与 'in' 对齐)。我打破了什么规则导致这个“进入”成为一个问题?如果我在'in'前面添加一个空格(使其比'let'多1个空格)它编译得很好。
感谢所有帮助。提前致谢。
haskell - do 块内的执行顺序是否真的不依赖于语句顺序?
我正在阅读https://wiki.haskell.org/Do_notation_considered_harmful并惊讶地阅读以下几行
新手可能会认为语句的顺序决定了执行的顺序。...语句的顺序也不是评估顺序的标准。
wiki 帖子提供了一些示例来演示此属性。虽然这些例子是有道理的,但我仍然不完全相信这个陈述是真的,因为如果我写了类似的东西
这三行按语句的顺序出现。那么这里到底发生了什么?
haskell - 理解 do 表示法和绑定
我对 haskell 非常陌生,我正在尝试了解用于在本文档中创建 Monadic 解析器的方法https://www.cs.nott.ac.uk/~gmh/pearl.pdf
为了正确理解它,我没有完全遵循它,而是尝试做一些不同的事情,因此,我最终得到了这段代码
这似乎有效,但我很难理解 do 表示法中发生的事情。
例如; 在c1 <- item
,分配给c1
什么?它是包含在Parser
类型中的函数,还是计算的结果,还是其他什么?此外, do 表示法中的第二行是 just item
,所以它只是运行item
但不分配结果吗?最后,return (c1,c2)
产生什么?是Parser (String -> Maybe ((c1, c2)), String)
还是只是Just (c1, c2)
?
haskell - 为什么monad类型类中应该存在fail方法?
所以我有这行代码:
这当然给出了例外,因为模式不匹配任何内容。
另一方面,这段代码给出了不同的结果,[]:
正如我所看到的,它们应该产生相同的结果,因为应该将 do-blocks 减少为使用 (>>=) 并返回。但事实并非如此,使 do-notation 成为一种功能而不是语法糖。
我知道 monad 类型类中存在 fail 并且我知道当模式匹配在 do-block 中失败时会调用它,但我不明白为什么它是一种与使用普通 monad 操作不同的想要的行为。
所以我的问题是 - 为什么失败方法应该存在?
haskell - Haskell中do-notation中变量的类型是什么?
下面的代码看起来很清楚:
这里x
isNum
和y
is的类型String
。(<-
这里用于从 Monad 中取出实际值)
但是,这个片段对我来说似乎不太清楚:
这里的类型a
和类型是b
什么?看起来他们的行为就像一个Num
,但是在a <- (* 2)
这里b <- (+ 10)
看起来很神秘......
有人对此有想法吗?
haskell - 将函数应用程序的结果存储在 DO 块内的元组中
虽然我可以应用一个函数两次并将结果绑定到一个元组中:
do
这不能在一个块内完成(至少我不知道如何正确地做到这一点) :
输入 GHCI REPL 时出现以下错误:
我显然可以用更详细的方法来解决它:
有没有一种正确的表达方式test
而不是让它喜欢test'
?
haskell - let 语句中的 case 语句需要什么缩进?
在 haskell 工作,发现奇怪的行为,将其剥离为裸露的骨头
这个作品
但是当我尝试
我明白了
所以我尝试
这有效。
什么?为什么?在这种情况下,为什么我需要额外的缩进?我在这方面找不到任何东西,可能是因为这些关键字在日常语言中是如此简短和常见。是否有一些规范可以解释这种行为?
haskell - 在 let 中使用 Monadic do 表示法,这可能吗?
考虑以下有效的 Haskell 代码
函数f
可以用这样的 do-notation 等效地重写
让我烦恼的是,当我将内联的内容放入时,do 表示法不起作用f
。以下代码甚至不解析:
我是否正确,let
我被迫诉诸于内心(>>=)
?
当我这样做时,以下代码也不会解析:
除了let
. 有没有优雅的使用方式bind
inside let
?
haskell - 在 do 表示法中将单子函数与纯函数混合
我无法在 do 表示法中混合纯函数和单子函数。我有一种感觉,我错过了一些明显的东西。
例如,假设我有这些功能
这不起作用,因为
行在 z 中,但是将纯 fb 函数与一元 fa 和 fc 函数结合起来的优雅方式是什么?