Haskell IORef 数组用法

5

我正在开发一个程序,它使用了大量的IORef来存储数据类型。哪种方法更节省内存和处理器资源:

[IORef Foo]

或者
IORef [Foo]

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


另一方面,[IORef] 允许您更改项目数量,而 IORef [] 则不允许。因此,建议使用 IORef [IORef]。 - MigMit
2
你确定不想用 IOArray 吗? - Carl
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接