【发布时间】:2017-03-31 13:10:01
【问题描述】:
let 在do 块中的原因是什么。
-- codeblock A
main = do
let a = 0
let f a = a + 1
let b = f 0
print (a,b)
-- codeblock B
main = do
a = 0
f a = a + 1
b = f 0
print (a,b)
假设所有let 没有in 后面必须跟=(这是真的吗?)
编译器应该能够将 let 从 = 和预处理/脱糖 codeblock B 隐含到 codeblock A
在这种情况下使用let 似乎是不必要的,就像你可以写codeblock C 但选择写codeblock D
-- codeblock C
main = do
print (a,b)
a = 0
f a = a + 1
b = f 0
-- codeblock D
main = do
print (a,b)
function a = 0
function f a = a + 1
function b = f 0
为了澄清我的假设不包括let,后面跟着in,应该保持不变。
-- codeblock E
main = do
a = 0
f a = a + 1
b = f 0
c = let d = 1
e = 1
in d + e
print (a,b,c)
【问题讨论】: