The dejafu package

[Tags:library, mit]

[Déjà Fu is] A martial art in which the user's limbs move in time as well as space, […] It is best described as "the feeling that you have been kicked in the head this way before" -- Terry Pratchett, Thief of Time

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 builds on the concurrency package by enabling you to systematically and deterministically test your concurrent programs.

== Déjà Fu with IO:

The core assumption underlying Déjà Fu is that any apparent nondeterminism arises purely from the scheduling behaviour. To put it another way, a given computation, parametrised with a fixed set of scheduling decisions, is deterministic.

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

== Memory Model

The testing functionality supports a few different memory models, for computations which use non-synchronised CRef operations. The supported models are:

If a testing function does not take the memory model as a parameter, it uses TSO.

See the README for more details.


Dependencies base (>=4.8 && <5), concurrency (==1.1.1.*), containers (==0.5.*), deepseq (>=1.1 && <2), exceptions (>=0.7 && <0.9), monad-loops (==0.4.*), mtl (==2.2.*), random (>=1.0 && <1.2), ref-fd (==0.4.*), semigroups (>=0.16 && <0.19), transformers (>=0.4 && <0.6), transformers-base (==0.4.*) [details]
License MIT
Author Michael Walker
Stability Unknown
Category Concurrency
Home page
Source repository head: git clone
this: git clone dejafu-
Uploaded Sat Mar 4 06:30:29 UTC 2017 by barrucadu
Distributions LTSHaskell:, NixOS:, Stackage:, Tumbleweed:
Downloads 612 total (128 in the last 30 days)
0 []
Status Docs available [build log]
Last success reported on 2017-03-04 [all 1 reports]




Maintainer's Corner

For package maintainers and hackage trustees