Permalink
Browse files

streamlined MonadSpec

  • Loading branch information...
1 parent 7b5ecec commit bf038b00e6a84af60bc32f1a9d0f4b73a017669c @ekmett committed Nov 9, 2011
Showing with 26 additions and 19 deletions.
  1. +2 −0 .gitignore
  2. +4 −0 CHANGELOG.markdown
  3. +19 −18 Control/Concurrent/Speculation/Class.hs
  4. +1 −1 speculation.cabal
View
@@ -1,2 +1,4 @@
dist
.hpc
+*.swo
+*.swp
View
@@ -1,3 +1,7 @@
+/1.4/
+
+ * Simplified MonadSpec
+
/1.3/
* Removed old benchmark/test framework.
@@ -17,36 +17,37 @@ module Control.Concurrent.Speculation.Class where
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
View
@@ -1,5 +1,5 @@
name: speculation
-version: 1.3
+version: 1.4
license: BSD3
license-file: LICENSE
author: Edward A. Kmett

0 comments on commit bf038b0

Please sign in to comment.