Factor out common code to processRobin.
Chris Pressey
5 years ago
19 | 19 | |
20 | 20 | |
21 | 21 | processArgs args env = processArgs' args env [] [] where |
22 | processArgs' [] env reactors results = return (env, reactors, results) | |
22 | processArgs' [] env reactors results = | |
23 | return (env, reactors, results) | |
23 | 24 | processArgs' ("eval":filename:rest) env reactors results = do |
24 | 25 | exprText <- readFile filename |
25 | case parseExpr exprText of | |
26 | Right expr -> do | |
27 | let topExprs = [List [Symbol "display", expr]] | |
28 | (env', reactors', results') <- return $ TopLevel.collect topExprs env reactors results | |
29 | processArgs' rest env' reactors' results' | |
30 | Left problem -> do | |
31 | hPutStr stderr (show problem) | |
32 | exitWith $ ExitFailure 1 | |
26 | (env', reactors', results') <- processRobin (parseExpr exprText) (\expr -> [List [Symbol "display", expr]]) env reactors results | |
27 | processArgs' rest env' reactors' results' | |
33 | 28 | processArgs' (filename:rest) env reactors results = do |
34 | program <- readFile filename | |
35 | case parseToplevel program of | |
36 | Right topExprs -> do | |
37 | (env', reactors', results') <- return $ TopLevel.collect topExprs env reactors results | |
38 | processArgs' rest env' reactors' results' | |
39 | Left problem -> do | |
40 | hPutStr stderr (show problem) | |
41 | exitWith $ ExitFailure 1 | |
29 | toplevelText <- readFile filename | |
30 | (env', reactors', results') <- processRobin (parseToplevel toplevelText) id env reactors results | |
31 | processArgs' rest env' reactors' results' | |
32 | ||
33 | ||
34 | processRobin parsed convertToToplevel env reactors results = | |
35 | case parsed of | |
36 | Right expr -> do | |
37 | return $ TopLevel.collect (convertToToplevel expr) env reactors results | |
38 | Left problem -> do | |
39 | hPutStr stderr (show problem) | |
40 | exitWith $ ExitFailure 1 | |
42 | 41 | |
43 | 42 | |
44 | 43 | writeResults [] = return () |