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 <marlowsd@gmail.com>, Ryan Newton <rrnewton@gmail.com>
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