IO.hs revision d5a8d891500a642ce629854857fc00b7c21aec47
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder{-# LANGUAGE CPP #-}
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederModule : $Header$
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederDescription : wrapper module for changed IO handling since ghc-6.12.1
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederCopyright : (c) Christian Maeder DFKI GmbH 2010
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederMaintainer : Christian.Maeder@dfki.de
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederStability : provisional
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederPortability : portable
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederreading and writing files changed between ghc-6.10.4 and ghc-6.12.1 from
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederlatin1 to utf8.
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederThis module allows to continue reading and writing latin1 (HetCASL) files.
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederHowever, this module does not support to write utf8 files with ghc-6.10.4 or
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederearlier versions.
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederThe encoding only effects the contents. The encoding of file names is always
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder , readEncFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder , writeEncFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maederdata Enc = Latin1 | Utf8
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile :: Enc -> String -> IO String
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile :: Enc -> String -> String -> IO ()
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder#if __GLASGOW_HASKELL__ < 612
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile _ = readFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile _ = writeFile
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederreadEncFile c f = case c of
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder Utf8 -> readFile f
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hdl <- openFile f ReadMode
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hSetEncoding hdl latin1
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hGetContents hdl
d5a8d891500a642ce629854857fc00b7c21aec47Christian MaederwriteEncFile c f txt = case c of
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder Utf8 -> writeFile f txt
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder Latin1 -> withFile f WriteMode $ \ hdl -> do
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hSetEncoding hdl latin1
d5a8d891500a642ce629854857fc00b7c21aec47Christian Maeder hPutStr hdl txt