Я новичок в 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)
сейчас, очевидно, основная разница здесь в том, что я читаю и пишу в один и тот же файл. Сейчас я думаю об этом, это должно быть ленивая оценка, но я получаю сообщение об ошибке «ресурс занят». Поправьте меня, если я ошибаюсь, но я предполагаю, что readFile не начинает читать файл, пока writeFile не запросит его содержимое. Затем writeFile пытается записать в файл, но он все еще должен иметь файл открытым, потому что он также запрашивает содержимое. Я там близко?
Итак, реальный вопрос: как мне читать и писать в один и тот же файл в Haskell? Логично, что это сложнее, потому что вы будете писать в файл, отличный от файла, из которого читаете чаще всего, но для моего собственного назидания, как бы вы читали и записывали в один и тот же файл?