Leitura e gravação em arquivo em Haskell

Estou tentando ler o conteúdo de um arquivo, transformar o texto em maiúsculas e, em seguida, escrevê-lo novamente.

Aqui está o código que eu havia escrito:

import System.IO
import Data.Char

main = do
    handle <- openFile "file.txt" ReadWriteMode
    contents <- hGetContents handle
    hClose handle
    writeFile "file.txt" (map toUpper contents)
    return ()

No entanto, isso não grava nada no arquivo; na verdade, ele até o limpa.

Eu fiz algumas mudanças:

main = do
    handle <- openFile "file.txt" ReadWriteMode
    contents <- hGetContents handle
    writeFile "file.txt" (map toUpper contents)
    hClose handle
    return ()

No entanto, recebo o erroresource busy (file is locked). Como posso fazer isso funcionar eporque não funcionou nos dois casos?

questionAnswers(4)

yourAnswerToTheQuestion