gpt4 book ai didi

haskell - 何时使用 STRef 或 IORef?

转载 作者:行者123 更新时间:2023-12-03 12:09:00 42 4
gpt4 key购买 nike

STRef 和 IORef 之间到底有什么区别,我什么时候使用它们?据我所知,它们都是可变状态,那么它们存在的意义何在?

最佳答案

您可以在 IO 中做更多的事情monad 比 ST单子(monad)。后者提供可变引用,前者提供可变引用、异常捕获、线程,当然还有 IO。

使用可以解决您的问题的“最弱”或“更受限制”的工具通常是一个很好的 Haskell 实践,因为“更弱”的工具往往更容易理解和分析(这个原则在 Haskell 中出现的另一个地方是ApplicativeMonad 区别)。

因此,如果您只需要可变引用,请使用 ST . future 的维护者将能够通过查看类型来推断更多关于你的函数做什么(和不做什么)的事情。

强制使用 IORef 的示例情况s(或它们的表亲 MVar s)是当必须在两个不同的执行线程之间共享一个可变引用时。

还要记住,你可以逃脱 ST (这意味着你可以在纯函数中运行 ST 计算)但你不能逃避 IO .

关于haskell - 何时使用 STRef 或 IORef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20439316/

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