我正在开发一个程序,它使用了大量的IORef
来存储数据类型。哪种方法更节省内存和处理器资源:
[IORef Foo]
或者
IORef [Foo]
请忽略我使用列表而不是向量或数组的事实。
我正在开发一个程序,它使用了大量的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
IOArray
吗? - Carl