on master help sign in
Remove MonadIO constraint on Array.Generic.reader
commit5cab923c15fd16effc1cb1d2a64bc513473bfb3f authorAdithya Kumar <adithya@composewell.com> dateFri 4 Nov 2022, 15:39 (4 years ago) parent05572ed
2 files changed+19−7
core/src/Streamly/Internal/Data/Array/Generic.hs+8−3 core/src/Streamly/Internal/Data/Array/Generic/Mut/Type.hs+11−4
core/src/Streamly/Internal/Data/Array/Generic.hs+8−3
@@ -61,13 +61,15 @@ import Streamly.Internal.Data.Fold.Type (Fold(..))
6161import Streamly.Internal.Data.Stream.Type (Stream)
6262import Streamly.Internal.Data.Tuple.Strict (Tuple'(..), Tuple3'(..))
6363import Streamly.Internal.Data.Unfold.Type (Unfold(..))
64+import Streamly.Internal.System.IO (unsafeInlineIO)
6465
6566import qualified Streamly.Internal.Data.Array.Generic.Mut.Type as MArray
6667import qualified Streamly.Internal.Data.Fold.Type as FL
68+import qualified Streamly.Internal.Data.Producer.Type as Producer
69+import qualified Streamly.Internal.Data.Producer as Producer
6770import qualified Streamly.Internal.Data.Ring as RB
6871import qualified Streamly.Internal.Data.Stream.StreamD as D
6972import qualified Streamly.Internal.Data.Stream.Type as Stream
70−import qualified Streamly.Internal.Data.Unfold as Unfold
7173import qualified Text.ParserCombinators.ReadPrec as ReadPrec
7274
7375import Data.IORef
@@ -174,8 +176,11 @@ length :: Array a -> Int
174176length = arrLen
175177
176178{-# INLINE_NORMAL reader #-}
177−reader :: MonadIO m => Unfold m (Array a) a
178−reader = Unfold.lmap unsafeThaw MArray.reader
179+reader :: Monad m => Unfold m (Array a) a
180+reader =
181+ Producer.simplify
182+ $ Producer.translate unsafeThaw unsafeFreeze
183+ $ MArray.producerWith (return . unsafeInlineIO)
179184
180185-------------------------------------------------------------------------------
181186-- Elimination - to streams
core/src/Streamly/Internal/Data/Array/Generic/Mut/Type.hs+11−4
@@ -87,6 +87,7 @@ module Streamly.Internal.Data.Array.Generic.Mut.Type
8787 -- ** Unfolds
8888 , reader
8989 -- , readerRev
90+ , producerWith -- experimental
9091 , producer -- experimental
9192
9293 -- ** To containers
@@ -545,9 +546,9 @@ writeN n = FL.take n $ writeNUnsafe n
545546
546547-- | Resumable unfold of an array.
547548--
548−{-# INLINE_NORMAL producer #-}
549−producer :: MonadIO m => Producer m (Array a) a
550−producer = Producer step inject extract
549+{-# INLINE_NORMAL producerWith #-}
550+producerWith :: Monad m => (forall b. IO b -> m b) -> Producer m (Array a) a
551+producerWith liftio = Producer step inject extract
551552
552553 where
553554
@@ -562,9 +563,15 @@ producer = Producer step inject extract
562563 step (arr, i)
563564 | assert (arrLen arr >= 0) (i == arrLen arr) = return D.Stop
564565 step (arr, i) = do
565− x <- getIndexUnsafe arr i
566+ x <- liftio $ getIndexUnsafe arr i
566567 return $ D.Yield x (arr, i + 1)
567568
569+-- | Resumable unfold of an array.
570+--
571+{-# INLINE_NORMAL producer #-}
572+producer :: MonadIO m => Producer m (Array a) a
573+producer = producerWith liftIO
574+
568575-- | Unfold an array into a stream.
569576--
570577{-# INLINE_NORMAL reader #-}