Haskell错误-'输入'->'解析错误

时间:2019-11-08 10:02:11

标签: haskell haskell-stack haskell-platform

我试图在Haskell GHCi中将函数声明为

fact :: Int -> Int

但是我收到此错误-错误: 在输入“->”上解析错误

我不明白为什么会这样。有人可以向我解释吗?谢谢。

1 个答案:

答案 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中。