Typeable instances for mutable vectors
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 7 Apr 2010 03:12:59 +0000 (03:12 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 7 Apr 2010 03:12:59 +0000 (03:12 +0000)
Data/Vector/Mutable.hs
Data/Vector/Primitive/Mutable.hs
Data/Vector/Storable/Mutable.hs
Data/Vector/Unboxed/Base.hs

index f78d4bc..8f94184 100644 (file)
@@ -31,12 +31,15 @@ import           Control.Monad.Primitive
 
 import Prelude hiding ( length, read )
 
+import Data.Typeable ( Typeable )
+
 #include "vector.h"
 
 -- | Mutable boxed vectors keyed on the monad they live in ('IO' or @'ST' s@).
 data MVector s a = MVector {-# UNPACK #-} !Int
                            {-# UNPACK #-} !Int
                            {-# UNPACK #-} !(MutableArray s a)
+        deriving ( Typeable )
 
 type IOVector = MVector RealWorld
 type STVector s = MVector s
index 224a562..d41bd22 100644 (file)
@@ -34,12 +34,15 @@ import           Control.Monad ( liftM )
 
 import Prelude hiding( length, read )
 
+import Data.Typeable ( Typeable )
+
 #include "vector.h"
 
 -- | Mutable vectors of primitive types.
 data MVector s a = MVector {-# UNPACK #-} !Int
                            {-# UNPACK #-} !Int
                            {-# UNPACK #-} !(MutableByteArray s)
+        deriving ( Typeable )
 
 type IOVector = MVector RealWorld
 type STVector s = MVector s
index a745328..244f18a 100644 (file)
@@ -42,12 +42,15 @@ import Control.Monad.Primitive
 
 import Prelude hiding( length, read )
 
+import Data.Typeable ( Typeable )
+
 #include "vector.h"
 
 -- | Mutable 'Storable'-based vectors
 data MVector s a = MVector {-# UNPACK #-} !(Ptr a)
                            {-# UNPACK #-} !Int
                            {-# UNPACK #-} !(ForeignPtr a)
+        deriving ( Typeable )
 
 type IOVector = MVector RealWorld
 type STVector s = MVector s
index 84d06cd..c1c26e7 100644 (file)
@@ -28,7 +28,7 @@ import Data.Word ( Word, Word8, Word16, Word32, Word64 )
 import Data.Int  ( Int8, Int16, Int32, Int64 )
 import Data.Complex
 
-import Data.Typeable ( Typeable1(..), mkTyConApp, mkTyCon )
+import Data.Typeable ( Typeable1(..), Typeable2(..), mkTyConApp, mkTyCon )
 import Data.Data     ( Data(..) )
 
 #include "vector.h"
@@ -53,6 +53,9 @@ vectorTy = "Data.Vector.Unboxed.Vector"
 instance Typeable1 Vector where
   typeOf1 _ = mkTyConApp (mkTyCon vectorTy) []
 
+instance Typeable2 MVector where
+  typeOf2 _ = mkTyConApp (mkTyCon "Data.Vector.Unboxed.Mutable.MVector") []
+
 instance (Data a, Unbox a) => Data (Vector a) where
   gfoldl       = G.gfoldl
   toConstr _   = error "toConstr"