如何在Haskell中修复“错误:解析输入'='上的错误”

时间:2019-09-05 16:07:52

标签: haskell

我只是想看看WinGHCi是否可用于Haskell编程,而且我不知道为什么这会显示上述错误。

我不知道这是否是适用于Haskell的正确应用程序,如果您知道另一个可以实际运行的应用程序,我将不胜感激。

f (x:xs) = f ys ++ [x] ++ f zs
 where
 ys = [a | a ← xs, a ≤ x]
 zs = [b | b ← xs, b > x]
<interactive>:21:20: error:
    parse error on input ‘=’
    Perhaps you need a 'let' in a 'do' block?
    e.g. 'let x = 5' instead of 'x = 5'

1 个答案:

答案 0 :(得分:2)

存在两个相互交织的问题:是否需要let来引入定义,以及是否可以编写多行定义。

首先,let。 8.0之前的版本,GHCi要求在let中引入定义:

let f (x:xs) = ...

从8.0开始,您可以放下let,GHCi会确定您要做什么。

对于多行语句,有两种方法可以执行此操作。一种是用:}:{明确地分隔块:

Prelude> :{
Prelude| f (x:xs) = f ys ++ [x] ++ f zs
Prelude|  where
Prelude|  ys = [a | a <- xs, a <= x]
Prelude|  zs = [b | b <- xs, b > x]
Prelude| :}

另一种通过:set +m启用多行模式,似乎可以接受它。