-showWvInfo ∷ L.ByteString → IO ()
-showWvInfo stream
- = case findNextBlock stream of
- (# S.Just block, _ #)
- → print block
- (# S.Nothing , _ #)
- → fail "Can't find any WavPack block headers."
+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.
+-}