在 Haskell 中是否可以在记录中混合命名和未命名字段?我看到的每个示例都使用所有命名或所有未命名字段,例如:
data A = A Int Int Int
或者
data A = A {x::Int, y::Int, z::Int}
我想要类似的东西
data A = A {_::Int, y::Int, z::Int)
如果任何字段被命名,那么它们都必须被命名。
如果您不知道,即使字段已命名,您也不必每次都使用它们的名称。例如,如果您有
data Point = Point {x, y :: Double}
那么你可以做
Point {x = 5, y = 7}
但你仍然可以做
Point 5 7
就好像这些字段没有命名一样。但是请注意,记录语法只允许您指定一些字段,而如果您使用未命名的字段,则必须始终将它们全部指定。
不确定这是否是您想要的,但您始终可以通过自己编写 get 函数来模拟记录语法。
data A = A Int Int Int
y :: A -> Int
y (A _ num _) = num
z :: A -> Int
z (A _ _ num) = num
它更丑陋,但它与混合命名和未命名字段的效果相同。