Skip to content

Commit 0ecb44b

Browse files
committed
version 4.1.3
1 parent ae92e06 commit 0ecb44b

File tree

2 files changed

+31
-30
lines changed

2 files changed

+31
-30
lines changed

Main.hs

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Text.Regex.Posix
1212
import System.Environment
1313
import System.Directory (getHomeDirectory)
1414
import System.FilePath ((</>))
15-
import System.Console.Haskeline hiding (handle, catch, throwTo)
15+
import System.Console.Haskeline
1616
import System.Console.GetOpt
1717
import System.Exit (ExitCode (..), exitWith)
1818

@@ -24,7 +24,7 @@ import qualified Paths_egison_tutorial as P
2424

2525
main :: IO ()
2626
main = 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
4646
runWithEgisonTutorialOpts EgisonTutorialOpts{ tOptShowHelp = True } = printHelp
4747
runWithEgisonTutorialOpts EgisonTutorialOpts{ tOptShowVersion = True } = printVersionNumber
48-
runWithEgisonTutorialOpts tOpts = evalRuntimeT ET.defaultOption run
48+
runWithEgisonTutorialOpts EgisonTutorialOpts{ tOptPrompt = prompt } = evalRuntimeT ET.defaultOption { optPrompt = prompt } run
4949

5050
run :: RuntimeM ()
5151
run = 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

200201
replSettings :: MonadIO m => FilePath -> Env -> Settings m
@@ -215,17 +216,17 @@ repl :: Env -> RuntimeM ()
215216
repl 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

262263
data Tutorial = Tutorial [Section]

egison-tutorial.cabal

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Name: egison-tutorial
2-
Version: 4.1.0
2+
Version: 4.1.3
33
Synopsis: A tutorial program for the Egison programming language
44
Description: A tutorial program for the Egison programming language.
55
Egison is the programming langugage that realized non-linear pattern-matching against unfree data types.
@@ -21,15 +21,15 @@ source-repository head
2121
Executable egison-tutorial
2222
default-language: Haskell2010
2323
Main-is: Main.hs
24-
Build-depends: egison >= 4.1.0
24+
Build-depends: egison >= 4.1.3
2525
, base >= 4.0 && < 5
2626
, haskeline
2727
, transformers
2828
, mtl
2929
, directory
3030
, filepath
3131
, regex-posix
32-
, exceptions
32+
, exceptions
3333
ghc-options: -Wall -Wno-name-shadowing
3434
Other-modules: Paths_egison_tutorial
3535
autogen-modules: Paths_egison_tutorial

0 commit comments

Comments
 (0)