make it build with versions of base before and after 4.3
authorRoss Paterson <ross@soi.city.ac.uk>
Fri, 3 Sep 2010 11:33:58 +0000 (11:33 +0000)
committerRoss Paterson <ross@soi.city.ac.uk>
Fri, 3 Sep 2010 11:33:58 +0000 (11:33 +0000)
The Monad and MonadFix instances for Either moved to base-4.3, and
lost their Error constraints.  Test the version of base to either
supply the instances here or use the ones from base.

Control/Monad/Error.hs
mtl.cabal

index 8636af7..0190adb 100644 (file)
@@ -2,6 +2,8 @@
 {-# OPTIONS_GHC -fallow-undecidable-instances #-}
 -- De-orphaning this module is tricky:
 {-# OPTIONS_GHC -fno-warn-orphans #-}
+-- To handle instances moved to base:
+{-# LANGUAGE CPP #-}
 
 {- |
 Module      :  Control.Monad.Error
@@ -77,6 +79,24 @@ instance MonadError IOError IO where
 -- ---------------------------------------------------------------------------
 -- Our parameterizable error monad
 
+#if !(MIN_VERSION_base(4,2,1))
+
+-- These instances are in base-4.3
+
+instance Monad (Either e) where
+    return        = Right
+    Left  l >>= _ = Left l
+    Right r >>= k = k r
+
+instance MonadFix (Either e) where
+    mfix f = let
+        a = f $ case a of
+            Right r -> r
+            _       -> error "empty mfix argument"
+        in a
+
+#endif /* base to 4.2.0.x */
+
 instance (Error e) => MonadPlus (Either e) where
     mzero            = Left noMsg
     Left _ `mplus` n = n
index 1a411e7..1cb5a81 100644 (file)
--- a/mtl.cabal
+++ b/mtl.cabal
@@ -35,7 +35,7 @@ exposed-modules:
     Control.Monad.Writer.Class
     Control.Monad.Writer.Lazy
     Control.Monad.Writer.Strict
-build-depends: base >= 4.3 && < 5
+build-depends: base < 5
 extensions: MultiParamTypeClasses,
             FunctionalDependencies,
             FlexibleInstances,