Haskell: steps 4-6. Line editing. Simpler fn calls.
[jackhill/mal.git] / haskell / step0_repl.hs
CommitLineData
b76aa73b
JM
1import Control.Monad
2
fa9a9758
JM
3import Readline (readline, load_history)
4
b76aa73b
JM
5-- read
6mal_read str = str
7
8-- eval
9eval ast env = ast
10
11-- print
12mal_print exp = exp
13
14-- repl
15rep line = mal_print $ eval (mal_read line) ""
16
17repl_loop = do
fa9a9758
JM
18 line <- readline "user> "
19 case line of
20 Nothing -> return ()
21 Just "" -> repl_loop
22 Just str -> do
23 putStrLn $ rep str
24 repl_loop
b76aa73b 25
fa9a9758
JM
26main = do
27 load_history
28 repl_loop