繁体   English   中英

是否可以将F#record的标签用作Haskell中的函数或类似的东西?

[英]Is it possible to use F# record's labels as functions like in Haskell, or something similar?

在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM