Description
read/write binary file.
Description
See example directory's sample code.
runghc -XQuasiQuotes -XTypeFamilies -XFlexibleInstances exam.hs some.bmp
exam.hs:
import File.Binary
import File.Binary.Instances
import File.Binary.Instances.LittleEndian
import System.Environment
import Data.ByteString.Lazy as BSL
main = do
[inf] <- getArgs
cnt <- BS.readFile inf
let Right (bmp, rest) = fromBinary () cnt :: (Bitmap, String)
print bmp
instance Field (Int, Int, Int) where
type FieldArgument (Int, Int, Int) = ()
fromBinary _ s = do
(b, rest) <- fromBinary 1 s
(g, rest') <- fromBinary 1 rest
(r, rest'') <- fromBinary 1 rest' in
return ((b, g, r), snd $ getBytes 1 1 rest'')
toBinary _ (b, g, r) = do
b' <- toBinary 1 b
g' <- toBinary 1 g
r' <- toBinary 1 r
return $ concatBinary [b', g', r', makeBinary $ BSL.singleton 0]
[binary|
Bitmap
deriving Show
2: "BM"
4: file_size
2: 0
2: 0
4: offset
4: 40
4: width
4: height
2: 1
2: bits_per_pixel
4: compression
4: image_size
4: resolutionH
4: resolutionV
4: color_num
4: important_color_num
replicate color_num ()[OPENBRACKET][(Int, Int, Int)][CLOSEBRACKET]: colors
replicate image_size ()[OPENBRACKET]String[CLOSEBRACKET]: image
|]