MyNixOS website logo
Description

read/write binary file.

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

|]
Metadata

Version

0.15.25

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows