Eq and Ord instances
[darcs-mirrors/vector.git] / Data / Vector / Unboxed.hs
index 87bf1f6..703ce5f 100644 (file)
@@ -1,5 +1,17 @@
 {-# LANGUAGE MagicHash, UnboxedTuples, FlexibleInstances, MultiParamTypeClasses #-}
 
+-- |
+-- Module      : Data.Vector.Unboxed
+-- Copyright   : (c) Roman Leshchinskiy 2008
+-- License     : BSD-style
+--
+-- Maintainer  : rl@cse.unsw.edu.au
+-- Stability   : experimental
+-- Portability : non-portable
+-- 
+-- Unboxed vectors based on 'Unbox'.
+--
+
 module Data.Vector.Unboxed (
   Vector(..), module Data.Vector.IVector
 ) where
@@ -19,18 +31,14 @@ data Vector a = Vector {-# UNPACK #-} !Int
                                       ByteArray#
 
 instance Unbox a => IVector Vector a where
-  {-# INLINE create #-}
-  create init = runST (do_create init)
-    where
-      do_create :: ST s (Mut.Vector (ST s) a) -> ST s (Vector a)
-      do_create init = do
-                         Mut.Vector i n marr# <- init
-                         ST (\s# -> case unsafeFreezeByteArray# marr# s# of
-                              (# s2#, arr# #) -> (# s2#, Vector i n arr# #)
-                            )
-
-  {-# INLINE length #-}
-  length (Vector _ n _) = n
+  {-# INLINE vnew #-}
+  vnew init = runST (do
+                       Mut.Vector i n marr# <- init
+                       ST (\s# -> case unsafeFreezeByteArray# marr# s# of
+                            (# s2#, arr# #) -> (# s2#, Vector i n arr# #)))
+
+  {-# INLINE vlength #-}
+  vlength (Vector _ n _) = n
 
   {-# INLINE unsafeSlice #-}
   unsafeSlice (Vector i _ arr#) j n = Vector (i+j) n arr#
@@ -38,3 +46,11 @@ instance Unbox a => IVector Vector a where
   {-# INLINE unsafeIndex #-}
   unsafeIndex (Vector (I# i#) _ arr#) (I# j#) f = f (at# arr# (i# +# j#))
 
+instance (Unbox a, Eq a) => Eq (Vector a) where
+  {-# INLINE (==) #-}
+  (==) = eq
+
+instance (Unbox a, Ord a) => Ord (Vector a) where
+  {-# INLINE compare #-}
+  compare = cmp
+