{- | 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] {- | 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)