midi-0.2.2.5: src/Sound/MIDI/IO.hs
{- |
Taken from Haskore.
-}
module Sound.MIDI.IO
(openBinaryFile, readBinaryFile, writeBinaryFile,
ByteList, listCharFromByte, listByteFromChar)
where
import System.IO
import Control.Exception(bracket)
import Control.Monad(liftM)
import Data.Char (ord, chr)
import Data.Word (Word8)
type ByteList = [Word8]
{- |
FixMe:
Hugs makes trouble here because it performs UTF-8 conversions.
E.g. @[255]@ is output as @[195,191]@
It would be easy to replace these routines by FastPackedString(fps).ByteList.Lazy,
however this introduces a new package dependency.
-}
writeBinaryFile :: FilePath -> ByteList -> IO ()
writeBinaryFile path str =
bracket (openBinaryFile path WriteMode) hClose
(flip hPutStr (listCharFromByte str))
listCharFromByte :: ByteList -> String
listCharFromByte = map (chr . fromIntegral)
readBinaryFile :: FilePath -> IO ByteList
readBinaryFile path =
liftM listByteFromChar .
hGetContents =<< openBinaryFile path ReadMode
listByteFromChar :: String -> ByteList
listByteFromChar = map (fromIntegral . ord)