mirror of
https://github.com/barrucadu/dejafu.git
synced 2024-12-23 05:22:25 +03:00
c12cbcf707
This performs better with "real" code (the Par monad) but surprisingly does far worse with the included tests! The next thing to do is implement the orthogonal sleep sets algorithm to cut down on available choices even further and hopefully correct this issue. See also: "Bounded Partial-Order Reduction" [Coons, Musuvathi, McKinley 2013]
102 lines
3.5 KiB
Plaintext
Executable File
102 lines
3.5 KiB
Plaintext
Executable File
-- Initial monad-conc.cabal generated by cabal init. For further
|
|
-- documentation, see http://haskell.org/cabal/users-guide/
|
|
|
|
name: dejafu
|
|
version: 0.0.0.0
|
|
synopsis: Overloadable primitives for testable, potentially non-deterministic, concurrency.
|
|
|
|
description:
|
|
Concurrency is nice, deadlocks and race conditions not so much. The
|
|
@Par@ monad family, as defined in
|
|
<https://hackage.haskell.org/package/abstract-par/docs/Control-Monad-Par-Class.html abstract-par>
|
|
provides deterministic parallelism, but sometimes we can tolerate a
|
|
bit of nondeterminism.
|
|
.
|
|
This package provides a class of monads for potentially
|
|
nondeterministic concurrency, with an interface very much in the
|
|
spirit of @Par@, but slightly more relaxed. Specifically,
|
|
@MonadConc@'s @IVar@ equivalent, @CVar@s, can be written to multiple
|
|
times.
|
|
.
|
|
== @MonadConc@ with 'IO':
|
|
.
|
|
The intention of the @MonadConc@ class is to provide concurrency
|
|
where 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. This
|
|
assumption is used by the testing functionality provided by
|
|
Test.DejaFu.
|
|
.
|
|
Whilst this assumption may not hold in general when 'IO' is
|
|
involved, you should strive to produce test cases where it does.
|
|
.
|
|
See the <https://github.com/barrucadu/dejafu README> for more
|
|
details.
|
|
|
|
homepage: https://github.com/barrucadu/dejafu
|
|
license: MIT
|
|
license-file: LICENSE
|
|
author: Michael Walker
|
|
maintainer: mike@barrucadu.co.uk
|
|
-- copyright:
|
|
category: Concurrency
|
|
build-type: Simple
|
|
-- extra-source-files:
|
|
cabal-version: >=1.10
|
|
|
|
source-repository head
|
|
type: git
|
|
location: https://github.com/barrucadu/dejafu.git
|
|
|
|
-- source-repository this
|
|
-- type: git
|
|
-- location: https://github.com/barrucadu/dejafu.git
|
|
-- tag:
|
|
|
|
library
|
|
exposed-modules: Control.Monad.Conc.Class
|
|
, Control.Monad.STM.Class
|
|
|
|
, Control.Concurrent.CVar
|
|
, Control.Concurrent.CVar.Strict
|
|
, Control.Concurrent.STM.CTVar
|
|
, Control.Concurrent.STM.CTMVar
|
|
|
|
, Test.DejaFu
|
|
, Test.DejaFu.Deterministic
|
|
, Test.DejaFu.Deterministic.IO
|
|
, Test.DejaFu.Deterministic.Schedule
|
|
, Test.DejaFu.SCT
|
|
, Test.DejaFu.STM
|
|
|
|
other-modules: Test.DejaFu.Deterministic.Internal
|
|
, Test.DejaFu.Deterministic.Internal.Common
|
|
, Test.DejaFu.Deterministic.Internal.CVar
|
|
, Test.DejaFu.Deterministic.Internal.Threading
|
|
, Test.DejaFu.SCT.Internal
|
|
, Test.DejaFu.STM.Internal
|
|
|
|
, Control.State
|
|
, Data.List.Extra
|
|
|
|
-- other-extensions:
|
|
build-depends: base >=4.5 && <5
|
|
, containers
|
|
, deepseq
|
|
, exceptions >=0.7
|
|
, monad-loops
|
|
, mtl
|
|
, random
|
|
, stm
|
|
, transformers
|
|
-- hs-source-dirs:
|
|
default-language: Haskell2010
|
|
ghc-options: -Wall
|
|
|
|
test-suite tests
|
|
hs-source-dirs: tests
|
|
type: exitcode-stdio-1.0
|
|
main-is: Tests.hs
|
|
build-depends: dejafu, base
|
|
default-language: Haskell2010
|