A stream processing library for Scala
Scala Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
project update dependencies Sep 29, 2016
.gitignore Machines and steps Aug 18, 2012
.travis.yml update dependencies Sep 29, 2016
README.md Update README.md Jul 31, 2013
build.sbt update dependencies Sep 29, 2016
sbt First commit Aug 17, 2012



Machines are demand-driven coroutines. They are similar to Pipes, Conduits, or Iteratees, but can support inputs of arbitrary complexity and are entirely pure. Instead of having monadic effects of its own, a Machine can be driven by a Driver which can have effects when feeding the Machine input or when reading its output.

You design a Machine by writing a Plan. You then compile the machine if it is to run once to completion, or designate it to run repeatedly. Plan provides a monadic API for building machines, but Machines themselves do not form a monad.

Simple machines that read from one input source are called a Process and processes form a Category. More generally you can attach a Process to the output of any type of Machine, yielding a new Machine.

More complicated machines provide other ways of connecting to them.

Binary packages available at https://bintray.com/runarorama/maven/machines