我需要将自己的数据类型添加到函数列表中,这是我的代码:
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挣扎)。提前谢谢!!
灰!
答案 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]
您也可以删除类型签名,编译器会自动推断它。