Merge pull request #247 from DanielG/dev-rwst-io

Add MonadIO instance for RWST
This commit is contained in:
Kazu Yamamoto 2014-05-08 16:07:53 +09:00
commit 32d7fac5c2

View File

@ -1,4 +1,5 @@
{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses, RankNTypes, TypeFamilies #-} {-# LANGUAGE CPP, GeneralizedNewtypeDeriving, FlexibleInstances, MultiParamTypeClasses, RankNTypes, TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Language.Haskell.GhcMod.Monad ( module Language.Haskell.GhcMod.Monad (
GhcMod GhcMod
, GhcModEnv(..) , GhcModEnv(..)
@ -23,14 +24,16 @@ import Exception
import MonadUtils import MonadUtils
import DynFlags import DynFlags
import Data.Monoid (Monoid)
import Data.IORef (IORef, readIORef, writeIORef, newIORef) import Data.IORef (IORef, readIORef, writeIORef, newIORef)
import Control.Monad (liftM) import Control.Monad (liftM)
import Control.Monad.Base (MonadBase,liftBase) import Control.Monad.Base (MonadBase,liftBase)
--import Control.Monad.IO.Class (MonadIO) --import Control.Monad.IO.Class (MonadIO)
import Control.Monad.Trans.RWS.Lazy (RWST,runRWST) import Control.Monad.Trans.RWS.Lazy (RWST(..),runRWST)
import Control.Monad.Trans.Control (MonadBaseControl(..), StM, liftBaseWith import Control.Monad.Trans.Control (MonadBaseControl(..), StM, liftBaseWith
, control, liftBaseOp, liftBaseOp_) , control, liftBaseOp, liftBaseOp_)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Reader.Class import Control.Monad.Reader.Class
import Control.Monad.Writer.Class import Control.Monad.Writer.Class
import Control.Monad.State.Class import Control.Monad.State.Class
@ -58,6 +61,12 @@ newtype GhcMod a = GhcMod {
MonadWriter GhcModWriter, MonadWriter GhcModWriter,
MonadState GhcModState) MonadState GhcModState)
#if __GLASGOW_HASKELL__ < 708
instance (Monoid w, MonadIO m) => MonadIO (RWST r w s m) where
-- liftIO :: MonadIO m => m -> IO m
liftIO = lift . liftIO
#endif
runGhcMod' :: GhcModEnv runGhcMod' :: GhcModEnv
-> GhcModState -> GhcModState
-> GhcMod a -> GhcMod a