Я очень новичок в Haskell. Фактически, я работаю над в этом разделе этого урока. Я наткнулся на этот фрагмент кода:
import System.IO
import Data.Char
main = do
contents <- readFile "girlfriend.txt"
writeFile "girlfriendcaps.txt" (map toUpper contents)
Что читает содержимое файла под названием "girlfriend.txt" и записывает версию файла с верхним обложением в новый файл под названием "girlfriendcaps.txt".
Итак, я хотел немного изменить код, чтобы принять имя файла. Я изменил код на это:
import System.IO
import Data.Char
main = do
path <- getLine
contents <- readFile path
writeFile path (map toUpper contents)
теперь, очевидно, основное различие здесь в том, что я читаю и записываю в тот же файл. Поскольку я сейчас думаю об этом, это должно быть ленивая оценка, но я получаю сообщение об ошибке "resource busy". Исправьте меня, если я ошибаюсь, но я думаю, что readFile не начинает читать файл, пока writeFile не попросит его содержимое. А затем writeFile пытается записать в файл, но он все равно должен открыть файл, потому что он также запрашивает содержимое. Я рядом?
Итак, реальный вопрос: как мне читать и писать в тот же файл в Haskell? Имеет смысл, что это сложнее, потому что вы будете писать в другой файл из файла, который вы читаете чаще всего, но для моего собственного назидания, как бы вы читали и записывали в тот же файл?