@@ -90,6 +90,9 @@ import qualified Streamly.Internal.Data.Parser.ParserD as PRD
9090import qualified Streamly.Internal.Data.Stream.IsStream as S
9191import qualified Streamly.Internal.Data.Stream.StreamD as D
9292
93+-- XXX Since these are immutable arrays MonadIO constraint can be removed from
94+-- most places.
95+
9396-------------------------------------------------------------------------------
9497-- Generation
9598-------------------------------------------------------------------------------
@@ -115,13 +118,13 @@ arraysOf n str = fromStreamD $ A.arraysOf n (toStreamD str)
115118
116119-- | Convert a stream of arrays into a stream of their elements.
117120--
118−-- Same as the following but more efficient:
121+-- Same as the following:
119122--
120123-- > concat = Stream.unfoldMany Array.read
121124--
122125-- @since 0.7.0
123126{-# INLINE concat #-}
124−concat :: (IsStream t, MonadIO m, Storable a) => t m (Array a) -> t m a
127+concat :: (IsStream t, Monad m, Storable a) => t m (Array a) -> t m a
125128-- concat m = fromStreamD $ A.flattenArrays (toStreamD m)
126129-- concat m = fromStreamD $ D.concatMap A.toStreamD (toStreamD m)
127130concat m = fromStreamD $ D.unfoldMany A.read (toStreamD m)
@@ -133,8 +136,9 @@ concat m = fromStreamD $ D.unfoldMany A.read (toStreamD m)
133136--
134137-- @since 0.7.0
135138{-# INLINE concatRev #-}
136−concatRev :: (IsStream t, MonadIO m, Storable a) => t m (Array a) -> t m a
137−concatRev m = fromStreamD $ A.flattenArraysRev (toStreamD m)
139+concatRev :: (IsStream t, Monad m, Storable a) => t m (Array a) -> t m a
140+-- concatRev m = fromStreamD $ A.flattenArraysRev (toStreamD m)
141+concatRev m = fromStreamD $ D.unfoldMany A.readRev (toStreamD m)
138142
139143-------------------------------------------------------------------------------
140144-- Intersperse and append
@@ -145,11 +149,11 @@ concatRev m = fromStreamD $ A.flattenArraysRev (toStreamD m)
145149--
146150-- /Pre-release/
147151{-# INLINE interpose #-}
148−interpose :: (MonadIO m, IsStream t, Storable a) => a -> t m (Array a) -> t m a
152+interpose :: (Monad m, IsStream t, Storable a) => a -> t m (Array a) -> t m a
149153interpose x = S.interpose x A.read
150154
151155{-# INLINE intercalateSuffix #-}
152−intercalateSuffix :: (MonadIO m, IsStream t, Storable a)
156+intercalateSuffix :: (Monad m, IsStream t, Storable a)
153157 => Array a -> t m (Array a) -> t m a
154158intercalateSuffix = S.intercalateSuffix A.read
155159
@@ -158,7 +162,7 @@ intercalateSuffix = S.intercalateSuffix A.read
158162--
159163-- @since 0.7.0
160164{-# INLINE interposeSuffix #-}
161−interposeSuffix :: (MonadIO m, IsStream t, Storable a)
165+interposeSuffix :: (Monad m, IsStream t, Storable a)
162166 => a -> t m (Array a) -> t m a
163167-- interposeSuffix x = fromStreamD . A.unlines x . toStreamD
164168interposeSuffix x = S.interposeSuffix x A.read
@@ -167,6 +171,7 @@ data FlattenState s a =
167171 OuterLoop s
168172 | InnerLoop s !MA.ArrayContents !(Ptr a) !(Ptr a)
169173
174+-- XXX Remove monadIO constraint
170175{-# INLINE_NORMAL unlines #-}
171176unlines :: forall m a. (MonadIO m, Storable a)
172177 => a -> D.Stream m (Array a) -> D.Stream m a
@@ -283,6 +288,7 @@ _splitOn byte (D.Stream step state) = D.Stream step' (Initial state)
283288 step' _ (Yielding arr next) = return $ D.Yield arr next
284289 step' _ Finishing = return D.Stop
285290
291+-- XXX Remove MonadIO constraint.
286292-- | Split a stream of arrays on a given separator byte, dropping the separator
287293-- and coalescing all the arrays between two separators into a single array.
288294--