From cf9c58c4998795c51ed4a6741e401d4ce3e8ece6 Mon Sep 17 00:00:00 2001 From: Ranjeet Kumar Ranjan Date: Fri, 14 Jul 2023 19:49:43 +0530 Subject: [PATCH] Change signature of getIndex to return Maybe --- .../Streamly/Internal/Data/Array/Generic/Mut/Type.hs | 6 +++--- core/src/Streamly/Internal/Data/Array/Mut/Type.hs | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/core/src/Streamly/Internal/Data/Array/Generic/Mut/Type.hs b/core/src/Streamly/Internal/Data/Array/Generic/Mut/Type.hs index fdb683c334..93a58d8321 100644 --- a/core/src/Streamly/Internal/Data/Array/Generic/Mut/Type.hs +++ b/core/src/Streamly/Internal/Data/Array/Generic/Mut/Type.hs @@ -468,11 +468,11 @@ getIndexUnsafe n MutArray {..} = -- | /O(1)/ Lookup the element at the given index. Index starts from 0. -- {-# INLINE getIndex #-} -getIndex :: MonadIO m => Int -> MutArray a -> m a +getIndex :: MonadIO m => Int -> MutArray a -> m (Maybe a) getIndex i arr@MutArray {..} = if i >= 0 && i < arrLen - then getIndexUnsafe i arr - else invalidIndex "getIndex" i + then Just <$> getIndexUnsafe i arr + else return Nothing ------------------------------------------------------------------------------- -- Subarrays diff --git a/core/src/Streamly/Internal/Data/Array/Mut/Type.hs b/core/src/Streamly/Internal/Data/Array/Mut/Type.hs index 2b1a0c81ee..fdc1f6b578 100644 --- a/core/src/Streamly/Internal/Data/Array/Mut/Type.hs +++ b/core/src/Streamly/Internal/Data/Array/Mut/Type.hs @@ -994,12 +994,12 @@ getIndexUnsafe i MutArray{..} = do -- | /O(1)/ Lookup the element at the given index. Index starts from 0. -- {-# INLINE getIndex #-} -getIndex :: forall m a. (MonadIO m, Unbox a) => Int -> MutArray a -> m a +getIndex :: forall m a. (MonadIO m, Unbox a) => Int -> MutArray a -> m (Maybe a) getIndex i MutArray{..} = do let index = INDEX_OF(arrStart,i,a) if i >= 0 && INDEX_VALID(index,arrEnd,a) - then liftIO $ peekWith arrContents index - else invalidIndex "getIndex" i + then liftIO $ Just <$> peekWith arrContents index + else return Nothing -- | /O(1)/ Lookup the element at the given index from the end of the array. -- Index starts from 0. @@ -1038,7 +1038,9 @@ getIndicesD liftio (D.Stream stepi sti) = Unfold step inject case r of D.Yield i s -> do x <- liftio $ getIndex i (MutArray contents start end undefined) - return $ D.Yield x (GetIndicesState contents start end s) + case x of + Just v -> return $ D.Yield v (GetIndicesState contents start end s) + Nothing -> error "Invalid Index" D.Skip s -> return $ D.Skip (GetIndicesState contents start end s) D.Stop -> return D.Stop