type Name = String
type PhoneNumber = Int
type Person = (Name, PhoneNumber)
type PhoneBook = [Person]
add :: Person -> PhoneBook -> PhoneBook
add (a,b)
add (a,b) ++ []
我正在尝试在列表前面添加一个条目,但这给我一个错误
Parse error: module header, import declaration
or top-level declaration expected.
|
30 | add (a,b) : xs
| ^^^^^^^^^^^^^^
我要去哪里错了?
答案 0 :(得分:5)
您正在尝试添加列表和元组。但是++
的定义是将列表添加到列表,而不是将元组添加到列表。 Haskell 非常对类型严格,因此它不允许您这样做。
您应该将元组列为列表:
add [(a,b)] ++ []
或者,正如罗宾·齐格蒙德(Robin Zigmond)在其comment中所建议的那样,使用:
运算符:
add (a,b) : []
但是,您还有另一个问题-您的函数定义应包含一个=
运算符:
add (a,b) [] = [(a,b)]
这是在Haskell中定义函数的方式。在左侧,它告诉Haskell wat输入是。在右侧,它告诉Haskell应该将其转换为什么。
您可能想参考Learn You A Haskell : Syntax in Functions,以获取有关在Haskell中定义函数的很好的介绍。
答案 1 :(得分:1)
根据您的帖子,您可以运行以下代码:
type Name = String
type PhoneNumber = Int
type Person = (Name, PhoneNumber)
type PhoneBook = [Person]
add :: Person -> PhoneBook -> PhoneBook
add (name, phoneNumber) phoneBook = (name, phoneNumber) : phoneBook
main = print $ add ("xyz", 987) (add ("abcd", 123) [])
产生:
[("xyz",987),("abcd",123)]