Добавить элемент моего типа в список в Haskell? - PullRequest
2 голосов
/ 07 мая 2011

Мне нужно добавить свой собственный тип данных в список, который находится в функции, вот мой код:

type Car = (String, String, Int, String)

testDatabase :: [Car] 
testDatabase = [("Ford", "Petrol", 2006, "Sport")]

addNewCar :: Car 
addNewCar newCar = newCar:testDatabase

Вот ошибка, которую я получаю:

ERROR file:.\template.hs:20 - Type error in explicitly typed binding
*** Term : addNewCar
*** Type : ([Char],[Char],Int,[Char]) -> [([Char],[Char],Int,[Char])]
*** Does not match : Car

(извинитеэто чушь, я просто борюсь с Хаскеллом).Заранее спасибо !!

Эш!

Ответы [ 2 ]

5 голосов
/ 07 мая 2011

Предполагаемый тип addNewCar равен ([Char],[Char],Int,[Char]) -> [([Char],[Char],Int,[Char]), что соответствует Car -> [Car].Этот тип говорит, что addNewCar - это функция, которая принимает автомобиль и возвращает список автомобилей.Это именно тот тип, который вам нужен.

Однако ваша подпись типа говорит, что addNewCar - это просто значение типа Car.Это неправильно и противоречит предполагаемому типу.Вот почему вы получаете ошибку.Чтобы это исправить, просто удалите сигнатуру типа или измените ее на addNewCar :: Car -> [Car].

3 голосов
/ 07 мая 2011

В вашем коде есть ошибка типа. addNewCar - это функция, которая принимает автомобиль и возвращает список автомобилей, поэтому она должна иметь тип

addNewCar :: Car -> [Car]

Вы также можете просто удалить сигнатуру типа, и компилятор выведет ее автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...