on master help sign in
switch to haskeline to remove readline dependency
095294dAgentM
TutorialDInterpreter.hs+18−16
@@ -18,8 +18,9 @@ import qualified Data.Map as M
18import qualified Data.List as L
18import qualified Data.List as L
19import Control.Applicative (liftA, (<*), (*>))
19import Control.Applicative (liftA, (<*), (*>))
20import Control.Monad.State
20import Control.Monad.State
21−import System.Console.Readline
21+import System.Console.Haskeline
22import System.IO
22import System.IO
23+import System.Directory (getHomeDirectory)
23
24
24lexer :: Token.TokenParser ()
25lexer :: Token.TokenParser ()
25lexer = Token.makeTokenParser tutD
26lexer = Token.makeTokenParser tutD
@@ -327,25 +328,26 @@ interpretOps context instring = case parse interpreterOps "" instring of
327
328
328reprLoop :: DatabaseContext -> IO ()
329reprLoop :: DatabaseContext -> IO ()
329reprLoop context = do
330reprLoop context = do
330− maybeLine <- readline "TutorialD: "
331+ homeDirectory <- getHomeDirectory
332+ let settings = defaultSettings {historyFile = Just (homeDirectory ++ "/.tutd_history")}
333+ maybeLine <- runInputT settings $ do
334+ getInputLine "TutorialD: "
331 case maybeLine of
335 case maybeLine of
332 Nothing -> return ()
336 Nothing -> return ()
333 Just line -> do
337 Just line -> do
334− addHistory line
335−
336− case interpretOps context line of
338+ case interpretOps context line of
337− QuitResult -> return ()
339+ QuitResult -> return ()
338− DisplayErrorResult err -> hPutStrLn stderr ("ERR: " ++ err)
340+ DisplayErrorResult err -> hPutStrLn stderr ("ERR: " ++ err)
339− DisplayResult out -> do
341+ DisplayResult out -> do
340− putStrLn out
342+ putStrLn out
343+ reprLoop context
344+ NoActionResult -> do
345+ let (value, contextup) = interpret context line
346+ case value of
347+ Nothing -> reprLoop contextup
348+ (Just err) -> do
349+ hPutStrLn stderr ("ERR:" ++ show err)
341 reprLoop context
350 reprLoop context
342− NoActionResult -> do
343− let (value, contextup) = interpret context line
344− case value of
345− Nothing -> reprLoop contextup
346− (Just err) -> do
347− hPutStrLn stderr ("ERR:" ++ show err)
348− reprLoop context
349
351
350restrictionPredicateP :: Parser RestrictionPredicateExpr
352restrictionPredicateP :: Parser RestrictionPredicateExpr
351restrictionPredicateP = buildExpressionParser predicateOperators predicateTerm
353restrictionPredicateP = buildExpressionParser predicateOperators predicateTerm
project-m36.cabal+1−1
@@ -7,7 +7,7 @@ Category: Relational Algebra
7Cabal-Version: >= 1.2
7Cabal-Version: >= 1.2
8
8
9Executable tutd
9Executable tutd
10− Build-Depends: base,mtl,containers,unordered-containers,parsec,hashable,readline
10+ Build-Depends: base,mtl,containers,unordered-containers,parsec,hashable,haskeline,directory
11 main-is: tutd.hs
11 main-is: tutd.hs
12 GHC-Options: -fwarn-unused-imports -fwarn-unused-binds
12 GHC-Options: -fwarn-unused-imports -fwarn-unused-binds
13
13