Writing concurrent programs in languages that lack explicit support for
concurrency can often be awkward and difficult. Haskell’s monads provide a way to
explicitly specify sequence and effects in a functional language, and monadic combinators
allow composition of monadic actions, for example via parallelism and choice –
two core aspects of Communicating Sequential Processes (CSP).We show how the use
of these combinators, and being able to express processes as first-class types (monadic
actions) allow for easy and elegant programming of process-oriented concurrency in
a new CSP library for Haskell: Communicating Haskell Processes.