在 ghci 中用花括号做块抛出错误

do block with flower brackets in ghci throws error

我有一个代码可以在 do 块中使用 print 作为,

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)
    |  :}

一旦开始 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

请注意,d = 3 不需要 let 关键字。

要在 let 之后添加一个 monadic 语句,您需要将其放在单独的一行中(使用正确的缩进):

ghci> :{
    | do print 1; let a = 2; b = 3
    |    print b
    | :}
1
3

AFAIK,无法在同一行的 let 之后放置 monadic 语句。