Каков объем использования при использовании без него?

В учебнике Haskell я просмотрел следующий код:

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

Объем - это остальная часть блока do.

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