2016-04-18 29 views
0

我有以下的程序,它抛出一个运行时异常:如何在Haskell中获得openFile的路径?

import System.IO 

main :: IO() 
main = do 
    handle <- openFile "palindrome.txt" ReadMode 
    input <- hGetContents handle 
    hClose handle 

它的类型检查,但每当我尝试运行main,我会得到一个错误:

Atom session on Mac OS X

上午什么我做错了?

+0

一点点的更多信息。你在哪里执行你的程序,'file.txt'在哪里? – Zeta

+0

感谢您的回复。我运行一个shell并在Mac上打开ghci模式。 file.txt与程序本身在同一个文件夹中 – Mauritius

+0

[编辑]你的问题附加信息。显示您的整个GHCi会话以及工作目录的相关内容,例如'ls -l * .txt'。 – Zeta

回答

3

您当前的程序使用相对路径。因此,该文件必须位于您启动GHCi的同一目录中。鉴于你的工作空间是$HOME/Desktop/Haskell,它可能只检查$HOME/Desktop/Haskell/palindrome.txt。如果要在$ HOME/Desktop/Haskell/u03/3-1 /`中使用palindrome.txt,则需要在代码中使用绝对路径,或者在该目录中运行GHCi。

注意,您可以用:cd改变当前目录中GHCI,所以在GHCI下面的命令应该工作:

Prelude> :cd /path/to/your/directory 
Prelude> :l palindrom-a.hs 
*Main> :main 
+0

好吧,现在工作正常。不知道我可以使用:cd在ghci中。 – Mauritius

+1

@Mauritius:查看':?'或':help'获取所有命令的完整列表。 – Zeta