Repository : ssh://darcs.haskell.org//srv/darcs/packages/haskeline On branch : master
http://hackage.haskell.org/trac/ghc/changeset/8da29568eca603b174b9bc53a65da53387b3392a >--------------------------------------------------------------- commit 8da29568eca603b174b9bc53a65da53387b3392a Author: Judah Jacobson <[email protected]> Date: Fri Mar 23 16:54:47 2012 +0000 #117: Implement mapInputT. >--------------------------------------------------------------- System/Console/Haskeline.hs | 1 + System/Console/Haskeline/InputT.hs | 5 +++++ System/Console/Haskeline/Monads.hs | 5 +++++ 3 files changed, 11 insertions(+), 0 deletions(-) diff --git a/System/Console/Haskeline.hs b/System/Console/Haskeline.hs index 715b382..bc5db8f 100644 --- a/System/Console/Haskeline.hs +++ b/System/Console/Haskeline.hs @@ -32,6 +32,7 @@ module System.Console.Haskeline( InputT, runInputT, haveTerminalUI, + mapInputT, -- ** Behaviors Behavior, runInputTBehavior, diff --git a/System/Console/Haskeline/InputT.hs b/System/Console/Haskeline/InputT.hs index 9129a91..fba5705 100644 --- a/System/Console/Haskeline/InputT.hs +++ b/System/Console/Haskeline/InputT.hs @@ -150,6 +150,11 @@ execInputT prefs settings run (InputT f) $ runHistoryFromFile (historyFile settings) (maxHistorySize prefs) $ runReaderT f run +-- | Map a user interaction by modifying the base monad computation. +mapInputT :: (forall b . m b -> m b) -> InputT m a -> InputT m a +mapInputT f = InputT . mapReaderT (mapStateT (mapStateT + (mapReaderT (mapReaderT f)))) + . unInputT -- | Read input from 'stdin'. -- Use terminal-style interaction if 'stdin' is connected to diff --git a/System/Console/Haskeline/Monads.hs b/System/Console/Haskeline/Monads.hs index 75de7c2..9dd4aa1 100644 --- a/System/Console/Haskeline/Monads.hs +++ b/System/Console/Haskeline/Monads.hs @@ -3,10 +3,12 @@ module System.Console.Haskeline.Monads( module System.Console.Haskeline.MonadException, ReaderT(..), runReaderT', + mapReaderT, asks, StateT, runStateT, evalStateT', + mapStateT, gets, modify, update, @@ -75,6 +77,9 @@ instance MonadTrans (StateT s) where instance MonadIO m => MonadIO (StateT s m) where liftIO = lift . liftIO +mapStateT :: (forall b . m b -> n b) -> StateT s m a -> StateT s n a +mapStateT f (StateT m) = StateT (\s -> f (m s)) + runStateT :: Monad m => StateT s m a -> s -> m (a, s) runStateT f s = do useXS <- getStateTFunc f s _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
