@@ -12,7 +12,7 @@ import Text.Regex.Posix
1212import System.Environment
1313import System.Directory (getHomeDirectory )
1414import System.FilePath ((</>) )
15- import System.Console.Haskeline hiding ( handle , catch , throwTo )
15+ import System.Console.Haskeline
1616import System.Console.GetOpt
1717import System.Exit (ExitCode (.. ), exitWith )
1818
@@ -24,7 +24,7 @@ import qualified Paths_egison_tutorial as P
2424
2525main :: IO ()
2626main = do args <- getArgs
27- let (actions, nonOpts , _) = getOpt Permute tOptions args
27+ let (actions, _ , _) = getOpt Permute tOptions args
2828 let tOpts = foldl (flip id ) defaultEgisonTutorialOpts actions
2929 runWithEgisonTutorialOpts tOpts
3030
@@ -45,7 +45,7 @@ runWithEgisonTutorialOpts EgisonTutorialOpts{ tOptSection = Just sn, tOptSubSect
4545 putStrLn ret
4646runWithEgisonTutorialOpts EgisonTutorialOpts { tOptShowHelp = True } = printHelp
4747runWithEgisonTutorialOpts EgisonTutorialOpts { tOptShowVersion = True } = printVersionNumber
48- runWithEgisonTutorialOpts tOpts = evalRuntimeT ET. defaultOption run
48+ runWithEgisonTutorialOpts EgisonTutorialOpts { tOptPrompt = prompt } = evalRuntimeT ET. defaultOption { optPrompt = prompt } run
4949
5050run :: RuntimeM ()
5151run = do
@@ -175,14 +175,15 @@ getNumber n = do
175175 getNumber n
176176
177177-- | Get Egison expression from the prompt. We can handle multiline input.
178- getEgisonExprOrNewLine :: EgisonOpts -> InputT RuntimeM (Either Bool (String , TopExpr ))
179- getEgisonExprOrNewLine opts = getEgisonExprOrNewLine' opts " "
178+ getEgisonExprOrNewLine :: InputT RuntimeM (Either Bool (String , TopExpr ))
179+ getEgisonExprOrNewLine = getEgisonExprOrNewLine' " "
180180
181- getEgisonExprOrNewLine' :: EgisonOpts -> String -> InputT RuntimeM (Either Bool (String , TopExpr ))
182- getEgisonExprOrNewLine' opts prev = do
181+ getEgisonExprOrNewLine' :: String -> InputT RuntimeM (Either Bool (String , TopExpr ))
182+ getEgisonExprOrNewLine' prev = do
183+ opts <- lift ask
183184 mLine <- case prev of
184185 " " -> getInputLine $ optPrompt opts
185- _ -> getInputLine $ replicate (length $ optPrompt opts) ' '
186+ _ -> getInputLine $ replicate (length ( optPrompt opts) ) ' '
186187 case mLine of
187188 Nothing -> return $ Left False -- The user's input is 'Control-D'.
188189 Just [] -> return $ Left True -- The user's input is 'Enter'.
@@ -191,10 +192,10 @@ getEgisonExprOrNewLine' opts prev = do
191192 parsedExpr <- lift $ Parser. parseTopExpr input
192193 case parsedExpr of
193194 Left err | show err =~ " unexpected end of input" ->
194- getEgisonExprOrNewLine' opts $ input ++ " \n "
195+ getEgisonExprOrNewLine' ( input ++ " \n " )
195196 Left err -> do
196197 liftIO $ print err
197- getEgisonExprOrNewLine opts
198+ getEgisonExprOrNewLine
198199 Right topExpr -> return $ Right (input, topExpr)
199200
200201replSettings :: MonadIO m => FilePath -> Env -> Settings m
@@ -215,17 +216,17 @@ repl :: Env -> RuntimeM ()
215216repl env = do
216217 section <- liftIO $ selectSection tutorial
217218 case section of
218- Section _ cs -> loop env cs True
219+ Section _ cs -> repl' env cs True
219220 where
220- loop :: Env -> [Content ] -> Bool -> RuntimeM ()
221- loop env [] _ = do
221+ repl' :: Env -> [Content ] -> Bool -> RuntimeM ()
222+ repl' env [] _ = do
222223 repl env
223- loop env (content: contents) b = (do
224+ repl' env (content: contents) b = (do
224225 if b
225226 then liftIO $ putStrLn $ show content
226227 else return ()
227228 home <- liftIO $ getHomeDirectory
228- input <- runInputT (replSettings home env) $ getEgisonExprOrNewLine ET. defaultOption
229+ input <- runInputT (replSettings home env) $ getEgisonExprOrNewLine
229230 case input of
230231 -- The user input 'Control-D'.
231232 Left False -> do
@@ -235,28 +236,28 @@ repl env = do
235236 else do
236237 b <- liftIO $ yesOrNo " Do you want to proceed next?"
237238 if b
238- then loop env contents True
239- else loop env (content: contents) False
239+ then repl' env contents True
240+ else repl' env (content: contents) False
240241 -- The user input just 'Enter'.
241242 Left True -> do
242243 b <- liftIO $ yesOrNo " Do you want to proceed next?"
243244 if b
244- then loop env contents True
245- else loop env (content: contents) False
245+ then repl' env contents True
246+ else repl' env (content: contents) False
246247 Right (topExpr, _) -> do
247- result <- fromEvalT (runTopExpr env topExpr)
248+ result <- fromEvalT (runTopExprStr env topExpr)
248249 case result of
249250 Left err -> do
250251 liftIO $ putStrLn $ show err
251- loop env (content: contents) False
252- Right (Just ret , env') -> liftIO (putStrLn ( show ret)) >> loop env' (content: contents) False
253- Right (Nothing , env') -> loop env' (content: contents) False )
252+ repl' env (content: contents) False
253+ Right (Just output , env') -> liftIO (putStrLn output) >> repl' env' (content: contents) False
254+ Right (Nothing , env') -> repl' env' (content: contents) False )
254255 `catch`
255256 (\ e -> case e of
256- UserInterrupt -> liftIO (putStrLn " " ) >> loop env (content: contents) False
257- StackOverflow -> liftIO (putStrLn " Stack over flow!" ) >> loop env (content: contents) False
258- HeapOverflow -> liftIO (putStrLn " Heap over flow!" ) >> loop env (content: contents) False
259- _ -> liftIO (putStrLn " error!" ) >> loop env (content: contents) False
257+ UserInterrupt -> liftIO (putStrLn " " ) >> repl' env (content: contents) False
258+ StackOverflow -> liftIO (putStrLn " Stack over flow!" ) >> repl' env (content: contents) False
259+ HeapOverflow -> liftIO (putStrLn " Heap over flow!" ) >> repl' env (content: contents) False
260+ _ -> liftIO (putStrLn " error!" ) >> repl' env (content: contents) False
260261 )
261262
262263data Tutorial = Tutorial [Section ]
0 commit comments