From 2e3f9d321e4aac4df42759c4da2bf48bcad7e1fa Mon Sep 17 00:00:00 2001 From: Ivy Date: Fri, 29 Jan 2021 00:19:19 +0100 Subject: [PATCH] I Now uses haskeline to improve repl --- cherry-lisp.cabal | 3 ++- src/Main.hs | 35 +++++++++++++++-------------------- stack.yaml | 3 ++- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/cherry-lisp.cabal b/cherry-lisp.cabal index 86c6a97..ed13953 100644 --- a/cherry-lisp.cabal +++ b/cherry-lisp.cabal @@ -28,4 +28,5 @@ executable cherry build-depends: base >= 4.7 && < 5, containers, - parsec + parsec, + haskeline diff --git a/src/Main.hs b/src/Main.hs index 3b82d59..5a7138b 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -3,24 +3,22 @@ module Main where import Evaluator import ExprParser import Text.Parsec.Error -import Data.Either -import System.IO +import Control.Monad +import Data.Maybe +import System.Console.Haskeline main :: IO () main = do - putStrLn "" - putLogo - putStrLn "" - cycle - where cycle = do - putPrompt - hFlush stdout - s <- getLine - let r = readEval s - putStrLn $ case r of - (Right res) -> res - (Left err) -> show err - cycle + putStrLn logo + runInputT defaultSettings loop + where loop = do + line <- getInputLine "cherry> " + unless (isNothing line) $ do + let r = readEval $ fromJust line + outputStrLn $ case r of + Right res -> res + Left err -> show err + loop readEval :: String -> Either ParseError String readEval s = do @@ -28,8 +26,5 @@ readEval s = do let result = eval expr return $ show result -putLogo :: IO () -putLogo = putStr . concat $ map (++"\n") [" /\\", " | \\", " @ @"] - -putPrompt :: IO () -putPrompt = putStr "chery> " +logo :: String +logo = unlines [""," /\\", " | \\", " @ @",""] diff --git a/stack.yaml b/stack.yaml index 07d7023..56af611 100644 --- a/stack.yaml +++ b/stack.yaml @@ -34,7 +34,8 @@ packages: # These entries can reference officially published versions as well as # forks / in-progress versions pinned to a git hash. For example: # -# extra-deps: +extra-deps: +#- readline-1.0.3.0 # - acme-missiles-0.3 # - git: https://github.com/commercialhaskell/stack.git # commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a