@@ -53,6 +53,7 @@ module Streamly.Internal.Data.Array.Foreign.Mut.Type
53 -- * Folding
53 -- * Folding
57 -- * Composable Folds
58 -- * Composable Folds
58 , toArrayMinChunk
59 , toArrayMinChunk
@@ -1105,7 +1106,7 @@ spliceWithDoubling dst@(Array start end bound) src = do
1105 newSize = max (oldSize * 2) (oldSize + srcLen)
1106 newSize = max (oldSize * 2) (oldSize + srcLen)
1106 when (newSize < oldSize + srcLen)
1107 when (newSize < oldSize + srcLen)
1108− $ "spliceWithDoubling: newSize is less than the total size "
1109+ $ "spliceWith: newSize is less than the total size "
1109 ++ "of arrays being appended. Please check the "
1110 ++ "of arrays being appended. Please check the "
1110 ++ "newSize function passed."
1111 ++ "newSize function passed."
1111 liftIO $ realloc newSize dst
1112 liftIO $ realloc newSize dst
@@ -1216,37 +1217,31 @@ asPtrUnsafe Array{..} act = do
1216 unsafeWithForeignPtr aStart $ \ptr -> act (castPtr ptr)
1217 unsafeWithForeignPtr aStart $ \ptr -> act (castPtr ptr)
1218-------------------------------------------------------------------------------
1219-------------------------------------------------------------------------------
1219−-- Instances
1220+-- Equality
1220-------------------------------------------------------------------------------
1221-------------------------------------------------------------------------------
1222−instance (Show a, Storable a) => Show (Array a) where
1223+-- | Compare if two arrays are equal.
1223− {-# INLINE showsPrec #-}
1224+--
1224− showsPrec _ = shows . toList
1225+-- /Pre-release/
1226−{-# INLINE arrcmp #-}
1226+{-# INLINE cmp #-}
1227−arrcmp :: Array a -> Array a -> Bool
1227+cmp :: MonadIO m => Array a -> Array a -> m Bool
1228−arrcmp arr1 arr2 =
1228+cmp arr1 arr2 =
1229− let !res = unsafeInlineIO $ do
1229+ liftIO $ do
1230− let ptr1 = unsafeForeignPtrToPtr $ aStart arr1
1230+ let ptr1 = unsafeForeignPtrToPtr $ aStart arr1
1231− let ptr2 = unsafeForeignPtrToPtr $ aStart arr2
1231+ let ptr2 = unsafeForeignPtrToPtr $ aStart arr2
1232− let len1 = aEnd arr1 `minusPtr` ptr1
1232+ let len1 = aEnd arr1 `minusPtr` ptr1
1233− let len2 = aEnd arr2 `minusPtr` ptr2
1233+ let len2 = aEnd arr2 `minusPtr` ptr2
1235− if len1 == len2
1235+ if len1 == len2
1236− then do
1238+ then return True
1237 r <- memcmp (castPtr ptr1) (castPtr ptr2) len1
1240 r <- memcmp (castPtr ptr1) (castPtr ptr2) len1
1238 touchForeignPtr $ aStart arr1
1241 touchForeignPtr $ aStart arr1
1239 touchForeignPtr $ aStart arr2
1242 touchForeignPtr $ aStart arr2
1240 return r
1243 return r
1241− else return False
1244+ else return False
1244−-- XXX we are assuming that Storable equality means element equality. This may
1245−-- or may not be correct? arrcmp is 40% faster compared to stream equality.
1246−instance (Storable a, Eq a) => Eq (Array a) where
1247− {-# INLINE (==) #-}
1249− -- arr1 == arr2 = runIdentity $ D.eqBy (==) (toStreamD arr1) (toStreamD arr2)
1251-------------------------------------------------------------------------------
1246-------------------------------------------------------------------------------
1252-- NFData
1247-- NFData