-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A framework for safe, programmable, speculative parallelism -- -- A framework for safe, programmable, speculative parallelism, loosely -- based on -- http://research.microsoft.com/pubs/118795/pldi026-vaswani.pdf @package speculation @version 0.0.0 module Control.Concurrent.Speculation -- | Evaluate a function using a cheap guess at the argument in parallel -- with forcing the argument. -- -- This is one way to induce parallelism in an otherwise sequential task. -- If the argument has already been evaluated, we avoid sparking the -- parallel computation. spec :: (Eq a) => a -> (a -> b) -> a -> b -- | Returns a guess as to whether or not a value has been evaluated. This -- is an impure function that relies on GHC internals and will return -- false negatives, but (hopefully) no false positives. evaluated :: a -> Bool specFoldr :: (Speculative f, Eq b) => (Int -> b) -> (a -> b -> b) -> b -> f a -> b specFoldl :: (Speculative f, Eq b) => (Int -> b) -> (b -> a -> b) -> b -> f a -> b class (Foldable f) => Speculative f specFoldr1 :: (Speculative f, Eq a) => (Int -> a) -> (a -> a -> a) -> f a -> a specFoldrN :: (Speculative f, Eq b) => Int -> (Int -> b) -> (a -> b -> b) -> b -> f a -> b specFoldl1 :: (Speculative f, Eq a) => (Int -> a) -> (a -> a -> a) -> f a -> a specFoldlN :: (Speculative f, Eq b) => Int -> (Int -> b) -> (b -> a -> b) -> b -> f a -> b instance Speculative Seq instance Speculative IntMap instance Speculative (Map a) instance Speculative Set instance (Ix i) => Speculative (Array i) instance Speculative Maybe instance Speculative []