在Haskell教程中,我遇到了以下代码:
do [...]
let atom = [first] ++ rest
return $ case atom of
Run Code Online (Sandbox Code Playgroud)
请注意,let
表达式没有in
块.这种let
表达的范围是什么?下一行?
Dee*_*tan 15
简单地说,它的范围是"从写入的地方直到结尾do
".
请注意,在do
语句中,let
处理方式不同.
根据http://www.haskell.org/haskellwiki/Monads_as_computation#Do_notation,它被解释如下:
do { let <decls> ; <stmts> }
= let <decls> in do { <stmts> }
Run Code Online (Sandbox Code Playgroud)
范围是do
块的其余部分.
参见Haskell报告的§3.14(具体来说,是翻译块中的第四种情况).(是的,这是关于do
块的部分,因为let
没有in
只在do
块内有效,如Porges指出的那样.)
归档时间: |
|
查看次数: |
572 次 |
最近记录: |