Name:                monad-par
Version:             0.3.5
x-revision: 2
Synopsis:            A library for parallel programming based on a monad


-- Version history:
--  0.1      : First release
--  0.1.0.1  :
--  0.1.0.2  :
--  0.1.1.0  : module reorganization, moving ParClass

--  0.2      : Bumped for new class-based API
--  0.2.1    : Bumped for change AList
--  0.2.2    : incorporation of real deque package
--  0.2.3    : Restricted module export for 0.2 release.

--  0.3      : Factored/reorganized modules and packages.
--             *This* package is the original, core monad-par.
--  0.3.1    : fix for ghc 7.6.1, expose Par.IO
--  0.3.4    : switch to direct scheduler as default (only 1-level nesting allowed)
--  0.3.4.1  : fix build with GHC 7.0, and fix test
--  0.3.4.2  : Bugfix, 0.3.4.1 was released with debugging switches flipped.
--  0.3.4.3  : Bugfix, Trace scheduler is now the default
--  0.3.4.4  : Use the Trace scheduler in Control.Monad.Par.IO too
--  0.3.4.5  : Extremely minor, fix to unit tests.
--  0.3.4.6  : Add newgeneric flag, supporting the par-classes module.
--  0.3.4.7  : bugfix #38 for GHC 7.10

Description:
 The 'Par' monad offers a simple API for parallel programming.  The
 library works for parallelising both pure and @IO@ computations,
 although only the pure version is deterministic.  The default
 implementation provides a work-stealing scheduler and supports
 forking tasks that are much lighter weight than IO-threads.
 .
 For complete documentation see "Control.Monad.Par".
 .
 Some examples of use can be found in the @examples/@ directory of
 the source package.
 .
 Other related packages:
 .
 * @abstract-par@ provides the type classes that abstract over different
 implementations of the @Par@ monad.
 .
 * @monad-par-extras@ provides extra combinators and monad transformers layered on top of
 the @Par@ monad.
 .
 Changes in 0.3.4 relative to 0.3:
 .
 * Fix bugs that cause "thread blocked indefinitely on MVar" crashes.
 .
 * Added "Control.Monad.Par.IO"

Homepage:            https://github.com/simonmar/monad-par
License:             BSD3
License-file:        LICENSE
Author:              Simon Marlow, Ryan Newton
Maintainer:          Simon Marlow <[email protected]>, Ryan Newton <[email protected]>
Copyright:           (c) Simon Marlow 2011
Stability:           Experimental
Category:            Control,Parallelism,Monads
Build-type:          Simple
Cabal-version:       >=1.8

extra-source-files:
    tests/AListTest.hs
    tests/AllTests.hs
    tests/AsyncTest.hs
    tests/Makefile
    tests/ParTests1.hs
    tests/ParTests2.hs
    tests/ParTests_shared.hs
    tests/TestHelpers.hs
    tests/TestParDist.hs
    tests/Test_ContReaderT.hs
    tests/Test_ReaderContT.hs
    tests/hs_cassandra_microbench.hs
    tests/hs_cassandra_microbench2.hs

Flag chaselev
  Description: Use Chase-Lev Deques for higher-perf work-stealing.
  Default: False

Flag newgeneric
  Description: Provide instances for the new par-classes generic Par programming interface.
  Default: False

Source-repository head
 type:     git
 location: https://github.com/simonmar/monad-par

Library
 Exposed-modules:
                -- The classic, simple monad-par interface:
                  Control.Monad.Par
                , Control.Monad.Par.IO

                -- This is the default scheduler:
                , Control.Monad.Par.Scheds.Trace
                , Control.Monad.Par.Scheds.TraceInternal

                -- Replacement scheduler for Trace:
                , Control.Monad.Par.Scheds.Direct

                -- This scheduler uses sparks rather than IO threads.
                -- It only supports Futures, not full IVars.  Fork
                -- becomes lighter weight.
                , Control.Monad.Par.Scheds.Sparks

 -- Needs MonadIO (in transformers, but not imported here)
 Build-depends: base >= 4.9 && < 5
              -- This provides the interface which monad-par implements:
              , abstract-par
              , abstract-deque >= 0.1.4
              -- Extras such as parMap, RNG, State
              , monad-par-extras >= 0.3
              , deepseq >= 1.1
              , array >= 0.3
              , mwc-random >= 0.11
              , containers
              , parallel >= 3.1
              , mtl >= 2.0.1.0 && < 2.3

 if flag(chaselev)
   cpp-options: -DUSE_CHASELEV
   build-depends: chaselev-deque

 if flag(newgeneric)
   cpp-options: -DNEW_GENERIC
   build-depends: par-classes

 ghc-options: -O2
 Other-modules:
              ------------------------------------------------------------
              --                Schedulers & Infrastructure             --
              ------------------------------------------------------------

              -- Strawman scheduler that forks IO threads:
              -- Control.Monad.Par.Scheds.ContFree,

              -- Internal logging framework:
              -- Control.Monad.Par.Logging,

              -- Serial Elision scheduling is currently experimental:
              -- Control.Monad.Par.Scheds.SerialElision

              Control.Monad.Par.Scheds.DirectInternal

              ------------------------------------------------------------
              --                   Data Structures                      --
              ------------------------------------------------------------

              -- ILists are internal:
              -- , Control.Monad.Par.IList

              -- RRN: Not exposing Streams or OpenLists yet.  Need to improve performance.
              -- We have some ideas for enabling bounded chans while preventing deadlock:
              -- , Control.Monad.Par.OpenList
              -- , Control.Monad.Par.Stream


Test-Suite test-monad-par
   type:       exitcode-stdio-1.0
   main-is:    tests/AllTests.hs
   hs-source-dirs: tests/ ./
   -- Run tests in parallel:
   ghc-options: -O2 -threaded -rtsopts -with-rtsopts=-N4
   build-depends: base >= 4 && < 5
                , abstract-par, monad-par-extras
                , array   >= 0.3
                , deepseq >= 1.2
                , time
                , QuickCheck, HUnit
                , test-framework-hunit
                , test-framework-quickcheck2 >= 0.3
                , test-framework, test-framework-th

                , abstract-deque >= 0.1.4
                , mwc-random >= 0.11
                , mtl >= 2.0.1.0
                , containers