Adapt to primitive 0.2
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 3 Dec 2009 15:14:42 +0000 (15:14 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 3 Dec 2009 15:14:42 +0000 (15:14 +0000)
Data/Vector/Mutable.hs
Data/Vector/Primitive/Mutable.hs
vector.cabal

index e9d29c7..148a8b2 100644 (file)
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-}
 
 -- |
 -- Module      : Data.Vector.Mutable
@@ -17,20 +17,20 @@ where
 
 import qualified Data.Vector.Generic.Mutable as G
 import           Data.Primitive.Array
-import           Control.Monad.Primitive ( PrimMonad )
+import           Control.Monad.Primitive
 import           Control.Monad.ST ( ST )
 
 #include "vector.h"
 
 -- | Mutable boxed vectors keyed on the monad they live in ('IO' or @'ST' s@).
-data MVector m a = MVector {-# UNPACK #-} !Int
+data MVector s a = MVector {-# UNPACK #-} !Int
                            {-# UNPACK #-} !Int
-                           {-# UNPACK #-} !(MutableArray m a)
+                           {-# UNPACK #-} !(MutableArray s a)
 
-type IOVector = MVector IO
-type STVector s = MVector (ST s)
+type IOVector = MVector RealWorld
+type STVector s = MVector s
 
-instance G.MVectorPure (MVector m) a where
+instance G.MVectorPure (MVector s) a where
   length (MVector _ n _) = n
   unsafeSlice (MVector i n arr) j m
     = UNSAFE_CHECK(checkSlice) "unsafeSlice" j m n
@@ -44,7 +44,7 @@ instance G.MVectorPure (MVector m) a where
       between x y z = x >= y && x < z
 
 
-instance PrimMonad m => G.MVector (MVector m) m a where
+instance (PrimMonad m, PrimState m ~ s) => G.MVector (MVector s) m a where
   {-# INLINE unsafeNew #-}
   unsafeNew n = UNSAFE_CHECK(checkLength) "unsafeNew" n
               $ do
index 6f6bb3c..54d265a 100644 (file)
@@ -1,4 +1,5 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, ScopedTypeVariables #-}
+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, ScopedTypeVariables,
+             TypeFamilies #-}
 
 -- |
 -- Module      : Data.Vector.Primitive.Mutable
@@ -24,14 +25,14 @@ import           Control.Monad.ST ( ST )
 #include "vector.h"
 
 -- | Mutable unboxed vectors. They live in the 'ST' monad.
-data MVector m a = MVector {-# UNPACK #-} !Int
+data MVector s a = MVector {-# UNPACK #-} !Int
                            {-# UNPACK #-} !Int
-                           {-# UNPACK #-} !(MutableByteArray m)
+                           {-# UNPACK #-} !(MutableByteArray s)
 
-type IOVector = MVector IO
-type STVector s = MVector (ST s)
+type IOVector = MVector RealWorld
+type STVector s = MVector s
 
-instance Prim a => G.MVectorPure (MVector m) a where
+instance Prim a => G.MVectorPure (MVector s) a where
   length (MVector _ n _) = n
   unsafeSlice (MVector i n arr) j m
     = UNSAFE_CHECK(checkSlice) "unsafeSlice" j m n
@@ -45,7 +46,8 @@ instance Prim a => G.MVectorPure (MVector m) a where
       between x y z = x >= y && x < z
 
 
-instance (Prim a, PrimMonad m) => G.MVector (MVector m) m a where
+instance (Prim a, PrimMonad m, PrimState m ~ s)
+           => G.MVector (MVector s) m a where
   {-# INLINE unsafeNew #-}
   unsafeNew n = UNSAFE_CHECK(checkLength) "unsafeNew" n
               $ do
index 4aecf92..2ab74b7 100644 (file)
@@ -83,7 +83,7 @@ Library
   Install-Includes:
         vector.h
 
-  Build-Depends: base >= 2 && < 5, ghc >= 6.9, primitive >= 0.1 && < 0.2
+  Build-Depends: base >= 2 && < 5, ghc >= 6.9, primitive >= 0.2 && < 0.3
 
   if impl(ghc<6.13)
     Ghc-Options: -finline-if-enough-args