module Data.Var.IO
( module Data.Var.Class
, IOVar
, IOUVar
) where
#ifdef MODULE_Control_Monad_ST_Safe
import Control.Monad.ST.Safe (RealWorld)
#else
import Control.Monad.ST (RealWorld)
#endif
import Data.ByteArraySlice
import Data.IOVar
import Data.Var.ByteArray
import Data.Var.Class
import Data.Typeable
newtype IOUVar a =
IOUVar { unIOUVar :: ByteArrayVar RealWorld a
} deriving (Eq, Typeable)
instance ByteArraySlice a => Var IOUVar a IO where
newVar = fmap IOUVar . newVar
readVar = readVar . unIOUVar
writeVar = writeVar . unIOUVar