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
。
我在 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
。