Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么你可以';当您可以使用let(绑定)时,是否在do块内不使用替换?_Haskell - Fatal编程技术网

Haskell 为什么你可以';当您可以使用let(绑定)时,是否在do块内不使用替换?

Haskell 为什么你可以';当您可以使用let(绑定)时,是否在do块内不使用替换?,haskell,Haskell,为什么不能在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 但是如果你删除do块中的let's,我会得到编译错误 parse error on input ‘=’ Perhaps you need a 'let

为什么不能在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
但是如果你删除do块中的let's,我会得到编译错误

parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'

“设x=y”等于“x
let
是在
do
块中为名称赋值的方式
let x=y
不等同于
x
let
是在
do
块中为名称赋值的方式
let x=y
不等同于
x否,它们不相同。考虑<代码> do>代码/>代码>让p= PutsLLn“Hello World”<代码> >代码> P<代码> >代码> P<代码>(想象每行/行有适当的缩进)不,它们不一样。考虑<代码> do>代码/>代码>让p= PutsLLn“Hello World”<代码> />代码> P<代码> />代码> P<代码>(想象每行/行有适当的缩进)
do let x = y
   ...
let x = y
in do ...
do x <- y
   ...
do y >>= (\x -> ...)