5

我正在开发一个使用大量IORef's 到数据类型的程序。这是执行此操作的内存/处理器效率更高的方法:

[IORef Foo]

或者

IORef [Foo]

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

4

1 回答 1

9

使用,[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
于 2014-01-15T05:44:36.310 回答