name: speculation version: 0.1.0 license: BSD3 license-file: LICENSE author: Edward A. Kmett maintainer: Edward A. Kmett stability: experimental homepage: http://github.com/ekmett/speculation category: Concurrency synopsis: A framework for safe, programmable, speculative parallelism description: A framework for safe, programmable, speculative parallelism, loosely based on . @'spec' g f a@ evaluates @f g@ while forcing @a@, if @g == a@ then @f g@ is returned. Otherwise @f a@ is evaluated. . Furthermore, if the argument has already been evaluated, we avoid sparking the parallel computation at all. . If a good guess at the value of @a@ is available, this is one way to induce parallelism in an otherwise sequential task. . However, if the guess isn\'t available more cheaply than the actual answer, then this saves no work and if the guess is wrong, you risk evaluating the function twice. . > spec a f a = f $! a . The best-case timeline looks like: . > [---- f g ----] > [----- a -----] > [-- spec g f a --] . The worst-case timeline looks like: . > [---- f g ----] > [----- a -----] > [---- f a ----] > [------- spec g f a -----------] . Compare these to the timeline of @f $! a@: . > [---- a -----] > [---- f a ----] . 'specSTM' provides a similar time table for STM actions, but also rolls back side-effects. . /Changes in 0.1.0:/ . * Added @Control.Concurrent.STM.Speculation@ with 'specSTM', and 'specSTM'' . /Changes in 0.0.2:/ . * 'specFoldr1' bug fix . * Added 'spec'' combinator . /Changes in 0.0.1:/ . * Added 'WithoutSpeculation' and 'WrappedFoldable' copyright: (c) 2010 Edward A. Kmett build-type: Simple cabal-version: >=1.2 tested-with: GHC==6.12.1 extra-source-files: README.markdown library ghc-options: -Wall build-depends: base >= 4 && < 6, containers >= 0.2.0.1, array >= 0.2 && < 0.4, parallel >= 2.2 && < 2.3, stm >= 2.1 && < 2.2 exposed-modules: Control.Concurrent.Speculation Control.Concurrent.STM.Speculation