在ghci中用花括号阻止抛出错误

时间:2015-07-15 01:48:41

标签: haskell monads

我有一个代码可以使用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)
    |  :}

1 个答案:

答案 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语句。