一個簡單的問題: 給出的定義,(從哈斯克爾SOE)哈斯克爾單子形成
do x — el; el\ ...; en
=> el »= \x — do e2\ ...; en
和:
do let decllist; el\...; en
=> let decllist in do e2\ ...; en
看來,這兩個結構是相同的:
do let x = e1
e2
and
do x <- e1
e2
都評估e1,將其綁定到e2,然後評估e2。
是嗎?
'do'-表達式中的'let'不僅僅是一個正常的'let'表達式。這是一個'let'語句(Haskell 2010 Report,3.14節)。 'let'語句解析爲'let'表達式,但它本身不是'let'表達式。同樣,'e1 >> = \ x - >'也沒有意義。最好只看報告中的翻譯規則。 – Lambdageek