diff options
| author | hallgren <hallgren@chalmers.se> | 2015-08-13 10:49:50 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2015-08-13 10:49:50 +0000 |
| commit | 87e64a804cbe5848d20f0555dedae42e1516cbbc (patch) | |
| tree | 743ba4592624e9947dcf56945eb76c9dacc0393e /src/compiler/GF/Infra/UseIO.hs | |
| parent | d860a921e061ca21e7af8c1c42f5bbca4bd5c988 (diff) | |
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}.
Diffstat (limited to 'src/compiler/GF/Infra/UseIO.hs')
| -rw-r--r-- | src/compiler/GF/Infra/UseIO.hs | 10 |
1 files changed, 9 insertions, 1 deletions
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 |
