问题标签 [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.
if-statement - Haskell - do 块中的语法(使用 IO)
编译器说
尝试加载包含以下代码片段的文件时:
它(编译器消息)是什么意思,为什么会出现在这里?(而它不在:)
haskell - where 绑定、let 绑定和单个赋值运算符 (<-) 之间的区别
我不明白这三种语法之间的区别:
where a = f (b)
do a <- f (b)
do let a = f (b)
a <- f(b)
尽管这与其他两个不同,但我确实理解,在大多数情况下,我尝试了所有三个工作。此外,我在网上某处读到,每个块您应该尝试与一个 let 绑定相处,以便“惯用”。但我似乎从来没有管理过。
我如何决定使用什么?
list - 在列表单子中使用 return 与不使用 return
我开始了我的 Grand Haskell Crusade (GHC :) ),我对 monads 和 IO 函数有点困惑。谁能简单地解释这两个功能之间的区别是什么?
结果是:
haskell - 在 Haskell 中应该避免 do-notation 吗?
大多数 Haskell 教程都教给 IO 使用 do-notation。
我也从 do-notation 开始,但这使我的代码看起来更像是一种命令式语言,而不是 FP 语言。
这周我看到一个使用 IO 的教程<$>
而不是使用do
并且日志分析工具在没有do
.
所以我的问题是“在任何情况下我们都应该避免做符号吗? ”。
我知道do
在某些情况下可能会使代码更好。
另外,为什么大多数教程都用 IO 来教授 IO do
?
在我看来<$>
,<*>
并使代码比 IO 更 FP。
haskell - Haskell do 表示法绑定
我正在尝试对 Haskell 中的 do 语句进行脱糖处理。我在 SO 上找到了一些示例,但无法将它们应用于我的案例。我唯一能想到的是一个沉重的嵌套 let 语句,这看起来很丑陋。
应将 do 表示法替换为 bind 的语句:
非常感谢任何输入=)
haskell - Haskell中的绑定与分配
我正在学习编写自己的方案教程,一个代码块让我想知道绑定和赋值之间的区别:
为什么let atom =
而不是atom <-
?因此,我尝试了:
我得到编译错误:
我无法准确理解这意味着什么,这可能是由于对do
monad 的不精确理解。(我已经阅读了 Learn You a Haskell以及其他各种 monad/do 教程,并且其他 SO 问题指出缩进通常会导致这里出现问题,但我认为我的缩进是正确的)
haskell - Haskell:使用 do 表示法并返回即整数值的函数
我想编写一个函数,它使用getLine
并返回一个元组(整数,整数)但使用do-notation读取一些数据。像这样的东西(当然它不起作用):
我必须为此编写自己的 monad 吗?有什么不写新单子的解决方案吗?
编辑
所以我可以编写main
使用的函数fun
,我认为这是唯一的解决方案:
以上代码有效。
haskell - 返回从 monad 中提取的元素;多余的?
对于所有表现良好的 Monad,以下两种 flatten 实现是否等效?
haskell - do 表示法与 let 中的模式匹配
我最近在使用threepenny-gui时遇到了一个错误
,它通过将代码从do表示法中的<-
模式匹配更改为使用let表示法的模式匹配来解决。
在这两种形式的模式匹配之间进行更改时,我是否应该期望行为发生变化?
具体如下代码:
在 IO 单子中:
改为:
这是为我解决问题的提交的链接: https ://github.com/Davorak/threepenny-gui/commit/fbf6cbe25875fafdc64f7a111ddebf485b45143b
其他平台详细信息:操作系统:10.8.5 ghc:7.6.3
编辑:添加了 IO monad 正在发生这种情况的事实
haskell - 如何在 F# 中正确丢弃(单子)计算的结果
在 Haskell 中,我可以写:
在 F# 中,我已经走到了这一步:
换句话说,我必须引入这个未使用let! _ =
的绑定来丢弃我不需要的“空间”解析器(monad)的解析值。
如何在 F# 中避免这些无用的绑定?我曾尝试使用 do!,但出现错误(因为我的>>=
函数不采用类型单位,而是采用 'a):
这是我的构建器定义:
我需要定义>>
功能吗?将 Combine() 添加到构建器?任何想法如何正确地做到这一点?代码示例?