在Haskell中,给出以下记录:

data ARecord { labelA :: String, labelB :: Int }

我们得到以下功能:
labelA :: ARecord -> String
labelB :: ARecord -> Int

F#似乎不是这样工作的。但是,有类似的东西吗?

编辑

类似的意思是,使我免于必须手动定义函数(如@kaefer建议)。

最佳答案

它很容易定义。

type ARecord = { labelA : string; labelB : int }
let labelA { labelA = s } = s
// val labelA : ARecord -> string

编辑

以下函数将编译为相同的IL,并具有对后备字段的直接读取访问权限,而不是自动生成的实例属性。
与通常使用面向对象的点符号的经验相反,它不需要类型注释来确定记录类型。

let labelA' aRecord = aRecord.labelA
// val labelA' : aRecord:ARecord -> string

10-04 18:01