>>> S.stdoutLn $ S.map reverse $ each (words "alpha beta") ahpla ateb
mapped :: (forall x. Stream (Of a) IO x -> IO (Of b x)) -> Stream (Stream (Of a) IO) IO r -> Stream (Of b) IO rto process groups which have been demarcated in an effectful, IO-based stream by grouping functions like group, split or breaks. Summary functions like fold, foldM, mconcat or toList are often used to define the transformation argument. For example:
>>> S.toList_ $ S.mapped S.toList $ S.split 'c' (S.each "abcde") ["ab","de"]maps and mapped obey these rules:
maps id = id mapped return = id maps f . maps g = maps (f . g) mapped f . mapped g = mapped (f <=< g) maps f . mapped g = mapped (fmap f . g) mapped f . maps g = mapped (f <=< fmap g)maps is more fundamental than mapped, which is best understood as a convenience for effecting this frequent composition:
mapped phi = decompose . maps (Compose . phi)
maps id = id maps f . maps g = maps (f . g)
mapsM phi = decompose . maps (Compose . phi)The streaming prelude exports the same function under the better name mapped, which overlaps with the lens libraries.
mapsMPost phi = decompose . mapsPost (Compose . phi)The streaming prelude exports the same function under the better name mappedPost, which overlaps with the lens libraries.
mapsPost id = id mapsPost f . mapsPost g = mapsPost (f . g) mapsPost f = maps fmapsPost is essentially the same as maps, but it imposes a Functor constraint on its target functor rather than its source functor. It should be preferred if fmap is cheaper for the target functor than for the source functor.
>>> S.print $ S.mapM readIORef $ S.chain (\ior -> modifyIORef ior (*100)) $ S.mapM newIORef $ each [1..6] 100 200 300 400 500 600See also chain for a variant of this which ignores the return value of the function and just uses the side effects.
>>> S.mapM_ Prelude.print $ each [1..3] 1 2 3
>>> rest <- S.mapM_ Prelude.print $ S.splitAt 3 $ each [1..10] 1 2 3 >>> S.sum rest 49 :> ()
>>> S.mapOf even (1:>"hi") False :> "hi"mapOf is just first from the Bifunctor instance
>>> first even (1:>"hi") False :> "hi"and is contained in the _first lens
>>> import Lens.Micro >>> over S._first even (1:>"hi") False :> "hi"
>>> S.foldMap Sum $ S.take 2 (S.stdinLn) 1<Enter> 2<Enter> 3<Enter> Sum {getSum = 6} :> ()