2011-05-07 79 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] 

你也可以只取出類型簽名,編譯器會自動推斷出它。

相關問題