Haskell IORef array usage



我正在开发一个程序,该程序使用大量IORef的数据类型。哪种方式对内存/处理器更有效:

[IORef Foo]

IORef [Foo]

忽略我使用列表而不是向量或数组的事实。

使用[IORef Foo]您可以轻松更新元素,使用 IORef [Foo] ,您只能更新整个列表。由于您可能希望在不复制的情况下有效地更新元素,因此您需要[IORef Foo] .想想看,你想要一个可变事物的列表,而不是一个可变的不可变事物列表。

举个例子

import Data.IORef
makeTest :: IO [IORef Int]
makeTest = sequence [newIORef 0, newIORef 1, newIORef 2]
main = do
  test <- makeTest
  readIORef (test !! 1) >>= print
  modifyIORef (test !! 1) (+1) -- Doesn't copy list
  readIORef (test !! 1) >>= print

相关内容

  • 没有找到相关文章

最新更新