Eq and Ord instances
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sat, 12 Jul 2008 13:15:15 +0000 (13:15 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sat, 12 Jul 2008 13:15:15 +0000 (13:15 +0000)
Data/Vector.hs
Data/Vector/IVector.hs
Data/Vector/Unboxed.hs

index 78355d2..adac083 100644 (file)
@@ -46,3 +46,11 @@ instance IVector Vector a where
   unsafeIndex (Vector (I# i#) _ arr#) (I# j#) f
     = case indexArray# arr# (i# +# j#) of (# x #) -> f x
 
   unsafeIndex (Vector (I# i#) _ arr#) (I# j#) f
     = case indexArray# arr# (i# +# j#) of (# x #) -> f x
 
+instance Eq a => Eq (Vector a) where
+  {-# INLINE (==) #-}
+  (==) = eq
+
+instance Ord a => Ord (Vector a) where
+  {-# INLINE compare #-}
+  compare = cmp
+
index 1688b6b..e3e0370 100644 (file)
@@ -35,6 +35,9 @@ module Data.Vector.IVector (
   -- * Mapping and zipping
   map, zipWith,
 
   -- * Mapping and zipping
   map, zipWith,
 
+  -- * Comparisons
+  eq, cmp,
+
   -- * Filtering
   filter, takeWhileSlice, takeWhile, dropWhileSlice, dropWhile,
 
   -- * Filtering
   filter, takeWhileSlice, takeWhile, dropWhileSlice, dropWhile,
 
@@ -308,6 +311,17 @@ zipWith :: (IVector v a, IVector v b, IVector v c) => (a -> b -> c) -> v a -> v
 {-# INLINE zipWith #-}
 zipWith f xs ys = unstream (Stream.zipWith f (stream xs) (stream ys))
 
 {-# INLINE zipWith #-}
 zipWith f xs ys = unstream (Stream.zipWith f (stream xs) (stream ys))
 
+-- Comparisons
+-- -----------
+
+eq :: (IVector v a, Eq a) => v a -> v a -> Bool
+{-# INLINE eq #-}
+xs `eq` ys = stream xs == stream ys
+
+cmp :: (IVector v a, Ord a) => v a -> v a -> Ordering
+{-# INLINE cmp #-}
+cmp xs ys = compare (stream xs) (stream ys)
+
 -- Filtering
 -- ---------
 
 -- Filtering
 -- ---------
 
index fffada5..703ce5f 100644 (file)
@@ -46,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#))
 
   {-# 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
+