【问题标题】:Add an item of my own type to a list in Haskell?将我自己类型的项目添加到 Haskell 的列表中?
【发布时间】:2011-08-20 20:28:26
【问题描述】:

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

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 有点挣扎)。提前谢谢你!

灰烬!

【问题讨论】:

  • 错误文件:.\template.hs:20 - 显式类型绑定中的类型错误 *** 术语 : addNewCar *** 类型 : ([Char],[Char],Int,[Char] ) -> [([Char],[Char],Int,[Char])] *** 不匹配:汽车
  • 这是我得到的错误:/请帮助! - 我还更新了复制粘贴问题,谢谢!

标签: list function haskell types


【解决方案1】:

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

addNewCar :: Car -> [Car]

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我爱你...非常感谢!! :D
    猜你喜欢
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多