【发布时间】:2015-11-05 02:08:24
【问题描述】:
我正在尝试在可被覆盖的记录对象中设置默认值。
data Car c y = Car {
company :: c,
year :: y
}
我想做的是设置一个默认值:
data Car c y = Car {
company :: c -- OR "Ford"
year :: y
}
到目前为止,我已经尝试通过将 c 的类型设置为 Maybe 类型来做到这一点:
data Car = Car {
company:: Maybe String
year :: Maybe Int
}
但是我得到了这个可预测的错误:
Fields of `Car' not initialised: year
具有讽刺意味的是,这正是我想要解决的问题。我想生成一个新记录,其中包含我没有设置的值已经初始化。我发现的一种方法是部分应用 Car 类型:
data Car c y = {
company :: c,
year :: y
}
let ford = Car "Ford"
-- This produces a function (y -> Car [Char] y)
但这会产生两个新问题:
如果我的数据类型有 100 多个字段类型,我将得到 100 个阶乘柯里化函数
我可以创建的部分应用函数取决于声明中变量的顺序。例如,您会注意到我无法生成
car1988函数。
如何编写一个函数来创建具有默认值的记录?请帮忙。
【问题讨论】: