From 87e64a804cbe5848d20f0555dedae42e1516cbbc Mon Sep 17 00:00:00 2001 From: hallgren Date: Thu, 13 Aug 2015 10:49:50 +0000 Subject: GF Shell: refactoring for improved modularity and reusability: + Generalize the CommandInfo type by parameterizing it on the monad instead of just the environment. + Generalize the commands defined in GF.Command.{Commands,Commands2,CommonCommands,SourceCommands,HelpCommand} to work in any monad that supports the needed operations. + Liberate GF.Command.Interpreter from the IO monad. Also, move the current PGF from CommandEnv to GFEnv in GF.Interactive, making the command interpreter even more generic. + Use a state monad to maintain the state of the interpreter in GF.{Interactive,Interactive2}. --- src/compiler/GF/Infra/UseIO.hs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/compiler/GF/Infra/UseIO.hs') diff --git a/src/compiler/GF/Infra/UseIO.hs b/src/compiler/GF/Infra/UseIO.hs index 14120d811..ad0c75fd5 100644 --- a/src/compiler/GF/Infra/UseIO.hs +++ b/src/compiler/GF/Infra/UseIO.hs @@ -34,8 +34,9 @@ import System.CPUTime --import System.Cmd import Text.Printf --import Control.Applicative(Applicative(..)) -import Control.Monad +import Control.Monad(when,liftM,foldM) import Control.Monad.Trans(MonadIO(..)) +import Control.Monad.State(StateT,lift) import Control.Exception(evaluate) --putIfVerb :: MonadIO io => Options -> String -> io () @@ -201,6 +202,13 @@ instance Output IOE where putStrLnE = liftIO . putStrLnE putStrE = liftIO . putStrE -} + +instance Output m => Output (StateT s m) where + ePutStr = lift . ePutStr + ePutStrLn = lift . ePutStrLn + putStrE = lift . putStrE + putStrLnE = lift . putStrLnE + --putPointE :: Verbosity -> Options -> String -> IO a -> IO a putPointE v opts msg act = do when (verbAtLeast opts v) $ putStrE msg -- cgit v1.2.3