如何在WinGHCi中查看当前的工作目录

问题描述 投票:26回答:4

我已经开始自学Haskell了,为此我已经为Windows安装了The Haskell Platform。我现在正在使用WinGHCi。我了解到它有命令:cd用于更改目录。但问题是,我怎么知道我目前在哪个目录?我不知道为什么要更改目录。我搜索了很多但找不到答案。

请告诉我是否有办法知道当前的工作目录。我最好配置命令提示符本身来显示当前目录,就像Linux的控制台一样。


按照@Daniel的建议,我做了这些:

  • 由于我在Windows 7上工作,没有.ghci文件(我认为它适用于类Unix操作系统),所以我在ghci.conf文件夹中创建了一个文件C:\Users\Apelles\AppData\Roaming\ghc,如it is instructed here
  • 复制粘贴了Daniel对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

另外,如果我将ghci.conf文件重命名为某个随机名称,然后启动ghci.exe,它会加载这些模块:

正如我之前所说,它加载的模块数量较少,这意味着使用ghci.conf,ghci.exe可以成功完成某些任务,但在某些时候失败了。如何解决?

haskell ghci working-directory winghci
4个回答
27
投票

System.Directory.getCurrentDirectory


3
投票

一个穷人的解决方案是将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

.ghci文件中。

在第一行中,我们定义获取当前目录的cur :: String -> IO String并返回ghci命令以相应地设置提示。然后我们定义执行该操作的ghci命令doprompt和更改目录并设置提示的命令。最后一行在启动时执行:doprompt

不幸的是,这不会使:cd dir反映目录的变化,之后必须做一个手动:doprompt,或使用:mycd来更改目录。

为了避免过长的提示,可以通过删除文件路径的初始部分来操纵getCurrentDirectory的结果。

这种简单方法的另一个缺点是提示不再包含有关已加载模块的信息。我相信所有可以克服的事情,但我现在没有足够的动力去挖掘。


3
投票

我不确定这是否是“正确”的方法,但是由于:!允许shell命令,你也可以用适当的shell命令(你的操作系统)来读取目录或内容(所以cdls和喜欢)。例如,你可以写:

:! cd

这取决于你需要什么目录。如果您只想在控制台中打印出来,那么这可以提供帮助。

祝一切顺利!


1
投票

在ghci命令提示符下键入:! cd,它将为您提供当前目录的输出。通常,使用:!后跟shell命令在ghci命令提示符下运行任何shell命令。 Windows和Mac / Linux上的shell不同,因此您可以使用的命令会有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.