2011-05-07 80 views
2

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

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 

(抱歉它是一个垃圾的解释IM只是与Haskell挣扎)。先谢谢你!!

灰!

+0

错误文件:。\ template.hs:20 - 在明确键入绑定中输入错误 ***术语:addNewCar ***类型:([Char],[Char],Int,[Char]) - > [([Char],[Char],Int,[Char])] ***不匹配:汽车 – Ash 2011-05-07 18:21:46

+0

这是我得到的错误:/请帮忙! - 同时也更新了复制粘贴问题,谢谢! – Ash 2011-05-07 18:22:09

回答

5

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

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

+0

我爱你......非常感谢你! :d – Ash 2011-05-07 18:28:19

3

您的代码中存在类型错误。 addNewCar是一个函数,一辆汽车,返回车的列表,所以它应该有类型

addNewCar :: Car -> [Car] 

你也可以只取出类型签名,编译器会自动推断出它。

相关问题