You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PureScript中部分更新Record(记录)

在PureScript中更新Record的部分字段

嘿,作为PureScript初学者碰到记录更新的问题太正常啦!你想要实现类似TypeScript里{...a, height: 180}的部分字段更新,PureScript其实有非常直观的语法支持,而且还自带类型安全检查。

最常用的记录更新语法

PureScript内置了记录更新语法,写法比TS的扩展运算符更简洁,直接在原记录后面跟上要更新的字段即可:

-- 先复用你定义的Employee类型
type Employee = { firstName :: String, lastName :: String, address :: String, height :: Number, weight :: Number }

-- 假设你已有一个Employee实例
a :: Employee
a = { firstName: "Alice", lastName: "Smith", address: "456 Oak Ave", height: 165, weight: 55 }

-- 仅更新height字段,和你要的TS效果完全一致
updatedA :: Employee
updatedA = a { height = 180 }

这个语法会自动保留原记录的所有其他字段,只替换你指定的字段值,而且编译器会严格检查你更新的字段是否属于Employee类型——如果不小心把height写成heigth,会直接报错,避免拼写错误。

更新多个字段的情况

如果需要同时更新多个字段,只需要在大括号里添加更多字段即可:

-- 同时更新height和weight
updatedA2 :: Employee
updatedA2 = a { height = 180, weight = 60 }

可选:使用Record模块的底层函数

如果你需要更动态的更新(比如字段名是动态生成的),可以使用Data.Record模块里的update函数,但这种场景在日常开发中比较少见,还是上面的语法糖更常用:

import Data.Record (update)

updatedA3 :: Employee
updatedA3 = update "height" (const 180) a

怎么样,是不是很简单?PureScript的记录更新语法既简洁又安全,完全能满足你部分字段更新的需求~

内容的提问来源于stack exchange,提问作者Niko Modric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:02:09