----------------------------------------------------------------------------- -- | -- Module : Berp.Base.LiftedIO -- Copyright : (c) 2010 Bernie Pope -- License : BSD-style -- Maintainer : florbitous@gmail.com -- Stability : experimental -- Portability : ghc -- -- Lifted versions of standard IO functions. Allows them to be used in any -- MonadIO context. Saves us from having to write "liftIO" everywhere. -- ----------------------------------------------------------------------------- module Berp.Base.LiftedIO ( liftIO, putStr, putStrLn, putChar, IORef, readIORef , writeIORef, newIORef, MonadIO, hFlush, getLine ) where import Prelude hiding (putStr, putStrLn, getLine, putChar) import qualified Prelude as P (putStr, putStrLn, getLine, putChar) import Control.Monad.Trans (liftIO, MonadIO) import Data.IORef hiding (readIORef, writeIORef, newIORef) import qualified Data.IORef as IORef (readIORef, writeIORef, newIORef) import qualified System.IO as SIO (hFlush, Handle) putStr :: MonadIO m => String -> m () putStr = liftIO . P.putStr putStrLn :: MonadIO m => String -> m () putStrLn = liftIO . P.putStrLn putChar :: MonadIO m => Char -> m () putChar = liftIO . P.putChar readIORef :: MonadIO m => IORef a -> m a readIORef = liftIO . IORef.readIORef writeIORef :: MonadIO m => IORef a -> a -> m () writeIORef x ref = liftIO $ IORef.writeIORef x ref newIORef :: MonadIO m => a -> m (IORef a) newIORef = liftIO . IORef.newIORef getLine :: MonadIO m => m (String) getLine = liftIO P.getLine hFlush :: MonadIO m => SIO.Handle -> m () hFlush = liftIO . SIO.hFlush