Какова область применения let при использовании без in? - PullRequest
14 голосов
/ 20 марта 2012

В руководстве по Haskell я наткнулся на следующий код:

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

Обратите внимание, что выражение let не имеет блока in.Какова область такого выражения let?Следующая строка?

Ответы [ 2 ]

15 голосов
/ 20 марта 2012

Проще говоря, он имеет область видимости "от того, где написано до конца do".

Обратите внимание, что в операторе do let обрабатывается по-разному.

Согласно http://www.haskell.org/haskellwiki/Monads_as_computation#Do_notation это интерпретируется следующим образом:

do { let <decls> ; <stmts> }
  = let <decls> in do { <stmts> }
8 голосов
/ 20 марта 2012

Область действия - остальная часть блока do.

См. §3.14 отчета Haskell (в частности, четвертый случай в блоке перевода). (Да, это раздел о do блоках, потому что let без in действительно только внутри блока do, как указывает Поргес.)

...