跟踪ghci的历史

时间:2016-06-19 15:12:45

标签: haskell state ghc read-eval-print-loop ghci

历史记录管理如何在GHCI或其他基于Haskell的REPL中运行?由于Haskell是纯语言,我猜它是使用monad实现的,也许是state monad

请注意我是Haskell的初学者,所以请提供详细的解释,而不仅仅是链接到源。

1 个答案:

答案 0 :(得分:2)

这是程序如何保留用户输入的命令历史的简化示例。它基本上与猜数游戏具有相同的结构,所以一旦你明白你应该没有理解这个:

import Control.Monad.State
import Control.Monad

shell :: StateT [String] IO ()
shell = forever $ do
  lift $ putStr "$ "
  cmd <- lift getLine
  if cmd == "history"
    then do hist <- get
            lift $ forM_ hist $ putStrLn
    else modify (++ [cmd])

main = do putStrLn "Welcome to the history shell."
          putStrLn "Type 'history' to see your command history."
          execStateT shell []