Каков объем использования при использовании без него?
В учебнике 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
, как указывает Поркс).