1
1
mirror of https://github.com/kanaka/mal.git synced 2024-10-27 14:52:16 +03:00
mal/impls/haskell/Readline.hs
Joel Martin 8a19f60386 Move implementations into impls/ dir
- Reorder README to have implementation list after "learning tool"
  bullet.

- This also moves tests/ and libs/ into impls. It would be preferrable
  to have these directories at the top level.  However, this causes
  difficulties with the wasm implementations which need pre-open
  directories and have trouble with paths starting with "../../". So
  in lieu of that, symlink those directories to the top-level.

- Move the run_argv_test.sh script into the tests directory for
  general hygiene.
2020-02-10 23:50:16 -06:00

36 lines
880 B
Haskell

module Readline
( addHistory, readline, load_history )
where
-- Pick one of these:
-- GPL license
import qualified System.Console.Readline as RL
-- BSD license
--import qualified System.Console.Editline.Readline as RL
import Control.Monad (when)
import System.Directory (getHomeDirectory, doesFileExist)
import System.IO.Error (tryIOError)
history_file :: IO String
history_file = do
home <- getHomeDirectory
return $ home ++ "/.mal-history"
load_history :: IO ()
load_history = do
hfile <- history_file
fileExists <- doesFileExist hfile
when fileExists $ do
content <- readFile hfile
mapM_ RL.addHistory (lines content)
readline :: String -> IO (Maybe String)
readline = RL.readline
addHistory :: String -> IO ()
addHistory line = do
hfile <- history_file
_ <- tryIOError (appendFile hfile (line ++ "\n"))
RL.addHistory line