I'm trying to implement a function that adds an element (a type) to a list of this type to an existing created datatype. Since Haskell data variable are immutable, I know that you have to create a new data with the same characteristic as the first one and add onto it, but I can seem to make ghci compile my program and make it do what I'm trying to accomplish.
Here is my code and the function which should add a contact to a list of already existing contact addContact which I'm been trying to work on:
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)))
Let's I have these data variable
car1 = Car "X234X" ("Honda", "Civic")
car2 = Car "X233X" ("Mazda", "3")
person1 = Person "Peter" "Mcleod"
owner1 = Owner car1 ("888" , "4144144") [(car2, Broken)] [(person1,("123", "1231231")) ]
I want to be able to add another contact to the list of contact of owner1.
What is the correct way to go about this. SO and LYAH solution proposed around these type of case don't seem to help.