List Haskell:向数据类型内的列表添加元素
我正在尝试实现一个函数,将一个元素(类型)添加到该类型的列表中,并添加到现有创建的数据类型中。由于Haskell数据变量是不可变的,我知道您必须创建一个与第一个数据具有相同特征的新数据并将其添加到其中,但我似乎可以让ghci编译我的程序,并让它完成我试图完成的任务 以下是我的代码和功能,该功能应将联系人添加到我正在尝试处理的现有联系人列表中List Haskell:向数据类型内的列表添加元素,list,haskell,types,List,Haskell,Types,我正在尝试实现一个函数,将一个元素(类型)添加到该类型的列表中,并添加到现有创建的数据类型中。由于Haskell数据变量是不可变的,我知道您必须创建一个与第一个数据具有相同特征的新数据并将其添加到其中,但我似乎可以让ghci编译我的程序,并让它完成我试图完成的任务 以下是我的代码和功能,该功能应将联系人添加到我正在尝试处理的现有联系人列表中addContact: type Model = String type Serie = String type SerialNumber = String
addContact
:
type Model = String
type Serie = String
type SerialNumber = String
type Type= (Model, Serie)
data Car = Car
SerialNumber
Type
deriving (Show, Read)
type PastCars= (Car, ChangeCause)
data ChangeCause = Broken | Contract deriving (Show, Eq, Read)
type Phone = (Extension, Number)
type Number = String
type Extension = String
type Person = (FirstName, LastName)
type FirstName = String
type LastName = String
type Contact = (Person, Phone)
data Owner = Owner Car Phone [PastCars] [Contact]
--Getters
listPastSN [] = []
listPastSN ((p,e):xs) = (serialNumber p, e):listPastSN xs
serialNumber :: Car -> String
serialNumber (Car s _)= s
car :: Owner -> Car
car (Owner c _ _ _ ) = c
phone :: Owner -> Phone
phone (Owner _ p _ _ ) = p
pastCar :: Owner -> [PastCars]
pastCar (Owner _ _ p _ ) = p
contacts :: Owner -> [Contact]
contacts (Owner _ _ _ c) = c
addContact :: FirstName -> LastName -> Extension -> Number -> Owner -> Owner
addContact f l e n ow = Owner car(ow) phone(ow) pastCar(ow) contacts(ow) ++ (Contact ((f, l), (e, n)))
让我们来看看这些数据变量
car1 = Car "X234X" ("Honda", "Civic")
car2 = Car "X233X" ("Mazda", "3")
person1 = Person "Peter" "Mcleod"
owner1 = Owner car1 ("888" , "4144144") [(car2, Broken)] [(person1,("123", "1231231")) ]
我希望能够将另一个联系人添加到所有者1的联系人列表中
正确的方法是什么。因此,围绕这种情况提出的LYAH解决方案似乎没有帮助。代码中存在多个问题。addContact功能的固定版本:
addContact f l e n ow =
Owner (car ow) (phone ow) (pastCar ow) $ (contacts ow) ++ [((f, l), (e, n))]
不是构造函数,而是类型别名Contact
与fa(b)
相同。因此,fab
与Owner phone(x)
相同,这同样适用于其他参数Owner phone x
- 看看
。您正在尝试,(++)的签名::[a]->[a]->[a]
联系人(ow)+(联系人(f,l)、(e,n))
与fab++[1,2,3]
相同。您想要的是(fab++[1,2,3]
或fa(b++[1,2,3])
fa$b++[1,2,3]