首页 > 解决方案 > 试图在 Haskell 中的列表前面添加一个元组但收到错误?

问题描述

 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
   | ^^^^^^^^^^^^^^

我哪里错了?

标签: haskell

解决方案


您正在尝试添加一个列表和一个元组。但是++被定义为将列表添加到列表中,而不是用于将元组添加到列表中。Haskell对类型非常严格,所以它不会让你这样做。

您应该使元组成为一个列表:

add [(a,b)] ++ [] 

或者,正如 Robin Zigmond 在他们的评论中所建议的那样,使用:运算符:

add (a,b) : [] 

不过,您还有另一个问题 - 您的函数定义应该包含一个=运算符:

add (a,b) [] = [(a,b)]

这就是在 Haskell 中定义函数的方式。在左侧,它告诉 Haskell 输入是什么。在右侧,它告诉 Haskell 应该将它们转换成什么。

您可能想参考Learn You A Haskell : Syntax in Functions以很好地介绍在 Haskell 中定义函数。


推荐阅读