STRef和IORef之间到底有什么区别,我什么时候使用它们?据我所知,它们都是用于可变状态的,那么它们都存在的意义是什么呢?
发布于 2013-12-07 16:28:54
它们各自提供相同的功能,但针对不同的monads。如果需要IO中的托管引用,则使用IORef;如果需要ST s中的托管引用,则使用STRef。
编辑:一个简短的例子:
import Control.Monad.ST
import Data.IORef
import Data.STRef
exampleSTRef :: ST s Int
exampleSTRef = do
counter <- newSTRef 0
modifySTRef counter (+ 1)
readSTRef counter
exampleIORef :: IO Int
exampleIORef = do
counter <- newIORef 0
modifyIORef counter (+ 1)
putStrLn "im in ur IO monad so i can do I/O"
readIORef counterhttps://stackoverflow.com/questions/20439316
复制相似问题