Make Control.Monad.IO.Class conditionally exposed
authorryan.gl.scott <ryan.gl.scott@gmail.com>
Sat, 15 Aug 2015 14:52:17 +0000 (14:52 +0000)
committerryan.gl.scott <ryan.gl.scott@gmail.com>
Sat, 15 Aug 2015 14:52:17 +0000 (14:52 +0000)
Trac #10773 proposed moving the `MonadIO` class (and, as a result, the
`Control.Monad.IO.Class` module) to `base` to make it easier to generalize
more functions' type signatures from `IO` to `MonadIO`. To aid this transition,
`transformers` should continue to provide `Control.Monad.IO.Class` if compiled
with GHC 7.10 or earlier.

oldsrc/Control/Monad/IO/Class.hs [moved from Control/Monad/IO/Class.hs with 83% similarity]
transformers.cabal

similarity index 83%
rename from Control/Monad/IO/Class.hs
rename to oldsrc/Control/Monad/IO/Class.hs
index f6d5dbb..7c74d4e 100644 (file)
@@ -2,8 +2,9 @@
 #if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Safe #-}
 #endif
-#if __GLASGOW_HASKELL__ >= 710
-{-# LANGUAGE AutoDeriveTypeable #-}
+#if __GLASGOW_HASKELL__ >= 708
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE StandaloneDeriving #-}
 #endif
 -----------------------------------------------------------------------------
 -- |
@@ -23,6 +24,10 @@ module Control.Monad.IO.Class (
     MonadIO(..)
   ) where
 
+#if __GLASGOW_HASKELL__ >= 708
+import Data.Typeable
+#endif
+
 -- | Monads in which 'IO' computations may be embedded.
 -- Any monad built by applying a sequence of monad transformers to the
 -- 'IO' monad will be an instance of this class.
@@ -38,5 +43,9 @@ class (Monad m) => MonadIO m where
     -- | Lift a computation from the 'IO' monad.
     liftIO :: IO a -> m a
 
+#if __GLASGOW_HASKELL__ >= 708
+deriving instance Typeable MonadIO
+#endif
+
 instance MonadIO IO where
     liftIO = id
index 913189b..5f25a57 100644 (file)
@@ -47,13 +47,17 @@ library
     -- NB: using impl(ghc>=7.9) instead of fragile Cabal flags
     hs-source-dirs: oldsrc
     exposed-modules: Data.Functor.Identity
-    if impl(ghc>=7.2 && <7.5)
-      -- Prior to GHC 7.5, GHC.Generics lived in ghc-prim
-      build-depends: ghc-prim
+  if !impl(ghc>=7.11)
+    -- Control.Monad.IO.Class was moved into base in GHC 7.12
+    -- see also https://ghc.haskell.org/trac/ghc/ticket/10773
+    hs-source-dirs: oldsrc
+    exposed-modules: Control.Monad.IO.Class
+  if impl(ghc>=7.2 && <7.5)
+    -- Prior to GHC 7.5, GHC.Generics lived in ghc-prim
+    build-depends: ghc-prim
   exposed-modules:
     Control.Applicative.Backwards
     Control.Applicative.Lift
-    Control.Monad.IO.Class
     Control.Monad.Signatures
     Control.Monad.Trans.Class
     Control.Monad.Trans.Cont