Add Applicative/Alternative instances of STM for GHC <7.0 (#4076)
authorSimon Marlow <marlowsd@gmail.com>
Wed, 8 Aug 2012 09:45:59 +0000 (10:45 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 8 Aug 2012 09:46:08 +0000 (10:46 +0100)
Control/Monad/STM.hs
stm.cabal

index 0bcd791..30bbae7 100644 (file)
@@ -55,11 +55,23 @@ import Control.Monad.Fix
 import Control.Sequential.STM
 #endif
 
+import Control.Applicative
+import Control.Monad (ap)
+
+
 #ifdef __GLASGOW_HASKELL__
 #if ! (MIN_VERSION_base(4,3,0))
 instance MonadPlus STM where
   mzero = retry
   mplus = orElse
+
+instance Applicative STM where
+  pure = return
+  (<*>) = ap
+
+instance Alternative STM where
+  empty = retry
+  (<|>) = orElse
 #endif
 
 check :: Bool -> STM ()
index 9871359..2657e23 100644 (file)
--- a/stm.cabal
+++ b/stm.cabal
@@ -1,5 +1,5 @@
 name:          stm
-version:        2.4
+version:        2.4.1
 license:       BSD3
 license-file:  LICENSE
 maintainer:    libraries@haskell.org
@@ -8,6 +8,10 @@ category:       Concurrency
 description:
  A modular composable concurrency abstraction.
  .
+ Changes in version 2.4.1
+ .
+ * Added Applicative/Alternative instances of STM for GHC <7.0
+ .
  Changes in version 2.4
  .
  * Added "Control.Concurrent.STM.TQueue" (a faster @TChan@)