binary-file

read/write binary file

https://skami.iocikun.jp/haskell/packages/binary-file

Latest on Hackage:0.15.25

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD-3-Clause licensed and maintained by Yoshikuni Jujo

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

 |]