From d3f5ad3bdaff328c686682a40955d7081f4afaa7 Mon Sep 17 00:00:00 2001 From: Kiana Sheibani Date: Tue, 20 Sep 2022 13:47:26 -0400 Subject: [PATCH] Fix crash when folding an empty array --- src/Data/NumIdr/PrimArray.idr | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Data/NumIdr/PrimArray.idr b/src/Data/NumIdr/PrimArray.idr index 50c5ad9..fe4fa83 100644 --- a/src/Data/NumIdr/PrimArray.idr +++ b/src/Data/NumIdr/PrimArray.idr @@ -137,7 +137,9 @@ unzipWith3 f arr = (map ((\(x,_,_) => x) . f) arr, export foldl : (b -> a -> b) -> b -> PrimArray a -> b -foldl f z (MkPrimArray size arr) = unsafePerformIO $ do +foldl f z (MkPrimArray size arr) = + if size == 0 then z + else unsafePerformIO $ do ref <- newIORef z for_ [0..pred size] $ \n => do x <- readIORef ref @@ -147,7 +149,9 @@ foldl f z (MkPrimArray size arr) = unsafePerformIO $ do export foldr : (a -> b -> b) -> b -> PrimArray a -> b -foldr f z (MkPrimArray size arr) = unsafePerformIO $ do +foldr f z (MkPrimArray size arr) = + if size == 0 then z + else unsafePerformIO $ do ref <- newIORef z for_ [pred size..0] $ \n => do x <- arrayDataGet n arr