{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoImplicitPrelude #-} module Language.Bs.Repl ( mainLoop ) where import Control.Monad.Trans import Data.String import Data.Text as T import Language.Bs.Eval import Protolude import System.Console.Haskeline type Repl a = InputT IO a mainLoop :: IO () mainLoop = runInputT defaultSettings repl repl :: Repl () repl = do minput <- getInputLine "bs> " case minput of Nothing -> outputStrLn "bye." 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