module Data.Var.ST
( module Data.Var.Class
, STVar
, STUVar
) where
#ifdef MODULE_Control_Monad_ST_Safe
import Control.Monad.ST.Safe
import qualified Control.Monad.ST.Lazy.Safe as Lazy
#else
import Control.Monad.ST
import qualified Control.Monad.ST.Lazy as Lazy
#endif
import Data.ByteArraySlice
import Data.STVar
import Data.Var.ByteArray
import Data.Var.Class
import Data.Typeable
newtype STUVar s a =
STUVar { unSTUVar :: ByteArrayVar s a
} deriving (Eq, Typeable)
instance ByteArraySlice a => Var (STUVar s) a (ST s) where
newVar = fmap STUVar . newVar
readVar = readVar . unSTUVar
writeVar = writeVar . unSTUVar
instance ByteArraySlice a => Var (STUVar s) a (Lazy.ST s) where
newVar = fmap STUVar . newVar
readVar = readVar . unSTUVar
writeVar = writeVar . unSTUVar