Question:

As I work my way through Learn You as Haskell, I have been writing small File IO programs.
Unlike the example in that book, where the author reads from one file, writes altered data to a temp file and then deletes the original file and renames the temp file, I have been trying to read from a given file, alter the data and then overwrite the same file with the new data. Is this possible?

In a main  do block I have tried:

contents <- readFile fileName

-- do stuff to contents--

writeFile fileName result

After using appendFile to add items to the file, when I call the function to read and write I get this error:
openFile: resource busy, (file is locked)

I have also tried using the file handles like so:

    handle <- openFile fileName ReadWriteMode
    contents <- hGetContents handle
 -- do stuff to contents --

    hPutStr handle  results
   hClose handle

I have also tried opening with one handle to read, closing it, then using another handle for writing,
but the error message is that the handle to the file is closed.

I am thinking that the the author of LYAH maybe has good reasons to use a temp file, or is there another way that is not too difficult to grasp??

Many thanks,

Geoffrey