3

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

data A = A Int Int Int

或者

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

我想要类似的东西

data A = A {_::Int, y::Int, z::Int)
4

2 回答 2

2

如果任何字段被命名,那么它们必须被命名。

如果您不知道,即使字段已命名,您也不​​必每次都使用它们的名称。例如,如果您有

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

那么你可以做

Point {x = 5, y = 7}

但你仍然可以做

Point 5 7

就好像这些字段没有命名一样。但是请注意,记录语法只允许您指定一些字段,而如果您使用未命名的字段,则必须始终将它们全部指定。

于 2013-08-02T07:46:14.100 回答
1

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

data A = A Int Int Int

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

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

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

于 2013-08-02T01:24:47.857 回答