Search code examples
macoshaskellpathfunctional-programmingprogram-entry-point

How to get the path for openFile in Haskell?


I have the following program which throws a runtime exception:

import System.IO

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

It type checks, but whenever I try to run main, I'll get an error:

Atom session on Mac OS X

What am I doing wrong?


Solution

  • Your current program uses a relative path. As such, the file must be in the same directory where you started GHCi. Given that your workspace is $HOME/Desktop/Haskell, it probably checks only for $HOME/Desktop/Haskell/palindrome.txt. If you want to use the palindrome.txt in $HOME/Desktop/Haskell/u03/3-1/`, you need to either use the absolute path in your code, or run GHCi in that directory.

    Note that you can change the current directory in GHCi with :cd, so the following commands in GHCi should work:

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