2016-04-18 4 views
0

私は実行時例外をスローし、以下のプログラムがあります。それはチェックを入力し、私はmainを実行しようとするたびに、私はエラーを取得しますHaskellでopenFileのパスを取得するには?

import System.IO 

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

を:

Atom session on Mac OS X

何午前私は間違っている?

+0

もう少し情報。 'file.txt'はどこにありますか? – Zeta

+0

お返事ありがとうございます。私はシェルを実行し、そこに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を実行する必要があります。 GHCiの中に次のコマンドが動作するはずですので、あなたは、:cdとGHCiの中でカレントディレクトリを変更することができます

注:

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

大丈夫です。今は問題ありません。 did notは私が使うことができることを知っている:ghciのcd。 – Mauritius

+1

@モーリシャス:すべてのコマンドの完全なリストについては ':?'か ':help'をチェックしてください。 – Zeta

関連する問題