mirror of
https://github.com/kanaka/mal.git
synced 2024-10-27 14:52:16 +03:00
8a19f60386
- Reorder README to have implementation list after "learning tool" bullet. - This also moves tests/ and libs/ into impls. It would be preferrable to have these directories at the top level. However, this causes difficulties with the wasm implementations which need pre-open directories and have trouble with paths starting with "../../". So in lieu of that, symlink those directories to the top-level. - Move the run_argv_test.sh script into the tests directory for general hygiene.
44 lines
658 B
Haskell
44 lines
658 B
Haskell
import System.IO (hFlush, stdout)
|
|
|
|
import Readline (addHistory, readline, load_history)
|
|
|
|
type MalVal = String
|
|
|
|
-- read
|
|
|
|
mal_read :: String -> MalVal
|
|
mal_read = id
|
|
|
|
-- eval
|
|
|
|
eval :: MalVal -> MalVal
|
|
eval = id
|
|
|
|
-- print
|
|
|
|
mal_print :: MalVal -> String
|
|
mal_print = id
|
|
|
|
-- repl
|
|
|
|
rep :: String -> String
|
|
rep = mal_print . eval . mal_read
|
|
|
|
repl_loop :: IO ()
|
|
repl_loop = do
|
|
line <- readline "user> "
|
|
case line of
|
|
Nothing -> return ()
|
|
Just "" -> repl_loop
|
|
Just str -> do
|
|
addHistory str
|
|
putStrLn $ rep str
|
|
hFlush stdout
|
|
repl_loop
|
|
|
|
main :: IO ()
|
|
main = do
|
|
load_history
|
|
|
|
repl_loop
|