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