@@ -274,6 +274,7 @@ _splitOn byte (D.Stream step state) = D.Stream step' (Initial state)
274274 case r of
275275 D.Yield arr s -> do
276276 (arr1, marr2) <- A.breakOn byte arr
277+ -- XXX Should use MutArray.splice
277278 buf' <- A.splice buf arr1
278279 return $ case marr2 of
279280 Nothing -> D.Skip (Buffering s buf')
@@ -304,7 +305,11 @@ splitOn
304305 => Word8
305306 -> Stream m (Array Word8)
306307 -> Stream m (Array Word8)
307−splitOn byte = D.splitInnerBy (A.breakOn byte) A.splice
308+splitOn byte =
309+ fmap A.unsafeFreeze
310+ -- XXX use spliceExp and rightSize?
311+ . D.splitInnerBy (MA.breakOn byte) MA.splice
312+ . fmap A.unsafeThaw
308313
309314{-# INLINE splitOnSuffix #-}
310315splitOnSuffix
@@ -313,7 +318,12 @@ splitOnSuffix
313318 -> Stream m (Array Word8)
314319 -> Stream m (Array Word8)
315320-- splitOn byte s = fromStreamD $ A.splitOn byte $ toStreamD s
316−splitOnSuffix byte = D.splitInnerBySuffix (A.breakOn byte) A.splice
321+splitOnSuffix byte =
322+ fmap A.unsafeFreeze
323+ -- XXX use spliceExp and rightSize?
324+ . D.splitInnerBySuffix
325+ (\arr -> MA.byteLength arr == 0) (MA.breakOn byte) MA.splice
326+ . fmap A.unsafeThaw
317327
318328-------------------------------------------------------------------------------
319329-- Elimination - Running folds