我刚刚开始学习Purescript所以我希望这不是一个愚蠢的问题.
假设我们有一个对象
a = {x:1,y:2}
Run Code Online (Sandbox Code Playgroud)
我们想要将x改为等于2.据我所知,如果我们使用ST monad,我们将不得不复制整个对象以更改值.如果初始对象很大,这将是非常低效的.改变对象的正确方法是什么?
该ST单子是一个很好的做法,但根据您的使用情况下,有可能会或可能不会是这个标准库函数.
该Data.StrMap模块purescript-maps定义外类型与串钥匙均匀的记录,所以如果你的价值观都具有相同的类型,你可以用Data.StrMap.ST变异的记录到位.
如果没有,您应该可以轻松地定义一个函数来使用STFFI 更新记录.棘手的一点是选择正确的类型.如果您想为特定键执行某些操作,可以编写一个函数
setFoo :: forall r a h eff. STRef h { foo :: a | r } -> a -> Eff (st :: ST h | eff) Unit
Run Code Online (Sandbox Code Playgroud)
例如.在不损失类型安全性的情况下定义通用setter会更加困难.这是通过以下方式进行权衡Data.StrMap:您将自己限制为单个值类型,但可以使用任意键.
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |