我正在开发一个程序,该程序使用大量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