src/Tools/Haskell/File.hs
author wenzelm
Sat, 10 Nov 2018 16:32:00 +0100
changeset 69278 30f6e8d2cd96
child 69280 e1d01b351724
permissions -rw-r--r--
more Haskell operations;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69278
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     1
{- generated by Isabelle -}
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     2
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     3
{-  Title:      Tools/Haskell/File.hs
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     4
    Author:     Makarius
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     5
    LICENSE:    BSD 3-clause (Isabelle)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     6
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     7
File-system operations
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     8
-}
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
     9
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    10
module Isabelle.File (setup, read, write, append) where
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    11
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    12
import Prelude hiding (read)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    13
import System.IO (IO)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    14
import qualified System.IO as IO
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    15
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    16
setup :: IO.Handle -> IO ()
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    17
setup h = do
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    18
  IO.hSetEncoding h IO.utf8
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    19
  IO.hSetNewlineMode h IO.noNewlineTranslation
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    20
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    21
read :: IO.FilePath -> IO String
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    22
read path =
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    23
  IO.withFile path IO.ReadMode (\h ->
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    24
    do setup h; IO.hGetContents h >>= \s -> length s `seq` return s)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    25
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    26
write :: IO.FilePath -> String -> IO ()
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    27
write path s =
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    28
  IO.withFile path IO.WriteMode (\h -> do setup h; IO.hPutStr h s)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    29
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    30
append :: IO.FilePath -> String -> IO ()
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    31
append path s =
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    32
  IO.withFile path IO.AppendMode (\h -> do setup h; IO.hPutStr h s)