src/Tools/Haskell/File.hs
author wenzelm
Mon, 12 Nov 2018 15:14:12 +0100
changeset 69289 bf6937af7fe8
parent 69280 e1d01b351724
permissions -rw-r--r--
clarified signature;
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
69280
e1d01b351724 more formal references;
wenzelm
parents: 69278
diff changeset
     7
File-system operations.
e1d01b351724 more formal references;
wenzelm
parents: 69278
diff changeset
     8
e1d01b351724 more formal references;
wenzelm
parents: 69278
diff changeset
     9
See also "$ISABELLE_HOME/src/Pure/General/file.ML".
69278
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    10
-}
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    11
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    12
module Isabelle.File (setup, read, write, append) where
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    13
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    14
import Prelude hiding (read)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    15
import System.IO (IO)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    16
import qualified System.IO as IO
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    17
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    18
setup :: IO.Handle -> IO ()
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    19
setup h = do
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    20
  IO.hSetEncoding h IO.utf8
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    21
  IO.hSetNewlineMode h IO.noNewlineTranslation
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    22
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    23
read :: IO.FilePath -> IO String
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    24
read path =
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    25
  IO.withFile path IO.ReadMode (\h ->
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    26
    do setup h; IO.hGetContents h >>= \s -> length s `seq` return s)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    27
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    28
write :: IO.FilePath -> String -> IO ()
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    29
write path s =
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    30
  IO.withFile path IO.WriteMode (\h -> do setup h; IO.hPutStr h s)
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    31
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    32
append :: IO.FilePath -> String -> IO ()
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    33
append path s =
30f6e8d2cd96 more Haskell operations;
wenzelm
parents:
diff changeset
    34
  IO.withFile path IO.AppendMode (\h -> do setup h; IO.hPutStr h s)