Haskell ReadWriteMode дескриптор файла
Читая Learn You a Haskell, я обнаружил, что вы можете использовать ReadWriteMode в качестве третьего параметра для openFile
.
import System.IO
main = do
handle <- openFile "myfile" ReadWriteMode
contents <- hGetContents handle
putStrLn contents
hPutStr handle "Something"
hClose handle
Однако это вернуло ошибку:
*** Exception: myfile: hPutStr: illegal operation (handle is closed)
Итак, в чем же смысл ReadWriteMode? Я ищу любые случаи в реальном мире, где это было бы использовано.
1 ответ:
Здесь есть кое-что, что, кажется, работает.
import System.IO import qualified System.IO.Strict as SIO import GHC.IO.Handle slurp h = do h' <- hDuplicate h hSeek h' AbsoluteSeek 0 SIO.hGetContents h' main = do handle <- openFile "myfile" ReadWriteMode contents <- slurp handle putStrLn contents offset <- hTell handle putStrLn $ "handle position: " ++ show offset hPutStrLn handle "Something new" hClose handle
System.IO.Strict
это от самогоstrict
пакетEdit: возможно, вам даже не нужно использовать
SIO.hGetContents
- ПростоhGetContents
также, кажется, работает.