Make it build with base 3 and 4
authorDuncan Coutts <duncan@haskell.org>
Wed, 22 Oct 2008 02:42:05 +0000 (02:42 +0000)
committerDuncan Coutts <duncan@haskell.org>
Wed, 22 Oct 2008 02:42:05 +0000 (02:42 +0000)
Uses exactly the same code as before for base 3. So no code changes.
For ghc-6.10 it is forced to always use base4 so there's no way to
build the package two different ways for a single ghc version.

Control/Sequential/STM.hs
stm.cabal

index 78bd7fc..c3dc2ef 100644 (file)
@@ -27,14 +27,28 @@ instance Monad STM where
        x <- m r
        unSTM (k x) r
 
+#ifdef BASE4
 atomically :: STM a -> IO a
 atomically (STM m) = do
     r <- newIORef (return ())
     m r `onException` do
        rollback <- readIORef r
        rollback
+#else
+atomically :: STM a -> IO a
+atomically (STM m) = do
+    r <- newIORef (return ())
+    m r `catch` \ ex -> do
+       rollback <- readIORef r
+       rollback
+       throw ex
+#endif
 
+#ifdef BASE4
 catchSTM :: Exception e => STM a -> (e -> STM a) -> STM a
+#else
+catchSTM :: STM a -> (Exception -> STM a) -> STM a
+#endif
 catchSTM (STM m) h = STM $ \ r -> do
     old_rollback <- readIORef r
     writeIORef r (return ())
index c280b70..0c5652b 100644 (file)
--- a/stm.cabal
+++ b/stm.cabal
@@ -9,6 +9,8 @@ description:    A modular composable concurrency abstraction.
 build-type:     Simple
 cabal-version:  >=1.2
 
+flag base4
+
 library
   exposed-modules:
     Control.Concurrent.STM
@@ -19,5 +21,12 @@ library
     Control.Monad.STM
   other-modules:
     Control.Sequential.STM
-  build-depends: base, array
+  build-depends: base < 5, array
+  if flag(base4)
+    build-depends: base >=4
+    cpp-options:   -DBASE4
+  else
+    build-depends: base <4
+  if impl(ghc >= 6.10)
+    build-depends: base >=4
   extensions:    CPP