Leer y escribir para archivar en Haskell

Estoy tratando de leer el contenido de un archivo, convertir el texto en mayúsculas y luego escribirlo de nuevo.

Aquí está el código que había 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 ()

Sin embargo, esto no escribe nada en el archivo, de hecho, incluso lo borra.

Hice algunos cambios:

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

Sin embargo, me sale el errorresource busy (file is locked). ¿Cómo puedo hacer que esto funcione ypor qué no funcionó en ambos casos?

Respuestas a la pregunta(4)

Su respuesta a la pregunta