2012-03-19 4 views
14

В учебнике Haskell я наткнулся на следующий код:Какова область применения при использовании без использования?

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

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

+1

'[первый] ++ rest' довольно странно, тоже должен быть' первым: rest' – configurator

ответ

15

Проще говоря, это область действия «откуда она написана до конца do» ,

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

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

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

Объем остальной части блока do.

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

+2

Заметим также, что '' let' без in' действует только в блоке 'do'. – porges

Смежные вопросы