如何解决使用 STArray 并忽略 Purescript
我想我已经接近我想要的了,尽管我怀疑我不了解 thaw
/ TH Region
的工作原理。
这是我想要实现的(至少大致上)
modifyPerIndex :: forall t a. Foldable t => t (Tuple Int (a -> a)) -> Array a -> Array a
modifyPerIndex foldableActions array = run do
mutableArray <- thaw array
let actions = fromFoldable foldableActions
foreach actions (\(Tuple index action) -> modify index action mutableArray)
freeze mutableArray
这就是我想象的 updateAtIndices
工作方式。我想我可以通过读取值、应用 modifyPerIndex
并将结果映射到要发送到 updateAtIndices 的元组列表来编写 updateAtIndices
来使用 (a -> a)
。
我很好奇如何做到这一点。
在上面的代码中,modify
返回 ST h Boolean
,我想将其更改为 ST h Unit
。那就是我迷路的地方。我知道这里的 h
是对可变数据施加的约束,以阻止它离开 run
,我不明白如何使用它。
解决方法
有几个选项。但这与h
无关。您不必“使用”它做任何事情,也完全不必担心。
首先,最愚蠢和直接的方法 - 只需将结果绑定到一个被忽略的变量,然后单独返回 unit
:
foreach actions \(Tuple index action) -> do
_ <- modify index action mutableArray
pure unit
或者,您可以使用 void
,它在幕后或多或少地做同样的事情:
foreach actions \(Tuple index action) -> void $ modify index action mutableArray
但我会直接使用 for_
,它与 foreach
相同,但适用于任何 monad(不仅仅是 ST
)并且忽略单个迭代的返回值:>
for_ actions \(Tuple index action) -> modify index action mutableArray
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。