speculation 1.3 → 1.4
raw patch · 3 files changed
+24/−19 lines, 3 files
Files
- CHANGELOG.markdown +4/−0
- Control/Concurrent/Speculation/Class.hs +19/−18
- speculation.cabal +1/−1
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+/1.4/++ * Simplified MonadSpec+ /1.3/ * Removed old benchmark/test framework.
Control/Concurrent/Speculation/Class.hs view
@@ -17,36 +17,37 @@ import Control.Monad.Trans.Cont import Control.Concurrent.Speculation+import Data.Function (on) class MonadSpec m where- -- | When a is unevaluated, @'spec' g a@ evaluates the current continuation - -- with @g@ while testing if @g@ '==' @a@, if they differ, it re-evalutes the- -- continuation with @a@. If @a@ was already evaluated, the continuation is- -- just directly applied to @a@ instead.- specM :: Eq a => a -> a -> m a-- -- | As per 'spec', without the check for whether or not the second argument- -- is already evaluated.- specM' :: Eq a => a -> a -> m a- -- | @spec@ with a user supplied comparison function specByM :: (a -> a -> Bool) -> a -> a -> m a -- | @spec'@ with a user supplied comparison function specByM' :: (a -> a -> Bool) -> a -> a -> m a - -- | @spec'@ with a user supplied comparison function- specOnM :: Eq c => (a -> c) -> a -> a -> m a+-- | When a is unevaluated, @'spec' g a@ evaluates the current continuation +-- with @g@ while testing if @g@ '==' @a@, if they differ, it re-evalutes the+-- continuation with @a@. If @a@ was already evaluated, the continuation is+-- just directly applied to @a@ instead.+specM :: (MonadSpec m, Eq a) => a -> a -> m a+specM = specByM (==) - -- | @spec'@ with a user supplied comparison function- specOnM' :: Eq c => (a -> c) -> a -> a -> m a+-- | As per 'spec', without the check for whether or not the second argument+-- is already evaluated.+specM' :: (MonadSpec m, Eq a) => a -> a -> m a+specM' = specByM' (==) +-- | @spec'@ with a user supplied comparison function+specOnM :: (MonadSpec m, Eq c) => (a -> c) -> a -> a -> m a+specOnM = specByM . on (==)++-- | @spec'@ with a user supplied comparison function+specOnM' :: (MonadSpec m, Eq c) => (a -> c) -> a -> a -> m a+specOnM' = specByM . on (==)+ -- * Basic speculation instance Monad m => MonadSpec (ContT r m) where- specM g a = ContT $ \k -> spec g k a- specM' g a = ContT $ \k -> spec' g k a specByM f g a = ContT $ \k -> specBy f g k a specByM' f g a = ContT $ \k -> specBy' f g k a- specOnM f g a = ContT $ \k -> specOn f g k a- specOnM' f g a = ContT $ \k -> specOn' f g k a
speculation.cabal view
@@ -1,5 +1,5 @@ name: speculation-version: 1.3+version: 1.4 license: BSD3 license-file: LICENSE author: Edward A. Kmett