Haskell `ghci` 中的多行 `let`

Haskell multi-line `let` in `ghci`

我在 ghci 并发现以下有效:

let foo = ["a", "b", "c"]

...但这不起作用:

let bar = ["a",
           "b",
           "c"]

...这也不行:

let baz = ["a"] ++
          ["b"] ++
          ["c"]

当我尝试将其编译为文件时出现了同样的错误,所以这不是来自 ghci 与使用 ghc.

的问题

错误:

[1 of 1] Compiling Main             ( test.hs, test.o )

test.hs:3:1: error:
    parse error (possibly incorrect indentation or mismatched brackets)

在 GHCi 中,您可以使用 :{ :} 表示多行表达式。例如:

Prelude> :{
Prelude| let bar = ["a",
Prelude|            "b",
Prelude|            "c"]
Prelude| :}

:{ :} 防止 GHCi 在下一个换行符之后评估您的代码并向您抛出错误,因为它不是一个完整的表达式。

另请注意,顶级定义不需要 let。在普通的 Haskell 源文件中,您只需编写:

bar = ["a",
       "b",
       "c"]

此外,在较新的 GHCi 版本 (8.0+) 中,您也不需要 let