Reduced clutter in monadic code

+ Eliminated vairous ad-hoc coersion functions between specific monads 
  (IO, Err, IOE, Check) in favor of more general lifting functions
  (liftIO, liftErr).
+ Generalized many basic monadic operations from specific monads to
  arbitrary monads in the appropriate class (MonadIO and/or ErrorMonad),
  thereby completely eliminating the need for lifting functions in lots
  of places.

This can be considered a small step forward towards a cleaner
compiler API and more malleable compiler code in general.
This commit is contained in:
hallgren
2013-11-20 00:45:33 +00:00
parent c29326d074
commit c8cbd4477f
21 changed files with 196 additions and 214 deletions

View File

@@ -12,7 +12,6 @@ import Data.Version
import System.Directory
import System.Environment (getArgs)
import System.Exit
import System.IO
import GF.System.Console (setConsoleEncoding)
main :: IO ()
@@ -23,8 +22,8 @@ main = do
Ok (opts,files) -> do curr_dir <- getCurrentDirectory
lib_dir <- getLibraryDirectory opts
mainOpts (fixRelativeLibPaths curr_dir lib_dir opts) files
Bad err -> do hPutStrLn stderr err
hPutStrLn stderr "You may want to try --help."
Bad err -> do ePutStrLn err
ePutStrLn "You may want to try --help."
exitFailure
mainOpts :: Options -> [FilePath] -> IO ()