问题标签 [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 - 函数组合 Do Notation
是否有用于简单函数组合的“do notation”语法糖?
(即(.) :: (b -> c) -> (a -> b) -> a -> c
)
我希望能够存储一些作品的结果以供以后使用(同时仍然继续链条。
如果可能,我宁愿不使用 RebindableSyntax 扩展。
我正在寻找这样的东西:
我不确定这样的事情是否可行,因为早期函数的结果本质上必须“通过”maxLength 的绑定,但我愿意听到任何其他类似的表达选项。基本上,我需要在完成构图时收集信息,以便以后使用。
也许我可以用状态单子做这样的事情?
谢谢你的帮助!
编辑
这种事情有点工作:
haskell - 用无类型的 monad 重新绑定 do 表示法
可以重新绑定 (>>=) 并使用显式字典传递返回一个 monad,如下所示:
有没有更好的方法,如何表示 monad,以便避免在每次使用 monad 动作时忽略MonadDict
monad 实例参数(使用)?const
haskell - Applicative不使用测序
我有这种类型,基本上是 Kleisli 箭头:
由于它有一个Applicative
实例,我打开ApplicativeDo
并尝试使用 do-notation 构建一个值:
它不起作用:
有没有办法让它工作?我正在使用 GHC 8.0.1。
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 中做符号。
变成
我觉得这很有吸引力并尝试了以下行,这给了我一个类型错误
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?
haskell - 如何根据两个输入在 Haskell 中生成无限列表?
我需要根据两个输入生成一个无限列表。
每个元素都需要是 (x*y) 并且 x 每次迭代都会增加 y 并且原始 x 也必须在列表中。所以
会导致
我所有的尝试最终都会永远进行(我在 ghci 中使用调用“take 4 (gen 2 4)”)所以我不知道如何继续。无限列表只会给我带来很多麻烦。我正在尝试通过 do-notation 和 list monad 来做到这一点。任何在正确方向上的帮助将不胜感激。
编辑
这是我最后一次没有成功的尝试。我正在通过我的朋友学习 Haskell,他给了我这个问题来学习 list monad 的 do 表示法。
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。
elixir - Elixir 和 Haskell 中的“Do”表示法
我一直在长生不老药中使用“do/end”表示法,或多或少像命令式块分隔符。(换句话说,do
就像{
在类 C 语言中一样,end
就像}
)。
这是对正在发生的事情的准确描述吗?或者它更像是 Haskelldo
表示法,它为允许类似命令式编码的 monad 构造语法糖?
haskell - Haskell 中的 main 函数是否总是以 main = do 开头?
在java中,我们总是写:
当我们想开始编写程序时。
我的问题是,对于 Haskell,IE 是否一样:当我想在 Haskell 中为程序编写代码时,我是否可以始终确保声明:main = do?
例如:
该程序将询问用户“你叫什么名字?” 然后用户输入将存储在名称变量中,并且“Hello”++名称将在程序终止之前显示。
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)