packages feed

binary-file-0.15.0: examples/readHex.hs

{-# LANGUAGE QuasiQuotes, TypeFamilies #-}

import File.Binary (binary, Field(..), readBinaryFile)
import File.Binary.Instances ()
import File.Binary.Instances.LittleEndian ()
import System.Environment (getArgs)
import Numeric (showHex)
import Data.List (intercalate)
import Control.Applicative ((<$>))

--------------------------------------------------------------------------------

main :: IO ()
main = do
	(h, "") <- fromBinary () <$> (readBinaryFile . head =<< getArgs)
	putStr $ unlines $ map (intercalate "-" . map unwords) $ groupN 2 $
		groupN 8 $ map (two . flip showHex "") $ hex h

two :: String -> String
two s = let l = length s in replicate (2 - l) '0' ++ s

groupN :: Int -> [a] -> [[a]]
groupN _ [] = []
groupN n xs = take n xs : groupN n (drop n xs)
	
[binary|

Hex deriving Show

(1, Nothing){[Int]}: hex

|]