问题标签 [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 投票
4 回答
373 浏览

haskell - 函数组合 Do Notation

是否有用于简单函数组合的“do notation”语法糖?

(即(.) :: (b -> c) -> (a -> b) -> a -> c

我希望能够存储一些作品的结果以供以后使用(同时仍然继续链条。

如果可能,我宁愿不使用 RebindableSyntax 扩展。

我正在寻找这样的东西:

我不确定这样的事情是否可行,因为早期函数的结果本质上必须“通过”maxLength 的绑定,但我愿意听到任何其他类似的表达选项。基本上,我需要在完成构图时收集信息,以便以后使用。

也许我可以用状态单子做这样的事情?

谢谢你的帮助!

编辑

这种事情有点工作:

0 投票
2 回答
137 浏览

haskell - 用无类型的 monad 重新绑定 do 表示法

可以重新绑定 (>>=) 并使用显式字典传递返回一个 monad,如下所示:

有没有更好的方法,如何表示 monad,以便避免在每次使用 monad 动作时忽略MonadDictmonad 实例参数(使用)?const

0 投票
2 回答
257 浏览

haskell - Applicative不使用测序

我有这种类型,基本上是 Kleisli 箭头:

由于它有一个Applicative实例,我打开ApplicativeDo并尝试使用 do-notation 构建一个值:

它不起作用:

有没有办法让它工作?我正在使用 GHC 8.0.1。

0 投票
1 回答
130 浏览

csv - 将 CSV 文件绑定到句柄的 Haskell 错误

所以我正在为 CSV 文件编写一个实用函数的小玩具箱,并在整个测试过程中我一直在手动绑定文件

但是(从Text.CSV

所以我不得不写一个快速的行来去掉这个错误 csv 废话

并将其重新定义为table = stripBare table'. 在此之后,列表函数对 csv 文件内容起作用,并且生活继续

(题外话:令人惊讶的是没有直接的Either a b -> b功能Data.Either。所以我使用了Data.Either.rights :: [Either a b] -> [b]

我想一次性完成 csv 类型的脱衣并将其绑定到手柄上的工作。就像是

但这会在 ( <-) 上给出一个解析错误,说我可能缺少一个do... 然后

对我大喊大叫,说do块中的最后一个语句必须是表达式。

我究竟做错了什么?

作为一个单独的好奇心,我在这里看到

以非常简单的方式在 Haskell deugars 中做符号。

变成

我觉得这很有吸引力并尝试了以下行,这给了我一个类型错误

0 投票
1 回答
181 浏览

haskell - Why is this a parse error in do notation?

Consider the following code:

It doesn't parse in ghc, version 8. It complains about the line containing baz. This code does parse, though:

I find this confusing. What's the essential difference between the two versions?

0 投票
2 回答
1429 浏览

haskell - 如何根据两个输入在 Haskell 中生成无限列表?

我需要根据两个输入生成一个无限列表。

每个元素都需要是 (x*y) 并且 x 每次迭代都会增加 y 并且原始 x 也必须在列表中。所以

会导致

我所有的尝试最终都会永远进行(我在 ghci 中使用调用“take 4 (gen 2 4)”)所以我不知道如何继续。无限列表只会给我带来很多麻烦。我正在尝试通过 do-notation 和 list monad 来做到这一点。任何在正确方向上的帮助将不胜感激。

编辑

这是我最后一次没有成功的尝试。我正在通过我的朋友学习 Haskell,他给了我这个问题来学习 list monad 的 do 表示法。

0 投票
2 回答
186 浏览

haskell - 这种语法是否像 do-notation 一样富有表现力?

do符号允许我们在没有大量嵌套的情况下表达一元代码,因此

可以表示为

但是,假设语法允许... #expression ...代表do { x <- expression; return (... x ...) }. 例如,foo = f a #(b 1) c将被脱糖为:foo = do { x <- b 1; return (f a x c) }. 那么,上面的代码可以表示为:

这将被取消为:

那是等价的。这种语法对我很有吸引力,因为它似乎提供了与 do-notation 相同的功能,同时还允许一些较短的表达式,例如:

所以,我想知道这个提议的语法是否有任何缺陷,或者它是否确实完整并等同于 do-notation。

0 投票
1 回答
365 浏览

elixir - Elixir 和 Haskell 中的“Do”表示法

我一直在长生不老药中使用“do/end”表示法,或多或少像命令式块分隔符。(换句话说,do就像{在类 C 语言中一样,end就像})。

这是对正在发生的事情的准确描述吗?或者它更像是 Haskelldo表示法,它为允许类似命令式编码的 monad 构造语法糖?

0 投票
2 回答
3415 浏览

haskell - Haskell 中的 main 函数是否总是以 main = do 开头?

在java中,我们总是写:

当我们想开始编写程序时。

我的问题是,对于 Haskell,IE 是否一样:当我想在 Haskell 中为程序编写代码时,我是否可以始终确保声明:main = do?

例如:

该程序将询问用户“你叫什么名字?” 然后用户输入将存储在名称变量中,并且“Hello”++名称将在程序终止之前显示。

0 投票
1 回答
682 浏览

purescript - 如何处理 Purescript do-notation 中的“丢弃”?

对通过示例学习 Purescript 一书中的某些示例有疑问。特别是第 9.3 节中的这段代码:

给出以下错误:

在 src\Example\Rectangle.purs 模块 Example.Rectangle 第 16 行,第 3 列 - 第 16 行,第 29 列

类型的结果

上下文二维

在 do 表示法块中被隐式丢弃。您可以使用 _ <- ... 显式丢弃结果。

在应用 Discard t0 => Bind t1 => t1 t0 -> (t0 -> t1 t2) -> t1 t2 到参数 (setFillStyle "#0000FF") ctx 类型的函数丢弃时,同时推断丢弃的类型 ((setFillStyle " #0000FF") ctx) 在值声明 main

其中 t0 是未知类型 t2 是未知类型 t1 是未知类型

有关更多信息,请参阅https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md ,

建议的错误没有帮助,我无法弄清楚“丢弃”究竟做了什么。我还注意到一个类似的问题,例如,第 8.17 节中的“模拟”功能。如果我尝试使用“_ <-”进行分配的建议,就会出现更多看似随机的错误。

(这是使用 PSCi 0.11.5)