List Haskell将参数转换为类型

List Haskell将参数转换为类型,list,haskell,types,construction,List,Haskell,Types,Construction,我已经创建了Contact类型,我正在尝试创建一个函数,该函数接受4个参数(名字、姓氏、电话和状态),并创建一个Contact并将其添加到现有Contact的列表中 type LastName = String type FirstName = String type Phone = String type Contact = (Person, State) data Person = Person Phone Name deriving (Show, Read) type Name = (Fi

我已经创建了Contact类型,我正在尝试创建一个函数,该函数接受4个参数(名字、姓氏、电话和状态),并创建一个Contact并将其添加到现有Contact的列表中

type LastName = String
type FirstName = String
type Phone = String
type Contact = (Person, State)
data Person = Person Phone Name deriving (Show, Read)
type Name = (FirstName, LastName)
data State = Good | Bad

addContact :: Phone -> FirstName -> LastName -> State -> [Contact] -> [Contact]
addContact  c p n s [] = Contact (Person c (p,n)  ,s) : []
addContact c p n xs = Contact (Person c (p,n)  , s) : xs
我似乎找不到关于LYAH或SOF的解决方案,我完全按照本节的内容,特别是关于形状的部分:但我得到了以下编译错误:

• Data constructor not in scope:
        Contact :: (Person, [Char]) -> Contact
我尝试将该类型的大写字母改为小写字母,但仍然得到未定义的变量错误编译


这里缺少什么吗?

Contact
不是类型构造函数,
Contact
只是
(个人、国家)
的别名,所以一个2元组,因此
(,)
是数据构造函数:

addContact :: Phone -> FirstName -> LastName -> State -> [Contact] -> [Contact]
addContact c p n s xs = (,) (Person c (p,n)) s : xs
也可以使用类型别名,例如:

type Person = (Phone, Name)

Contact
不是类型构造函数,
Contact
只是
(个人、州)
的别名,因此是2元组,因此
(,)
是数据构造函数:

addContact :: Phone -> FirstName -> LastName -> State -> [Contact] -> [Contact]
addContact c p n s xs = (,) (Person c (p,n)) s : xs
也可以使用类型别名,例如:

type Person = (Phone, Name)

您的第二个和第三个类型定义毫无意义,无法编译。如果输入此源代码,则在到达函数定义之前会出现错误。请编辑问题以包含实际失败的源代码。您的第二个和第三个类型定义没有意义,无法编译。如果输入此源代码,则在到达函数定义之前会出现错误。请编辑问题以包含实际失败的源代码。很抱歉随后出现错误格式。我进行了您建议的更正,并尝试实现第一个函数,结果出现以下错误:无法将类型“b0->(a0,b0)”与“(人员,状态)”匹配预期类型:[联系人]实际类型:[b0->(a0,b0)]•在表达式中:(,)(人员c(p,n)s):xs在'addContact'的方程式中:addContact c p n s xs=(,)(人c(p,n)s):xs | 10 | addContact c p n s xs=(,)(人c(p,n)s):xs | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 93044jp:对不起,打错了,这是
(,)(人c(p,n))s
。我进行了您建议的更正,并尝试实现第一个函数,结果出现以下错误:无法将类型“b0->(a0,b0)”与“(人员,状态)”匹配预期类型:[联系人]实际类型:[b0->(a0,b0)]•在表达式中:(,)(人员c(p,n)s):xs在‘addContact’的方程式中:addContact c p n s xs=(,)(人c(p,n)s):xs | 10 | addContact c p n s xs=(,)(人c(p,n)s):xs | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
addContact :: Phone -> FirstName -> LastName -> State -> [Contact] -> [Contact]
addContact c p n s xs = ((Person c (p, n)), s) : xs
addContact :: Phone -> FirstName -> LastName -> State -> [Contact] -> [Contact]
addContact c p n s xs = ((c, (p, n)),s) : xs
type Name = (FirstName, LastName)