intersperse package:streamly-core

Insert a pure value between successive elements of a stream. It does nothing if stream has less than two elements. Definition:
>>> intersperse x = Stream.intersperseM (return x)

>>> intersperse x = Stream.unfoldEachSepBy x Unfold.identity

>>> intersperse x = Stream.unfoldEachSepBySeq x Unfold.identity

>>> intersperse x = Stream.interleaveSepBy (Stream.repeat x)
Example:
>>> f x y = Stream.toList $ Stream.intersperse x $ Stream.fromList y

>>> f ',' "abc"
"a,b,c"

>>> f ',' "a"
"a"
Effectful variant of intersperse. Insert an effect and its output between successive elements of a stream. It does nothing if stream has less than two elements. Definition:
>>> intersperseM x = Stream.interleaveSepBy (Stream.repeatM x)
Perform a side effect between two successive elements of a stream. It does nothing if the stream has less than two elements.
>>> f x y = Stream.fold Fold.drain $ Stream.trace putChar $ Stream.intersperseM_ x $ Stream.fromList y

>>> f (putChar '.') "abc"
a.b.c

>>> f (putChar '.') "a"
a
Pre-release
Insert a side effect before every element of a stream. Definition:
>>> intersperseBeginByM_ = Stream.trace_

>>> intersperseBeginByM_ m = Stream.mapM (\x -> void m >> return x)
Usage:
>>> f x y = Stream.fold Fold.drain $ Stream.trace putChar $ Stream.intersperseBeginByM_ x $ Stream.fromList y

>>> f (putChar '.') "abc"
.a.b.c
Same as trace_. Pre-release
Like intersperseEndByM but intersperses an effectful action into the input stream after every n elements and also after the last element. Example:
>>> input = Stream.fromList "hello"

>>> Stream.toList $ Stream.intersperseEndByEveryM 2 (return ',') input
"he,ll,o,"

>>> f n x y = Stream.toList $ Stream.intersperseEndByEveryM n (pure x) $ Stream.fromList y

>>> f 2 ',' "abcdef"
"ab,cd,ef,"

>>> f 2 ',' "abcdefg"
"ab,cd,ef,g,"

>>> f 2 ',' "a"
"a,"
Pre-release
Insert an effect and its output after every element of a stream. Definition:
>>> intersperseEndByM x = Stream.interleaveEndBy (Stream.repeatM x)
Usage:
>>> f x y = Stream.toList $ Stream.intersperseEndByM (pure x) $ Stream.fromList y

>>> f ',' "abc"
"a,b,c,"

>>> f ',' "a"
"a,"
Pre-release
Insert an effect after every element of a stream. Example:
>>> f x y = Stream.fold Fold.drain $ Stream.trace putChar $ Stream.intersperseEndByM_ x $ Stream.fromList y

>>> f (putChar '.') "abc"
a.b.c.

>>> f (putChar '.') "a"
a.
Pre-release
Intersperse a monadic action into the input stream after every n elements. Definition:
> intersperseEveryM n x = Stream.interleaveEverySepBy n (Stream.repeatM x)
Idioms:
>>> intersperseM = Stream.intersperseEveryM 1

>>> intersperse x = Stream.intersperseEveryM 1 (return x)
Usage:
> input = Stream.fromList "hello"
> Stream.toList $ Stream.intersperseEveryM 2 (return ',') input
"he,ll,o" Unimplemented
Deprecated: Please use intersperseBeginByM_ instead.
Deprecated: Please use intersperseEndByM instead.
Deprecated: Please use intersperseEndByEveryM instead.
Deprecated: Please use intersperseEndByM_ instead.