В руководстве по Haskell я наткнулся на следующий код:
do [...] let atom = [first] ++ rest return $ case atom of
Обратите внимание, что выражение let не имеет блока in.Какова область такого выражения let?Следующая строка?
let
in
Проще говоря, он имеет область видимости "от того, где написано до конца do".
do
Обратите внимание, что в операторе do let обрабатывается по-разному.
Согласно http://www.haskell.org/haskellwiki/Monads_as_computation#Do_notation это интерпретируется следующим образом:
do { let <decls> ; <stmts> } = let <decls> in do { <stmts> }
Область действия - остальная часть блока do.
См. §3.14 отчета Haskell (в частности, четвертый случай в блоке перевода). (Да, это раздел о do блоках, потому что let без in действительно только внутри блока do, как указывает Поргес.)