Naw*_*waz 30 haskell working-directory ghci winghci
我已经开始自学Haskell了,为此我已经安装了适用于Windows 的Haskell平台.我现在正在使用WinGHCi.我了解到它有:cd用于更改目录的命令.但问题是,我怎么知道我目前在哪个目录?我不知道为什么要更改目录.我搜索了很多但找不到答案.
请告诉我是否有办法知道当前的工作目录.我最好配置命令提示符本身来显示当前目录,就像Linux的控制台一样.
按照@Daniel的建议,我做了这些:
.ghci文件(我认为这是类Unix操作系统),所以我创建了一个文件ghci.conf的C:\Users\Apelles\AppData\Roaming\ghc文件夹,因为它是在这里指示.ghci.conf.ghci.exe这是类似控制台的窗口.我注意到它加载了比之前通常用于加载的模块更多的模块.这是快照:
你可以看到它加载了更多的模块,最后一行说,
无法解析提示字符串.使用Haskell语法.
这是什么意思?哪一行导致问题(来自以下脚本)?
let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); }
:def doprompt (\_ -> cur ">")
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">")
:doprompt
Run Code Online (Sandbox Code Playgroud)
此外,如果我将ghci.conf文件重命名为某个随机名称,然后启动ghci.exe,则会加载这些模块:

正如我之前所说的,它加载的模块少的数量,这意味着与ghci.conf,ghci.exe做了成功,但在某些时候会失败.如何解决?
我不知道这是“正确”的方式做到这一点,但因为:!允许shell命令,你也可以(你的操作系统),相应的shell命令把它读出来的目录或内容(所以cd,ls和喜欢)。例如,您可以编写:
:! cd
Run Code Online (Sandbox Code Playgroud)
这取决于您需要该目录的内容。如果您只想在控制台中将其打印出来,则可以提供帮助。
祝一切顺利!
将 ghci 提示符设置为当前工作目录的穷人解决方案是:
let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); }
:def doprompt (\_ -> cur ">")
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">")
:doprompt
Run Code Online (Sandbox Code Playgroud)
在文件中.ghci。
在第一行中,我们定义cur :: String -> IO String获取当前目录并返回 ghci 命令以相应地设置提示。然后我们定义一个doprompt执行该操作的 ghci 命令以及一个更改目录和设置提示的命令。最后一行:doprompt在启动时执行。
不幸的是,这并没有反映目录的更改,之后:cd dir必须做一份手册,或者使用它来更改目录。:doprompt:mycd
getCurrentDirectory为了避免提示太长,可以通过删除文件路径的初始部分来操纵结果。
这种简单方法的另一个缺点是提示不再包含有关已加载模块的信息。我相信所有这些都可以克服,但我现在没有足够的动力去挖掘。