{-# LANGUAGE UnicodeSyntax #-} module Main where import Codec.Audio.WavPack.Block import Codec.Audio.WavPack.Metadata import qualified Data.ByteString.Lazy as L import Data.Maybe import Prelude.Unicode import System.Environment import System.IO main ∷ IO () main = do [wvFile] ← getArgs wvData ← L.readFile wvFile hSetBuffering stdout NoBuffering mapM_ printBlock $ readBlocks wvData putStrLn "* End of WavPack blocks" printBlock ∷ Block → IO () printBlock b = do putStrLn "* WavPack Block" putStrLn "- Block header:" print $ blockHeader b putStrLn "- Block metadata sub-blocks:" mapM_ printSub $ blockMetadata b where printSub ∷ SubBlock → IO () printSub sub | isJust (fromSubBlock sub ∷ Maybe WVBitstream) = putStrLn ( "(WV Bitstream omitted: " ⧺ show (metaSize sub) ⧺ " bytes)" ) | otherwise = print sub {- % du -sh 01.wv 15716 When compiled with -O0: % time ./dist/build/hs-wvinfo/hs-wvinfo 01.wv > /dev/null 1.49s user 2.12s system 98% cpu 3.664 total When compiled with -O2: % time ./dist/build/hs-wvinfo/hs-wvinfo 01.wv > /dev/null 1.35s user 2.09s system 97% cpu 3.520 total Hmm... quite disappointing... The stringification is the bottleneck? If so, I can live with that. -}