packages feed

STMonadTrans 0.3.4 → 0.4

raw patch · 3 files changed

+336/−130 lines, 3 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

- Control.Monad.ST.Trans: instance (GHC.Base.Monad m, GHC.Base.Functor m) => GHC.Base.Applicative (Control.Monad.ST.Trans.Internal.STT s m)
- Control.Monad.ST.Trans: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.ST.Trans.Internal.STT s m)
- Control.Monad.ST.Trans: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Control.Monad.ST.Trans.Internal.STT s m)
- Control.Monad.ST.Trans: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.ST.Trans.Internal.STT s m)
- Control.Monad.ST.Trans: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.ST.Trans.Internal.STT s' m)
- Control.Monad.ST.Trans: instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.ST.Trans.Internal.STT s)
- Control.Monad.ST.Trans: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.ST.Trans.Internal.STT s m)
- Control.Monad.ST.Trans: instance GHC.Base.Functor (Control.Monad.ST.Trans.Internal.STTRet s)
- Control.Monad.ST.Trans: instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.ST.Trans.Internal.STT s m)
- Control.Monad.ST.Trans: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.ST.Trans.Internal.STT s m)
- Control.Monad.ST.Trans: instance GHC.Classes.Eq (Control.Monad.ST.Trans.STArray s i e)
- Control.Monad.ST.Trans: instance GHC.Classes.Eq (Control.Monad.ST.Trans.STRef s a)
+ Control.Monad.ST.Trans: runSTT :: Monad m => (forall s. STT s m a) -> m a
+ Control.Monad.ST.Trans.Internal: instance (GHC.Base.Monad m, GHC.Base.Functor m) => GHC.Base.Applicative (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.ST.Trans.Internal.STT s' m)
+ Control.Monad.ST.Trans.Internal: instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.ST.Trans.Internal.STT s)
+ Control.Monad.ST.Trans.Internal: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Functor (Control.Monad.ST.Trans.Internal.STTRet s)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) (GHC.Ptr.FunPtr a) (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) (GHC.Ptr.Ptr a) (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) (GHC.Stable.StablePtr a) (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Int.Int16 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Int.Int32 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Int.Int64 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Int.Int8 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Types.Bool (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Types.Char (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Types.Double (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Types.Float (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Types.Int (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Types.Word (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Word.Word16 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Word.Word32 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Word.Word64 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (Data.Array.Base.STUArray s) GHC.Word.Word8 (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => Data.Array.Base.MArray (GHC.Arr.STArray s) e (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.ST.Trans.Internal.STT s m)
+ Control.Monad.ST.Trans.Internal: liftST :: Applicative m => ST s a -> STT s m a
+ Control.Monad.ST.Trans.Internal: liftSTT :: STT s m a -> State# s -> m (STTRet s a)
- Control.Monad.ST.Trans: data STArray s i e
+ Control.Monad.ST.Trans: data STArray s i e :: * -> * -> * -> *
- Control.Monad.ST.Trans: data STRef s a
+ Control.Monad.ST.Trans: data STRef s a :: * -> * -> *

Files

Control/Monad/ST/Trans.hs view
@@ -2,7 +2,7 @@     MultiParamTypeClasses, UndecidableInstances, RecursiveDo #-} {- |    Module      :  Control.Monad.ST.Trans-   Copyright   :  Josef Svenningsson 2008-2010+   Copyright   :  Josef Svenningsson 2008-2017                   (c) The University of Glasgow, 1994-2000    License     :  BSD  @@ -24,6 +24,7 @@       -- * The ST Monad Transformer       STT,       runST,+      runSTT,       -- * Mutable references       STRef,       newSTRef,@@ -49,17 +50,17 @@ import GHC.Base import GHC.Arr (Ix(..), safeRangeSize, safeIndex,                  Array(..), arrEleBottom)+import qualified GHC.Arr as STArray+import GHC.ST hiding (runST, liftST)+import Control.Monad.ST hiding (runST) -import Control.Monad.ST.Trans.Internal+import Data.STRef (STRef)+import qualified Data.STRef as STRef -import Control.Monad.Fix-import Control.Monad.Trans-import Control.Monad.Error.Class-import Control.Monad.Reader.Class-import Control.Monad.State.Class-import Control.Monad.Writer.Class+import Data.Array.ST hiding (runSTArray)+import qualified Data.Array.ST as STArray -import Control.Applicative+import Control.Monad.ST.Trans.Internal  import Data.IORef @@ -71,64 +72,18 @@ isTrue# x = x #endif -instance Monad m => Monad (STT s m) where-  return a = STT $ \st -> return (STTRet st a)-  STT m >>= k = STT $ \st -> -    do ret <- m st-       case ret of-         STTRet new_st a -> -             unSTT (k a) new_st-  fail msg = lift (fail msg) -instance MonadTrans (STT s) where-  lift m = STT $ \st ->-   do a <- m-      return (STTRet st a)-      -liftSTT :: STT s m a -> State# s -> m (STTRet s a)-liftSTT (STT m) s = m s--instance (MonadFix m) => MonadFix (STT s m) where-  mfix k = STT $ \ s -> mdo-    ans@(STTRet _ r) <- liftSTT (k r) s-    return ans--instance Functor (STTRet s) where-  fmap f (STTRet s a) = STTRet s (f a)--instance Functor m => Functor (STT s m) where-  fmap f (STT g) = STT $ \s# -> (fmap . fmap) f (g s#)--instance (Monad m, Functor m) => Applicative (STT s m) where-  pure a = STT $ \s# -> return (STTRet s# a)-  (STT m) <*> (STT n) = STT $ \s1 ->-                        do (STTRet s2 f) <- m s1-                           (STTRet s3 x) <- n s2-                           return (STTRet s3 (f x))---- | Mutable references-data STRef s a = STRef (MutVar# s a)- -- | Create a new reference newSTRef :: Monad m => a -> STT s m (STRef s a)-newSTRef init = STT $ \st1 ->-    case newMutVar# init st1 of-      (# st2, var #) -> return (STTRet st2 (STRef var))+newSTRef init = liftST (STRef.newSTRef init)  -- | Reads the value of a reference readSTRef :: Monad m => STRef s a -> STT s m a-readSTRef (STRef var) = STT $ \st1 -> -    case readMutVar# var st1 of-      (# st2, a #) -> return (STTRet st2 a)+readSTRef ref = liftST (STRef.readSTRef ref)  -- | Modifies the value of a reference writeSTRef :: Monad m => STRef s a -> a -> STT s m ()-writeSTRef (STRef var) a = STT $ \st1 ->-    case writeMutVar# var a st1 of-      st2 -> return (STTRet st2 ())--instance Eq (STRef s a) where-  STRef v1 == STRef v2 = isTrue# (sameMutVar# v1 v2)+writeSTRef ref a = liftST (STRef.writeSTRef ref a)  {-# NOINLINE runST #-} -- | Executes a computation in the 'STT' monad transformer@@ -138,105 +93,54 @@           in do (STTRet st a) <- ( f realWorld# )                 return a --- Instances of other monad classes--instance MonadError e m => MonadError e (STT s m) where-  throwError e = lift (throwError e)-  catchError (STT m) f = STT $ \st -> catchError (m st) -                         (\e -> unSTT (f e) st)--instance MonadReader r m => MonadReader r (STT s m) where-  ask = lift ask-  local f (STT m) = STT $ \st -> local f (m st)--instance MonadState s m => MonadState s (STT s' m) where-  get = lift get-  put s = lift (put s)--instance MonadWriter w m => MonadWriter w (STT s m) where-  tell w = lift (tell w)-  listen (STT m)= STT $ \st1 -> do (STTRet st2 a, w) <- listen (m st1)-                                   return (STTRet st2 (a,w))-  pass (STT m) = STT $ \st1 -> pass (do (STTRet st2 (a,f)) <- m st1-                                        return (STTRet st2 a, f))---- Mutable arrays. See the definition in GHC.Arr---- | Mutable arrays-data STArray s i e = STArray !i !i !Int (MutableArray# s e)+{-# NOINLINE runSTT #-}+-- | Executes a computation in the 'STT' monad transformer+runSTT :: Monad m => (forall s. STT s m a) -> m a+runSTT m = let (STT f) = m+           in do (STTRet st a) <- ( f realWorld# )+                 return a -instance Eq (STArray s i e) where-  STArray _ _ _ arr1# == STArray _ _ _ arr2# = isTrue# (sameMutableArray# arr1# arr2#)+-- Mutable arrays.  -- | Creates a new mutable array newSTArray :: (Ix i, Monad m) => (i,i) -> e -> STT s m (STArray s i e)-newSTArray (l,u) init = STT $ \s1# ->-    case safeRangeSize (l,u)            of { n@(I# n#) ->-    case newArray# n# init s1#          of { (# s2#, marr# #) ->-    return (STTRet s2# (STArray l u n marr#)) }}+newSTArray bounds init = liftST (newArray bounds init)  -- | Returns the lowest and highest indices of the array boundsSTArray :: STArray s i e -> (i,i)-boundsSTArray (STArray l u _ _) = (l,u)+boundsSTArray = STArray.boundsSTArray  -- | Returns the number of elements in the array numElementsSTArray :: STArray s i e -> Int-numElementsSTArray (STArray _ _ n _) = n+numElementsSTArray = STArray.numElementsSTArray  -- | Retrieves an element from the array readSTArray :: (Ix i, Monad m) => STArray s i e -> i -> STT s m e-readSTArray marr@(STArray l u n _) i =-    unsafeReadSTArray marr (safeIndex (l,u) n i)+readSTArray arr i = liftST (readArray arr i)  unsafeReadSTArray :: (Ix i, Monad m) => STArray s i e -> Int -> STT s m e-unsafeReadSTArray (STArray _ _ _ marr#) (I# i#)-    = STT $ \s1# -> case readArray# marr# i# s1# of-                      (# s2#, e #) -> return (STTRet s2# e)+unsafeReadSTArray arr i = liftST (STArray.unsafeReadSTArray arr i)  -- | Modifies an element in the array-writeSTArray :: (Ix i, Monad m) => STArray s i e -> i -> e -> STT s m () -writeSTArray marr@(STArray l u n _) i e =-    unsafeWriteSTArray marr (safeIndex (l,u) n i) e+writeSTArray :: (Ix i, Monad m) => STArray s i e -> i -> e -> STT s m ()+writeSTArray arr i e = liftST (writeArray arr i e) -unsafeWriteSTArray :: (Ix i, Monad m) => STArray s i e -> Int -> e -> STT s m () -unsafeWriteSTArray (STArray _ _ _ marr#) (I# i#) e = STT $ \s1# ->-    case writeArray# marr# i# e s1# of-        s2# -> return (STTRet s2# ())+unsafeWriteSTArray :: (Ix i, Monad m) => STArray s i e -> Int -> e -> STT s m ()+unsafeWriteSTArray arr i e = liftST (STArray.unsafeWriteSTArray arr i e)  -- | Copy a mutable array and turn it into an immutable array freezeSTArray :: (Ix i,Monad m) => STArray s i e -> STT s m (Array i e)-freezeSTArray (STArray l u n@(I# n#) marr#) = STT $ \s1# ->-    case newArray# n# arrEleBottom s1#  of { (# s2#, marr'# #) ->-    let copy i# s3# | isTrue# (i# ==# n#) = s3#-                    | otherwise           =-            case readArray# marr# i# s3# of { (# s4#, e #) ->-            case writeArray# marr'# i# e s4# of { s5# ->-            copy (i# +# 1#) s5# }} in-    case copy 0# s2#                    of { s3# ->-    case unsafeFreezeArray# marr'# s3#  of { (# s4#, arr# #) ->-    return (STTRet s4# (Array l u n arr# )) }}}+freezeSTArray arr = liftST (STArray.freezeSTArray arr)  unsafeFreezeSTArray :: (Ix i, Monad m) => STArray s i e -> STT s m (Array i e)-unsafeFreezeSTArray (STArray l u n marr#) = STT $ \s1# ->-    case unsafeFreezeArray# marr# s1#   of { (# s2#, arr# #) ->-    return (STTRet s2# (Array l u n arr# )) }+unsafeFreezeSTArray arr = liftST (STArray.unsafeFreezeSTArray arr)  -- | Copy an immutable array and turn it into a mutable array thawSTArray :: (Ix i, Monad m) => Array i e -> STT s m (STArray s i e)-thawSTArray (Array l u n@(I# n#) arr#) = STT $ \s1# ->-    case newArray# n# arrEleBottom s1#  of { (# s2#, marr# #) ->-    let copy i# s3# | isTrue# (i# ==# n#) = s3#-                    | otherwise           =-            case indexArray# arr# i#    of { (# e #) ->-            case writeArray# marr# i# e s3# of { s4# ->-            copy (i# +# 1#) s4# }} in-    case copy 0# s2#                    of { s3# ->-    return (STTRet s3# (STArray l u n marr# )) }}+thawSTArray arr = liftST (STArray.thawSTArray arr)  unsafeThawSTArray :: (Ix i, Monad m) => Array i e -> STT s m (STArray s i e)-unsafeThawSTArray (Array l u n arr#) = STT $ \s1# ->-    case unsafeThawArray# arr# s1#      of { (# s2#, marr# #) ->-    return (STTRet s2# (STArray l u n marr# )) }+unsafeThawSTArray arr = liftST (STArray.unsafeThawSTArray arr)  -- | A safe way to create and work with a mutable array before returning an -- immutable array for later perusal.  This function avoids copying
Control/Monad/ST/Trans/Internal.hs view
@@ -24,7 +24,24 @@ module Control.Monad.ST.Trans.Internal where  import GHC.Base+import GHC.ST hiding (liftST) +import Control.Monad.Fix+import Control.Monad.Trans+import Control.Monad.Error.Class+import Control.Monad.Reader.Class+import Control.Monad.State.Class+import Control.Monad.Writer.Class++import Control.Applicative++import Data.Array.ST+import Data.Array.Base+import GHC.Int    (Int8,  Int16,  Int32,  Int64)+import GHC.Word   (Word8, Word16, Word32, Word64)+import GHC.Ptr    (Ptr, FunPtr)+import GHC.Stable (StablePtr)+ -- | 'STT' is the monad transformer providing polymorphic updateable references newtype STT s m a = STT (State# s -> m (STTRet s a)) @@ -35,3 +52,288 @@ --   around. This type is essentially a pair, but an ordinary pair is not --   not allowed to contain unboxed types. data STTRet s a = STTRet (State# s) a++-- | Lifting the `ST` monad into `STT`. The library uses this function+--   extensively to be able to reuse functions from `ST`.+liftST :: Applicative m => ST s a -> STT s m a+liftST (ST f) = STT (\s -> let (# s', a #) = f s in pure (STTRet s' a))+{-# INLINE liftST #-}++-- All instances have to go in this module because otherwise they+-- would be orphan instances.++instance Monad m => Monad (STT s m) where+  return a = STT $ \st -> return (STTRet st a)+  STT m >>= k = STT $ \st -> +    do ret <- m st+       case ret of+         STTRet new_st a -> +             unSTT (k a) new_st+  fail msg = lift (fail msg)++instance MonadTrans (STT s) where+  lift m = STT $ \st ->+   do a <- m+      return (STTRet st a)+      +liftSTT :: STT s m a -> State# s -> m (STTRet s a)+liftSTT (STT m) s = m s++instance (MonadFix m) => MonadFix (STT s m) where+  mfix k = STT $ \ s -> mdo+    ans@(STTRet _ r) <- liftSTT (k r) s+    return ans++instance Functor (STTRet s) where+  fmap f (STTRet s a) = STTRet s (f a)++instance Functor m => Functor (STT s m) where+  fmap f (STT g) = STT $ \s# -> (fmap . fmap) f (g s#)++instance (Monad m, Functor m) => Applicative (STT s m) where+  pure a = STT $ \s# -> return (STTRet s# a)+  (STT m) <*> (STT n) = STT $ \s1 ->+                        do (STTRet s2 f) <- m s1+                           (STTRet s3 x) <- n s2+                           return (STTRet s3 (f x))++-- Instances of other monad classes++instance MonadError e m => MonadError e (STT s m) where+  throwError e = lift (throwError e)+  catchError (STT m) f = STT $ \st -> catchError (m st) +                         (\e -> unSTT (f e) st)++instance MonadReader r m => MonadReader r (STT s m) where+  ask = lift ask+  local f (STT m) = STT $ \st -> local f (m st)++instance MonadState s m => MonadState s (STT s' m) where+  get = lift get+  put s = lift (put s)++instance MonadWriter w m => MonadWriter w (STT s m) where+  tell w = lift (tell w)+  listen (STT m)= STT $ \st1 -> do (STTRet st2 a, w) <- listen (m st1)+                                   return (STTRet st2 (a,w))+  pass (STT m) = STT $ \st1 -> pass (do (STTRet st2 (a,f)) <- m st1+                                        return (STTRet st2 a, f))++-- MArray instances++instance Monad m => MArray (STArray s) e (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Bool (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Char (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Int (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Word (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) (Ptr a) (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) (FunPtr a) (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Float (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Double (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) (StablePtr a) (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Int8 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Int16 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Int32 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Int64 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Word8 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Word16 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Word32 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)++instance Monad m => MArray (STUArray s) Word64 (STT s m) where+    {-# INLINE getBounds #-}+    getBounds arr = liftST (getBounds arr)+    {-# INLINE getNumElements #-}+    getNumElements arr = liftST (getNumElements arr)+    {-# INLINE newArray #-}+    newArray bounds e = liftST (newArray bounds e)+    {-# INLINE unsafeRead #-}+    unsafeRead arr i = liftST (unsafeRead arr i)+    {-# INLINE unsafeWrite #-}+    unsafeWrite arr i e = liftST (unsafeWrite arr i e)+
STMonadTrans.cabal view
@@ -1,5 +1,5 @@ name:		STMonadTrans-version:	0.3.4+version:	0.4 cabal-version:  >= 1.8 license:	BSD3 license-file:	LICENSE