Changeset 32 for src/Main.hs
- Timestamp:
- 02/16/05 18:48:28 (4 years ago)
- svk:copy_cache_prev:
- 1041
- Files:
-
- 1 modified
-
src/Main.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Main.hs
r31 r32 25 25 26 26 main :: IO () 27 main = getArgs >>= run 27 main = do 28 args <- getArgs 29 run $ concatMap procArg args 30 where 31 procArg ('-':'e':prog@(_:_)) = ["-e", prog] 32 procArg ('-':'d':rest@(_:_)) = ["-d", ('-':rest)] 33 procArg x = [x] 28 34 29 35 run :: [String] -> IO () 36 run ("-d":rest) = run rest 37 run ("-w":rest) = run rest 30 38 run (('-':'e':prog@(_:_)):args) = doRun "-" args prog 31 39 run ("-e":prog:args) = doRun "-" args prog 32 40 run ("-h":_) = printHelp 41 run ("-":args) = do 42 prog <- getContents 43 doRun "-" [] prog 33 44 run (file:args) = readFile file >>= doRun file args 34 45 run [] = do … … 37 48 if isTTY 38 49 then banner >> repLoop 39 else do 40 prog <- getContents 41 doRun "-" [] prog 50 else run ["-"] 42 51 43 52 repLoop :: IO () … … 61 70 62 71 doEval :: [String] -> String -> IO () 63 doEval = runProgramWith (putStrLn . pretty) "<interactive>" 72 doEval = do 73 runProgramWith id (putStrLn . pretty) "<interactive>" 64 74 65 75 doRun :: String -> [String] -> String -> IO () 66 doRun = runProgramWith (putStr . concatMap vCast . vCast) 76 doRun = do 77 runProgramWith (\e -> e{ envDebug = Nothing }) end 78 where 79 end v@(VError str exp) = do 80 hPutStrLn stderr str 81 exitFailure 82 end _ = return () 67 83 68 runProgramWith :: ( Val -> IO ()) -> String -> [String] -> String -> IO ()69 runProgramWith f name args prog = do84 runProgramWith :: (Env -> Env) -> (Val -> IO ()) -> VStr -> [VStr] -> String -> IO () 85 runProgramWith fenv f name args prog = do 70 86 env <- emptyEnv 71 let env' = runRule (prepare env) id ruleProgram prog87 let env' = runRule (prepare $ fenv env) id ruleProgram prog 72 88 val <- (`runReaderT` env') $ do 73 89 (`runContT` return) $ do … … 80 96 ] ++ envGlobal e } 81 97 98 {- 99 main = do 100 -- (optsIO, rest, errs) <- return . getOpt Permute options $ procArgs args 101 102 options :: [OptDescr (Opts -> Opts)] 103 options = 104 [ reqArg "e" ["eval"] "command" "Command-line program" 105 (\s o -> o { encodings = split "," s }) 106 , noArg "d" ["debug"] "Turn on debugging" 107 (\s o -> o { inputFile = s }) 108 , noArg "h" ["help"] "Show help" 109 (\o -> o { showHelp = usage "" }) 110 ] 111 -} 112
