没有使用时,let的范围是什么?

mdm*_*mdm 14 haskell let

在Haskell教程中,我遇到了以下代码:

do [...]
  let atom = [first] ++ rest
  return $ case atom of
Run Code Online (Sandbox Code Playgroud)

请注意,let表达式没有in块.这种let表达的范围是什么?下一行?

Dee*_*tan 15

简单地说,它的范围是"从写入的地方直到结尾do".

请注意,在do语句中,let处理方式不同.

根据http://www.haskell.org/haskellwiki/Monads_as_computation#Do_notation,它被解释如下:

do { let <decls> ; <stmts> }
  = let <decls> in do { <stmts> }
Run Code Online (Sandbox Code Playgroud)


dav*_*420 8

范围是do块的其余部分.

参见Haskell报告的§3.14(具体来说,是翻译块中的第四种情况).(是的,这是关于do块的部分,因为let没有in只在do块内有效,如Porges指出的那样.)

  • 另请注意,`let` without`in`仅在`do`块内有效. (2认同)