packages feed

lvish-1.1.4: lvish.cabal

-- Initial lvish.cabal generated by cabal init.  For further 
-- documentation, see http://haskell.org/cabal/users-guide/

-- The name of the package.
name:                lvish

-- The package version.  See the Haskell package versioning policy (PVP) 
-- for standards guiding when and how versions should be incremented.
-- http://www.haskell.org/haskellwiki/Package_versioning_policy
-- PVP summary:      +-+------- breaking API changes
--                   | | +----- non-breaking API additions
--                   | | | +--- code changes with no API change
version:             1.1.4

-- Changelog:
-- 0.2     -- switch SLMap over to O(1) freeze
-- 1.0     -- initial public release
-- 1.0.0.2 -- minor docs polishing
-- 1.0.0.4 -- Bugfix for runParThenFreeze 's' param (issue #26).
-- 1.0.0.6 -- tighten up dependencies; remove unused flags; very minor doc fixes.
-- 1.1.0.2 -- add verifyFiniteJoin
-- 1.1.0.3 -- expose BulkRetry prototype
-- 1.1.1.0 -- expose logging routines
-- 1.1.1.5 -- various bugfixes
-- 1.1.2   -- bugfixes and small additions, work-around for -fbeta problems
-- 1.1.3   -- add fromPureLVar
-- 1.1.4   -- add SatMap 

synopsis:  Parallel scheduler, LVar data structures, and infrastructure to build more.

description: 
  .
  A programming model based on monotonically-growing concurrent data structures.
  .
  As a starting point, look at the main module, "Control.LVish", as well as one of these papers:
  .
    * FHPC 2013: /LVars: lattice-based data structures for deterministic parallelism/ (<http://dl.acm.org/citation.cfm?id=2502326>).
  .
    * POPL 2014: /Freeze after writing: quasi-deterministic parallel programming with LVars/ (<http://www.cs.indiana.edu/~lkuper/papers/2013-lvish-draft.pdf>).
  . 
    * PLDI 2014: /Taming the Parallel Effect Zoo: Extensible Deterministic Parallelism with LVish/ (<http://www.cs.indiana.edu/~rrnewton/papers/effectzoo-draft.pdf>).
  . 
  If the haddocks are not building, here is a mirror:
  <http://www.cs.indiana.edu/~rrnewton/haddock/lvish/>
  .
  Change Log: 
  .
  * 1.0.0.6 - tighten up dependencies; remove unused flags; very minor doc fixes.
  . 
  * 1.1.2  - many bugfixes, plus a new logging infrastructure, and verification of finite lattices

license:             BSD3
license-file:        LICENSE
author:              Aaron Turon, Lindsey Kuper, Ryan Newton
maintainer:          lindsey@composition.al
category:            Concurrency
build-type:          Simple

-- Constraint on the version of Cabal needed to build this package.
cabal-version:       >=1.8

flag debug
  description: Activate additional debug assertions, and printed output.
--               if DEBUGLVL env var is set to 1 or higher.
  default: False
  manual: True

flag chaselev
  description: Use the Chase-Lev work-stealing deque
  default: False
  manual: True
  
flag getonce
  description: Ensure that continuations of get run at most once 
               (by using extra synchronization)
  default: False
  manual: True

-- We won't really support this until LVish 2.0:
flag generic
  description: Use (forthcoming) generic interfaces for Par monads.
  default: False
  manual: True 

-- flag beta
--   description: These features are in beta and not fully supported yet.
--   default: True

Source-repository head
  type:     git
  location: https://github.com/iu-parfunc/lvars
  subdir:   haskell/lvish
--    tag:      release-lvish-1.0.0.6

--------------------------------------------------------------------------------
library

  -- Modules exported by the library.
  exposed-modules:
                    ------------- End user modules ------------
                    Control.LVish
                    Control.LVish.DeepFrz
                    Data.LVar.Generic
                    Data.LVar.IVar
                    Data.LVar.IStructure 
                    Data.LVar.PureSet
                    Data.LVar.PureMap
                    Data.LVar.SatMap
                    Data.LVar.SLSet
                    Data.LVar.SLMap
                    -------------------------------------------
                    -- Unsafe, only for debugging:
                    Control.LVish.Unsafe                    
                    -------------------------------------------
                    -- End users should NOT USE THESE.
                    -- These are only for developing new LVars:
                    Data.LVar.Internal.Pure
                    Data.LVar.Generic.Internal
                    Data.LVar.PureMap.Unsafe
                    Data.LVar.SLMap.Unsafe
                    Control.LVish.Internal
                    Control.LVish.DeepFrz.Internal
                    -- This is also not recommended for general use yet.
                    Data.Concurrent.SkipListMap

                    Data.LVar.CycGraph

  -- TEMP: using a flag to control exports doesn't really work with Hackage currently:
  -- if flag(beta)
  --   exposed-modules: 
  --                     -- Not quite ready for prime-time yet:
  --                     Data.LVar.NatArray
  --                     Data.LVar.NatArray.Unsafe
  --                     Data.LVar.MaxPosInt
  --                     Data.LVar.Counter
  --                     Data.LVar.AddRemoveSet
  --                     Data.LVar.PNCounter
  --                     -------------------------------------------
  --                     -- New / Experimental:
  --                     Data.LVar.Memo                    

  -- Modules included in this library but not exported.
  other-modules:
                    Data.UtilInternal
                    Data.LVar.Pair 
                    Data.Concurrent.Bag
                    Data.Concurrent.Counter
                    Data.Concurrent.SNZI
                    Data.Concurrent.LinkedMap
                    Data.Concurrent.AlignedIORef
                    Control.Reagent
                    Control.LVish.SchedIdempotent
                    Control.LVish.SchedIdempotentInternal 
                    Control.LVish.MonadToss
                    Control.LVish.Types
                    Control.LVish.Basics
                    Control.LVish.Logical
                    Control.LVish.Logging

  -- Other library packages from which modules are imported.
  build-depends: base    >= 4.6 && <= 4.8, 
                 deepseq >= 1.3, 
                 lattices   >= 1.2, 
                 vector >=0.10,
                 atomic-primops >= 0.6, 
                 random, 
                 transformers,
                 ghc-prim,
                 async,
                 -- Used in NatArray:
                 bits-atomic, missing-foreign
  if flag(generic)
    cpp-options: -DGENERIC_PAR
--    build-depends: containers >= 0.5.4.0
    build-depends: containers >= 0.5
    build-depends: par-classes     >= 1.0 && < 2.0,
                   par-collections >= 1.0 && < 2.0
--                   par-transformers <= 2.0
  else     
    build-depends: containers >= 0.5

  ghc-options: -O2 -rtsopts

  if flag(debug)
     -- TEMP: depending on these for visualzing MemoCyc DAGs:
--     build-depends: fgl, graphviz, text
     cpp-options: -DDEBUG_LVAR
--     cpp-options: -DDEBUG_MEMO
  if flag(chaselev)
     build-depends: chaselev-deque
     cpp-options: -DCHASE_LEV
  if flag(getonce)
     cpp-options: -DGET_ONCE


--------------------------------------------------------------------------------

test-suite test-lvish
    type:	    exitcode-stdio-1.0
    main-is:        Main.hs
    hs-source-dirs: tests/ ./
    other-modules:  TestHelpers, 
                    LVishAndIVar,
                    ArrayTests,
                    MemoTests,
                    LogicalTests,
                    PureMapTests,
                    SLMapTests,
                    SetTests,
                    MaxPosIntTests,
                    AddRemoveSetTests
                    
    ghc-options:  -O2 -threaded -rtsopts -with-rtsopts=-N4

    -- DUPLICATED: from above
    build-depends: base    >= 4.6 && <= 4.8, 
                   deepseq >= 1.3, 
                   containers >= 0.5, 
                   lattices   >= 1.2, 
                   vector >=0.10,
                   atomic-primops >= 0.6, 
                   random, 
                   transformers,
                   ghc-prim,
                   async,
                   -- Used in NatArray:
                   bits-atomic, missing-foreign
    if flag(generic)
      cpp-options: -DGENERIC_PAR
      build-depends: par-classes     >= 1.0 && < 2.0,
                     par-collections >= 1.0 && < 2.0
    -- END DUPLICATED
    if flag(generic)
      other-modules:  GenericTests

    build-depends: test-framework, test-framework-hunit, test-framework-th, 
                   test-framework-quickcheck2, QuickCheck,
                   HUnit, time, text
-- And the self-dependency:  TODO -- how to get this to work? [2013.10.10]
-- For now it gets compiled TWICE:
    build-depends:   lvish
    if flag(debug)
       -- TEMP: depending on these for visualzing MemoCyc DAGs:
--       build-depends: fgl, graphviz, text
       cpp-options: -DDEBUG_LVAR
--       cpp-options: -DDEBUG_MEMO
    if flag(chaselev)
       build-depends: chaselev-deque
       cpp-options: -DCHASE_LEV
    if flag(getonce)
       cpp-options: -DGET_ONCE

    -- Atomic-primops fails when used by template-haskell/ghci on linux:
    if impl(ghc < 7.7) && os(linux) {
      buildable: False
    }