我的Haskell代码有什么问题?

时间:2016-04-24 08:22:57

标签: haskell ghci hugs

我的代码:

addConcat :: [Int] -> [Int]
addConcat [x,y] = z:(z + y) where (z = x + y)

我实现的功能与上面的功能完全不同,但它的格式相同但我总是得到:

Syntax error in input (unexpected symbol "y")

那么我的Haskell代码有什么问题?我真的需要使用' where'条款,但我认为我做错了。

1 个答案:

答案 0 :(得分:3)

我无法重现您声称的错误。如果您将该代码写入文件并使用ghc进行编译,则错误为:

<filename>.hs:2:38: parse error on input ‘=’

问题是where的语法错误。写下:

an_expression where z = x+y

或者您必须使用卷曲大括号:

an_expression where {z=x+y;}

您不能使用括号对作业进行分组。

请注意,在ghci中编写时,必须将声明组合在一起并使用let来定义函数:

Prelude> let {addConcat :: [Int] -> [Int]; addConcat [x,y] = [z,z+y] where z=x+y;}
Prelude> addConcat [1,2]
[3,5]

另请注意,即使修复此函数仍然存在类型错误,因为:的第二个参数必须是列表,而z+y是数字。您只需要z:[z+y]或更多[z, z+y]