Systematic concurrency testing meets Haskell.
Go to file
2015-01-12 16:28:04 +00:00
Control/Monad/Conc Structure runSCT' and runSCTIO' explicitly as unfolds, to make clearer how the state evolves 2015-01-12 16:28:04 +00:00
Tests Vastly improve PB runner 2015-01-09 02:35:28 +00:00
.gitignore Initial commit: a class for monads providing concurrency. 2014-12-18 11:03:17 +00:00
.travis.yml Add README 2014-12-20 17:32:35 +00:00
LICENSE Initial commit: a class for monads providing concurrency. 2014-12-18 11:03:17 +00:00
monad-conc.cabal Update documentation 2015-01-12 14:24:12 +00:00
README.markdown Update documentation 2015-01-12 14:24:12 +00:00
Setup.hs Initial commit: a class for monads providing concurrency. 2014-12-18 11:03:17 +00:00
Tests.hs Swap main Fixed implementation from IO to ST. 2014-12-27 12:26:40 +00:00

monad-conc Build Status

Concurrency is nice, deadlocks and race conditions not so much. The Par monad family, as defined in abstract-par provides deterministic parallelism, but sometimes we can tolerate a bit of nondeterminism.

This package provides a family of monads for potentially nondeterministic concurrency, with an interface very much in the spirit of Par, but slightly more relaxed. Specifically, Conc's IVar equivalent, CVars, can be written to multiple times.

The documentation of the latest developmental version is available online.

Conc and IO

The intention of the Conc monads is to provide concurrency where any apparent nondeterminism arises purely from the scheduling behaviour. To put it another way, a given Conc computation, parametrised with a fixed set of scheduling decisions, is deterministic. This assumption is used by the testing functionality provided by Control.Monad.Conc.SCT.

Whilst this assumption may not hold in general when IO is involved, you should strive to produce test cases where it does.

Contributing

Bug reports, pull requests, and comments are very welcome!

Feel free to contact me on GitHub, through IRC (#haskell on freenode), or email (mike@barrucadu.co.uk).