gpt4 book ai didi

purescript - Purescript 中的变异状态

转载 作者:行者123 更新时间:2023-12-02 23:31:47 29 4
gpt4 key购买 nike

我刚刚开始学习 Purescript,所以我希望这不是一个愚蠢的问题。

假设我们有一个对象

a = {x:1,y:2}

我们想要将 x 更改为等于 2。据我所知,如果我们使用 ST monad,我们将必须复制整个对象才能更改值。如果初始对象很大,那么效率会非常低。原地变异对象的正确方法是什么?

最佳答案

ST monad 是一种很好的方法,但根据您的用例,可能有也可能没有标准库函数。

purescript-maps 中的 Data.StrMap 模块为具有字符串键的同类记录定义了一个外部类型,因此如果您的值都具有相同的类型,您可以使用Data.StrMap.ST 就地改变您的记录。

如果没有,您应该能够轻松定义一个函数来使用 ST 和 FFI 就地更新记录。棘手的一点是选择正确的类型。如果您想对特定键执行某些操作,您可以编写一个函数

setFoo :: forall r a h eff. STRef h { foo :: a | r } -> a -> Eff (st :: ST h | eff) Unit
例如。在不失去类型安全性的情况下定义通用 setter 会更加困难。这是 Data.StrMap 所做的权衡:您将自己限制为单一值类型,但可以使用任意键。

关于purescript - Purescript 中的变异状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744692/

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