mima-tools/mima-run/Main.hs
Joscha 6b81fd67b4 Implement basic mima-run functionality
Bugs fixed:
- Print correct file name when load/save error occurs
- Correctly identify invalid file formats
2020-03-27 22:10:59 +00:00

31 lines
1 KiB
Haskell

module Main where
import Control.Monad.IO.Class
import qualified Data.Text.IO as T
import Options.Applicative
import Mima.Format
import Mima.MimaRun.Options
import Mima.Run
import Mima.Vm.State
import Mima.Vm.Storage
main :: IO ()
main = runOrExit 2 $ do
opts <- liftIO $ execParser parserInfo
initialState <- loadMimaState $ inputFile opts
finalState <- liftIO $ case steps opts of
Nothing -> do
let (finalState, abortReason, stepsMade) = execute initialState
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
T.putStrLn $ toText abortReason
pure finalState
Just n -> do
let (finalState, mAbortReason, stepsMade) = executeN n initialState
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
case mAbortReason of
Nothing -> putStrLn "Ran out of steps"
Just abortReason -> T.putStrLn $ toText abortReason
pure finalState
liftIO $ putStrLn ""
liftIO $ print finalState