我有一个代码可以使用print in do block,
do { print ([(n, 2^n) | n <- [0..19]]) }
然后我尝试了一个更简单的版本来打印变量值,
do { let a = 1; print (a) }
它会引发错误parse error on input }
还有什么,我试过没有成功---
ghci> let a = 1; print (a)
和
ghci> :{
| let a = 1;
| print (a)
| :}
答案 0 :(得分:3)
开始let
语句后,该行的其余部分将被视为其他let
分配。请考虑以下错误消息:
ghci> do print 1; let c = 2; d = 3
<interactive>:3:13:
The last statement in a 'do' block must be an expression
let c = 2
d = 3
请注意,let
不需要d = 3
关键字。
要在let
之后添加monadic语句,您需要将其放在单独的行中(使用正确的缩进):
ghci> :{
| do print 1; let a = 2; b = 3
| print b
| :}
1
3
AFAIK,在let
之后无法在同一行上放置一个monadic语句。