为什么不能在do块中使用替换?这段代码工作正常.
test :: (x -> x) -> [x] -> [x]
test f a = map f a
main :: IO ()
main = do
let sq x = x * x :: Int
let ret = test sq [1,2,3]
print ret
Run Code Online (Sandbox Code Playgroud)
但是如果你删除do块中的let,我就会遇到编译错误.
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
Run Code Online (Sandbox Code Playgroud)
在do块中"let x = y"等于"x < - y"吗?因此,如果右侧返回IO某事,您需要使用let(或< - )?我知道这是一个虚拟问题,但我总是遇到编译错误.EII
let是如何为do块内的名称赋值.let x = y不等于x <- y.在一个do街let区内,像这样的desugars.
do let x = y
...
Run Code Online (Sandbox Code Playgroud)
变
let x = y
in do ...
Run Code Online (Sandbox Code Playgroud)
而
do x <- y
...
Run Code Online (Sandbox Code Playgroud)
变
do y >>= (\x -> ...)
Run Code Online (Sandbox Code Playgroud)
Bare =仅用于顶级赋值,用于定义函数和常量(与0参数函数非常相似).
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |