gpt4 book ai didi

f# - 记录 "with"语法中的泛型

转载 作者:行者123 更新时间:2023-12-02 11:59:22 29 4
gpt4 key购买 nike

如果我有一条包含通用字段的记录,在更改通用字段时是否有任何方法可以模仿方便的 with 语法?

即如果我有

type User<'photo> = // 'photo can be Bitmap or Url
{ first: string; last: string; address: string; phone: string; photo: 'photo }

我希望能够写出类似的东西

let loadUser(user: User<Url>): User<Bitmap> =
{ user with
photo = download user.photo }

但看起来我必须写这个。

let loadUser(user: User<Url>): User<Bitmap> =
{ first = user.first
last = user.last
address = user.address
phone = user.phone
photo = download user.photo }

有没有办法获得第一个语法?

最佳答案

不直接,但您可以将您的User 变成仿函数(对于照片 部分):

let fmap (f : 'a -> 'b) (user: User<'a>): User<'b> =
{ first = user.first
last = user.last
address = user.address
phone = user.phone
photo = f user.photo }

一次并写入(例如):

let loadUser (user : User<Url>) : User<Bitmap> =
fmap download user

如果您愿意,您也可以重命名 fmapwithPhoto let loadUser = withPhoto download :D

现在,photo 部分是任何类型的数据/类型可能有点奇怪,所以我会考虑将这部分重命名为 value - 但这只是我

关于f# - 记录 "with"语法中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30398881/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com