- data Monad m => Splitter m x = Splitter {}
- newtype Monad m => Transducer m x y = Transducer {}
- lift121Transducer :: (Monad m, Typeable x, Typeable y) => (x -> y) -> Transducer m x y
- liftStatelessTransducer :: (Monad m, Typeable x, Typeable y) => (x -> [y]) -> Transducer m x y
- liftFoldTransducer :: (Monad m, Typeable x, Typeable y) => (y -> x -> y) -> y -> Transducer m x y
- liftStatefulTransducer :: (Monad m, Typeable x, Typeable y) => (state -> x -> (state, [y])) -> state -> Transducer m x y
- liftSimpleSplitter :: (Monad m, Typeable x) => (forall c1 c2 c3 context. Source c1 x -> Sink c2 x -> Sink c3 x -> Pipe context m [x]) -> Splitter m x
- liftSectionSplitter :: (Monad m, Typeable x) => (forall c1 c2 c3 context. Source c1 x -> Sink c2 (Maybe x) -> Sink c3 (Maybe x) -> Pipe context m [x]) -> Splitter m x
- liftStatelessSplitter :: (Monad m, Typeable x) => (x -> Bool) -> Splitter m x

# Types

data Monad m => Splitter m x Source

The `Splitter`

type represents computations that distribute data acording to some criteria. A splitter should
distribute only the original input data, and feed it into the sinks in the same order it has been read from the
source. If the two sink arguments of a splitter are the same, the splitter must act as an identity transform.

newtype Monad m => Transducer m x y Source

The `Transducer`

type represents computations that transform data and return no result.
A transducer must continue consuming the given source and feeding the sink while there is data.

# Lifting functions

lift121Transducer :: (Monad m, Typeable x, Typeable y) => (x -> y) -> Transducer m x ySource

Function `lift121Transducer`

takes a function that maps one input value to one output value each, and lifts it into
a `Transducer`

.

liftStatelessTransducer :: (Monad m, Typeable x, Typeable y) => (x -> [y]) -> Transducer m x ySource

Function `liftStatelessTransducer`

takes a function that maps one input value into a list of output values, and
lifts it into a `Transducer`

.

liftFoldTransducer :: (Monad m, Typeable x, Typeable y) => (y -> x -> y) -> y -> Transducer m x ySource

Function `liftFoldTransducer`

creates a stateful transducer that produces only one output value after consuming the
entire input. Similar to `Data.List.foldl`

liftStatefulTransducer :: (Monad m, Typeable x, Typeable y) => (state -> x -> (state, [y])) -> state -> Transducer m x ySource

Function `liftStatefulTransducer`

constructs a `Transducer`

from a state-transition function and the initial
state. The transition function may produce arbitrary output at any transition step.

liftSimpleSplitter :: (Monad m, Typeable x) => (forall c1 c2 c3 context. Source c1 x -> Sink c2 x -> Sink c3 x -> Pipe context m [x]) -> Splitter m xSource

Function `liftSimpleSplitter`

lifts a simple, non-sectioning splitter function into a full `Splitter`

liftSectionSplitter :: (Monad m, Typeable x) => (forall c1 c2 c3 context. Source c1 x -> Sink c2 (Maybe x) -> Sink c3 (Maybe x) -> Pipe context m [x]) -> Splitter m xSource

Function `liftSectionSplitter`

lifts a sectioning splitter function into a full `Splitter`

liftStatelessSplitter :: (Monad m, Typeable x) => (x -> Bool) -> Splitter m xSource

Function `liftStatelessSplitter`

takes a function that assigns a Boolean value to each input item and lifts it into
a `Splitter`