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

时间:2012-03-19 20:25:17

标签: haskell let

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

do [...]
  let atom = [first] ++ rest
  return $ case atom of

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

2 个答案:

答案 0 :(得分:15)

简单地说,它的范围是“从写入的地方直到do”的结尾。

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

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

do { let <decls> ; <stmts> }
  = let <decls> in do { <stmts> }

答案 1 :(得分:8)

范围是do块的其余部分。

See §3.14 of the Haskell Report(具体来说,是翻译块中的第四种情况)。 (是的,这是关于do块的部分,因为没有let的{​​{1}}仅在in块内有效,正如Porges指出的那样。)