sousit: Source/Sink/Transform: An alternative to lazy IO and iteratees.

[ bsd3, control, library ] [ Propose Tags ] [ Report a vulnerability ]

Haskell library for Sources, Sinks and Transformers. The data is pushed from the source through the transfomers into the sink. The sink or a transfomer can decide at any time to end the transfer (see Iteratees). The transformers are very reusable since they can not depend on side effects, so they can be used with files as well as with simple lists.

Allows you to build pipelines such as:

>>> listSource [1..10] $$ T.map(+1) =$= T.buffer 3 0 (+) =$ listSink
[9,18,27,11]

its possible to mix various type of sources and sinks, such as in:

>>> fileSourceLine \"myfile.txt\" $$ T.drop 1 =$= T.map (++ "!") =$ listSink
[\"Hello Mario!\", \"How're you doing?!\"]

For more documentation see https://github.com/msiegenthaler/SouSiT.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.3, 0.4
Dependencies base (>4 && <5), bytestring, cereal, mtl, resourcet, stm, transformers [details]
License BSD-3-Clause
Copyright (c) 2012 Mario Siegenthaler
Author Mario Siegenthaler
Maintainer msiegenthaler@inventsoft.ch
Category Control
Home page https://github.com/msiegenthaler/SouSiT
Source repo head: git clone git://github.com/msiegenthaler/SouSiT.git
Uploaded by MarioSiegenthaler at 2012-09-16T17:58:11Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 1756 total (9 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for sousit-0.4

[back to package description]

SouSiT

Haskell library for Sources, Sinks and Transformers. The data is pushed from the source through the transfomers into the sink. The sink or a transfomer can decide at any time to end the transfer (see Iteratees). The transformers are very reusable since they can not depend on side effects, so they can be used with files as well as with simple lists.

Allows you to build pipelines such as:

ghci> listSource [1..10] $$ T.map(+1) =$= T.buffer 3 0 (+) =$ listSink
[9,18,27,11]

its possible to mix various type of sources and sinks, such as in:

ghci> fileSourceLine "myfile.txt" $$ T.drop 1 =$= T.map (++ "!") =$ listSink
["Hello Mario!", "How're you doing?!"]

Available Sources

  • List
  • Handle (IO)
  • File

More types of sources can be added by users of the library. Consider using actionSource or bracketActionSource as a help if you do so.

Available Sinks

  • List
  • Handle (IO)
  • File
  • monadic sink

More types of sinks can be added by users of the library. Consider using either actionSink or the monadic sink interface if implementing your own sinks.

Monadic Sink

You can write sink in monad style

Example that reads the first input, then skips the next three values and then reads two values and terminates. It outputs a tuple with the three values read.

mySink = do v1 <- input
            skip 3
            v2 <- input
            v3 <- input
            return (v1, v2, v3)