-
Notifications
You must be signed in to change notification settings - Fork 117
/
Copy pathRepl.hs
34 lines (26 loc) · 835 Bytes
/
Repl.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{-# LANGUAGE OverloadedStrings #-}
module Repl (
mainLoop,
) where
import Eval ( safeExec, evalText )
--import Eval ( runParseTest )
import Data.Text as T ( pack )
import Control.Monad.Trans ( MonadIO(liftIO) )
import System.Console.Haskeline
( defaultSettings, getInputLine, outputStrLn, runInputT, InputT )
type Repl a = InputT IO a
mainLoop :: IO ()
mainLoop = runInputT defaultSettings repl
repl :: Repl ()
repl = do
minput <- getInputLine "Repl> "
case minput of
Nothing -> outputStrLn "Goodbye."
Just input -> liftIO (process input) >> repl
--Just input -> (liftIO $ processToAST input) >> repl
process :: String -> IO ()
process str = do
res <- safeExec $ evalText $ T.pack str
either putStrLn return res
--processToAST :: String -> IO ()
--processToAST str = print $ runParseTest $ T.pack str