14

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

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

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

4

2 回答 2

15

简而言之,它的范围是“从它写到的地方到do”。

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

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

do { let <decls> ; <stmts> }
  = let <decls> in do { <stmts> }
于 2012-03-19T20:30:00.623 回答
8

范围是do块的其余部分。

请参阅 Haskell 报告的第 3.14 节(特别是翻译块中的第四个案例)。(是的,这是关于do块的部分,因为let没有in只在do块内有效,正如 Porges 指出的那样。)

于 2012-03-19T20:28:44.423 回答