scc-0.1: Streaming component combinators

Control.Concurrent.SCC.Components

Contents

Description

Module Components defines primitive components of Producer, Consumer, Transducer and Splitter types, defined in the Foundation and ComponentTypes modules.

Synopsis

IO components

fromFile :: String -> Producer IO Char ()Source

Producer fromFile opens the named file and feeds the given sink from its contents.

fromHandle :: Handle -> Producer IO Char ()Source

Producer fromHandle feeds the given sink from the open file handle.

fromStdIn :: Producer IO Char ()Source

Producer fromStdIn feeds the given sink from the standard input.

appendFile :: String -> Consumer IO Char ()Source

Consumer appendFile opens the name file and appends the given source to it.

toFile :: String -> Consumer IO Char ()Source

Consumer toFile opens the named file and copies the given source into it.

toHandle :: Handle -> Consumer IO Char ()Source

Consumer toHandle copies the given source into the open file handle.

toStdOut :: Consumer IO Char ()Source

Consumer toStdOut copies the given source into the standard output.

toPrint :: forall x. (Show x, Typeable x) => Consumer IO x ()Source

Generic transducers

asis :: (Monad m, Typeable x) => Transducer m x xSource

Transducer asis passes its input through unmodified.

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

The suppress transducer suppresses all input it receives. It is equivalent to substitute []

erroneous :: (Monad m, Typeable x) => Transducer m x xSource

The erroneous transducer reports an error if any input reaches it.

prepend :: (Monad m, Typeable x) => [x] -> Transducer m x xSource

Transducer prepend passes its input unmodified, except for prepending contents of the given list parameter before it.

append :: (Monad m, Typeable x) => [x] -> Transducer m x xSource

Transducer append passes its input unmodified, except for appending contents of the given list parameter to its end.

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

The substitute transducer replaces its whole input by its parameter.

Generic splitters

allTrue :: (Monad m, Typeable x) => Splitter m xSource

Splitter allTrue feeds its entire input into its true sink.

allFalse :: (Monad m, Typeable x) => Splitter m xSource

Splitter allFalse feeds its entire input into its false sink.

one :: (Monad m, Typeable x) => Splitter m xSource

Splitter one feeds all input values to its true sink, treating every value as a separate section.

substring :: (Monad m, Eq x, Typeable x) => [x] -> Splitter m xSource

Splitter substring feeds to its true sink all input parts that match the contents of the given list argument. If two overlapping parts of the input both match the argument, only the first one wins.

substringMatch :: (Monad m, Eq x, Typeable x) => [x] -> Splitter m xSource

Splitter substringMatch feeds to its true sink all input parts that match the contents of the given list argument. If two overlapping parts of the input match the argument, both are considered true.

List transducers

The following laws hold:

group :: (Monad m, Typeable x) => Transducer m x [x]Source

Transducer group collects all its input values into a single list.

concatenate :: (Monad m, Typeable x) => Transducer m [x] xSource

Transducer concatenate flattens the input stream of lists of values into the output stream of values.

concatSeparate :: (Monad m, Typeable x) => [x] -> Transducer m [x] xSource

Character stream components

lowercase :: Monad m => Transducer m Char CharSource

The lowercase transforms all uppercase letters in the input to lowercase, leaving the rest unchanged.

uppercase :: Monad m => Transducer m Char CharSource

The uppercase transforms all lowercase letters in the input to uppercase, leaving the rest unchanged.

whitespace :: Monad m => Splitter m CharSource

Splitter whitespace feeds all white-space characters into its true sink, all others into false.

letters :: Monad m => Splitter m CharSource

Splitter letters feeds all alphabetical characters into its true sink, all other characters into false.

digits :: Monad m => Splitter m CharSource

Splitter digits feeds all digits into its true sink, all other characters into false.

line :: Monad m => Splitter m CharSource

The sectioning splitter line feeds line-ends into its false sink, and line contents into true. A single line-end can be formed by any of the character sequences "\n", "\r", "\r\n", or "\n\r".

nonEmptyLine :: Monad m => Splitter m CharSource

Splitter nonEmptyLine feeds line-ends into its false sink, and all other characters into true.

Oddballs

count :: (Monad m, Typeable x) => Transducer m x IntegerSource

The count transducer counts all its input values and outputs the final tally.