在Haskell中的记录中混合命名和未命名字段

时间:2013-08-01 22:36:10

标签: haskell field record

在Haskell中是否可以在记录中混合命名和未命名的字段?我看到的每个示例都使用所有已命名或所有未命名的字段,如:

data A = A Int Int Int

data A = A {x::Int, y::Int, z::Int}

我想要像

这样的东西
data A = A {_::Int, y::Int, z::Int)

2 个答案:

答案 0 :(得分:2)

如果任何字段被命名,则必须命名所有

如果您不知道,即使字段已命名,您也不​​会 在每个场合使用其名称。例如,如果你有

data Point = Point {x, y :: Double}

然后你可以做

Point {x = 5, y = 7}

但你仍然可以

Point 5 7

好像这些字段是未命名的。但请注意,记录语法允许您仅指定某些字段,而如果使用未命名字段,则必须始终指定所有字段。

答案 1 :(得分:1)

不确定这是否是您想要的,但您可以通过自己编写get函数来模拟记录语法。

data A = A Int Int Int

y :: A -> Int
y (A _ num _) = num

z :: A -> Int
z (A _ _ num) = num

这很丑陋,但它与混合命名和未命名字段具有相同的效果。