在Haskell中,给出了这个记录:
data ARecord { labelA :: String, labelB :: Int }
我们得到了这个功能:
labelA :: ARecord -> String
labelB :: ARecord -> Int
F#似乎没有这种方式。但是,有类似的东西吗?
修改
通过类似的东西,我的意思是让我不必手动定义函数,就像@kaefer建议的那样。
答案 0 :(得分:2)
很容易定义。
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