将我自己类型的项添加到Haskell中的列表中?

时间:2011-05-07 18:16:10

标签: list function haskell types

我需要将自己的数据类型添加到函数列表中,这是我的代码:

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

(对不起,这是一个垃圾解释,我只是在与Haskell挣扎)。提前谢谢!!

灰!

2 个答案:

答案 0 :(得分:5)

addNewCar的推断类型为([Char],[Char],Int,[Char]) -> [([Char],[Char],Int,[Char]),与Car -> [Car]相同。这种类型表示addNewCar是一个接收汽车并返回汽车列表的功能。这正是你想要的类型。

但是,您的类型签名表明addNewCar只是Car类型的值。这是错误的,并与推断类型冲突。这就是你得到错误的原因。因此,要解决此问题,只需删除类型签名或将其更改为addNewCar :: Car -> [Car]

答案 1 :(得分:3)

您的代码中存在类型错误。 addNewCar是一个接收汽车并返回汽车列表的函数,因此它应该具有类型

addNewCar :: Car -> [Car]

您也可以删除类型签名,编译器会自动推断它。