我试图在Haskell GHCi中将函数声明为
fact :: Int -> Int
但是我收到此错误-错误: 在输入“->”上解析错误
我不明白为什么会这样。有人可以向我解释吗?谢谢。
答案 0 :(得分:5)
首先,您似乎正在使用旧版本的GHC。在较新的版本中,GHCi语法已经放宽了一点。
但是仍然:在GHCi中键入的内容与在Haskell源文件中编写的内容具有相同的规则。具体来说,GHCi提示本质上是IO monad链评估程序,原因是您可以编写类似
的内容row
或
Prelude> putStrLn "Hello"
Hello
并实际上使它在此处执行。相比之下,在Haskell源文件中,您仅声明绑定,然后可以在Prelude> readFile "test.txt"
"fubar\nbaz"
操作或GHCi会话中调用它们。
但是在这种情况下,您想在GHCi本身中声明一个绑定。您也可以做到这一点,但是有点尴尬,基本上,您需要从main
开始,然后将所有内容压缩到一行:
let
实际上,较新的GHCi版本允许您省略Prelude> let fact :: Int -> Int; fact n = product [1..n]
,并且可以使用特殊的括号语法来定义多行:
let
但是我建议不要这样做。如果您确实有一些较大的定义,最好将它们放在适当的Haskell源文件中,然后加载到GHCi中。