@@ -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)
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
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
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
344+ NoActionResult -> do
345+ let (value, contextup) = interpret context line
347+ Nothing -> reprLoop contextup
349+ hPutStrLn stderr ("ERR:" ++ show err)
341 reprLoop context
350 reprLoop context
342− NoActionResult -> do
343− let (value, contextup) = interpret context line
345− Nothing -> reprLoop contextup
347− hPutStrLn stderr ("ERR:" ++ show err)
350restrictionPredicateP :: Parser RestrictionPredicateExpr
352restrictionPredicateP :: Parser RestrictionPredicateExpr
351restrictionPredicateP = buildExpressionParser predicateOperators predicateTerm
353restrictionPredicateP = buildExpressionParser predicateOperators predicateTerm