module Data.Ref.ST
( module Data.Ref.Class
, STRef
, STURef
) 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.Int
import Data.Ref.ByteArray
import Data.Ref.Class
import Data.STRef
import Data.Typeable
import Data.Word
import Foreign.Ptr
import Foreign.StablePtr
newtype STURef s a =
STURef { unSTURef :: ByteArrayRef s a
} deriving (Eq, Typeable)
instance Ref (STURef s) Bool (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Char (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) (Ptr a) (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) (FunPtr a) (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Float (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Double (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) (StablePtr a) (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int8 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int16 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int32 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int64 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word8 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word16 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word32 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word64 (ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Bool (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Char (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) (Ptr a) (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) (FunPtr a) (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Float (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Double (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) (StablePtr a) (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int8 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int16 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int32 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Int64 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word8 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word16 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word32 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef
instance Ref (STURef s) Word64 (Lazy.ST s) where
newRef = fmap STURef . newRef
readRef = readRef . unSTURef
writeRef = writeRef . unSTURef