我正在开发一个使用大量IORef
's 到数据类型的程序。这是执行此操作的内存/处理器效率更高的方法:
[IORef Foo]
或者
IORef [Foo]
忽略我使用列表而不是向量或数组的事实。
我正在开发一个使用大量IORef
's 到数据类型的程序。这是执行此操作的内存/处理器效率更高的方法:
[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