在Haskell中是否可以在记录中混合命名和未命名的字段?我看到的每个示例都使用所有已命名或所有未命名的字段,如:
data A = A Int Int Int
或
data A = A {x::Int, y::Int, z::Int}
我想要像
这样的东西data A = A {_::Int, y::Int, z::Int)
答案 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
这很丑陋,但它与混合命名和未命名字段具有相同的效果。