免责声明:我对 Haskell 有点陌生。
我正在写一个解释器,或者,在这种情况下,一个 REPL。为此,我使用了 haskeline,这对 REPL 来说很好。它具有将命令行历史记录存储在文件中的能力,这也很好。
但是,我在使用它时遇到的一个问题是它似乎没有将“~”扩展到主目录,这意味着我必须手动检索主目录。
我可以这样做(目前正在这样做):
-- | returns a fresh settings variable
addSettings :: Env -> Settings IO
addSettings env = Settings { historyFile = Just getDir
, complete = completeWord Nothing " \t" $
return . completionSearch env
, autoAddHistory = True
}
where
getDir :: FilePath
getDir = unsafePerformIO getHomeDirectory ++ "/.zepto_history"
但这使用unsafePerformIO
,这让我畏缩。您知道不涉及重写整个函数的良好且干净的解决方法吗?这可能是haskeline
我不知道的功能,也可能是我没有看到的功能。
告诉我没有办法重写和重新思考这一切也很好。
编辑:
我知道unsafePerformIO
这很糟糕,这就是为什么它让我畏缩。如果你是 Haskell 的新手并且现在正在阅读这个问题:假装它不存在。