dejafu/concurrency/concurrency.cabal
2017-03-03 22:06:09 +00:00

121 lines
4.6 KiB
Plaintext
Executable File

-- Initial monad-conc.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: concurrency
version: 1.1.1.0
synopsis: Typeclasses, functions, and data types for concurrency and STM.
description:
A typeclass abstraction over much of Control.Concurrent (and some
extras!). If you're looking for a general introduction to Haskell
concurrency, you should check out the excellent Parallel and
Concurrent Programming in Haskell, by Simon Marlow. If you are
already familiar with concurrent Haskell, just change all the
imports from Control.Concurrent.* to Control.Concurrent.Classy.* and
fix the type errors.
.
A brief list of supported functionality:
.
* Threads: the @forkIO*@ and @forkOn*@ functions, although bound
threads are not supported.
.
* Getting and setting capablities.
.
* Yielding and delaying.
.
* Mutable state: STM, @MVar@, and @IORef@.
.
* Atomic compare-and-swap for @IORef@.
.
* Exceptions.
.
* All of the data structures in Control.Concurrent.* and
Control.Concurrent.STM.* have typeclass-abstracted equivalents.
.
* A reimplementation of the
<https://hackage.haskell.org/package/async async> package,
providing a higher-level interface over threads, allowing users to
conveniently run @MonadConc@ operations asynchronously and wait
for their results.
.
This is quite a rich set of functionality, although it is not
complete. If there is something else you need, file an issue!
.
This used to be part of dejafu, but with the dejafu-0.4.0.0 release,
it was split out into its own package.
.
== Why this and not something else?
.
* Why not base: like lifted-base, concurrency uses typeclasses to
make function types more generic. This automatically eliminates
calls to `lift` in many cases, resulting in clearer and simpler
code.
.
* Why not lifted-base: fundamentally, lifted-base is still using
actual threads and actual mutable variables. When using a
concurrency-specific typeclass, this isn't necessarily the case.
The dejafu library provides non-IO-based implementations to allow
testing concurrent programs.
.
* Why not IOSpec: IOSpec provides many of the operations this
library does, however it uses a free monad to do so, which has
extra allocation overhead. Furthermore, it does not expose enough
of the internals in order to accurately test real-execution
semantics, such as relaxed memory.
.
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: concurrency-1.1.1.0
library
exposed-modules: Control.Monad.Conc.Class
, Control.Monad.STM.Class
, Control.Concurrent.Classy
, Control.Concurrent.Classy.Async
, Control.Concurrent.Classy.Chan
, Control.Concurrent.Classy.CRef
, Control.Concurrent.Classy.MVar
, Control.Concurrent.Classy.QSem
, Control.Concurrent.Classy.QSemN
, Control.Concurrent.Classy.STM
, Control.Concurrent.Classy.STM.TVar
, Control.Concurrent.Classy.STM.TMVar
, Control.Concurrent.Classy.STM.TChan
, Control.Concurrent.Classy.STM.TQueue
, Control.Concurrent.Classy.STM.TBQueue
, Control.Concurrent.Classy.STM.TArray
-- other-modules:
-- other-extensions:
build-depends: base >=4.8 && <5
, array >=0.5 && <0.6
, atomic-primops >=0.8 && <0.9
, exceptions >=0.7 && <0.9
, monad-control >=1.0 && <1.1
, mtl >=2.2 && <2.3
, stm >=2.4 && <2.5
, transformers >=0.4 && <0.6
-- hs-source-dirs:
default-language: Haskell2010
ghc-options: -Wall