module Main (main) where import System.Environment (getArgs) import qualified System.IO.Streams as S import Data.Digest.Pure.SHA import System.IO.Streams.SHA main :: IO () main = do [filename] <- getArgs d1 <- S.withFileAsInput filename $ \is -> do (is1, getSha1) <- sha1Input is (is224, getSha224) <- sha224Input is1 (is256, getSha256) <- sha256Input is224 (is384, getSha384) <- sha384Input is256 (is512, getSha512) <- sha512Input is384 S.skipToEof is512 d1 <- getSha1 putStrLn $ showDigest d1 getSha224 >>= putStrLn . showDigest getSha256 >>= putStrLn . showDigest getSha384 >>= putStrLn . showDigest getSha512 >>= putStrLn . showDigest return d1 -- This must throw an UnmatchedSHAException (unless `filename` above is -- "System/IO/Streams/SHA.hs"). S.withFileAsInput "System/IO/Streams/SHA.hs" $ \is -> do (is1, _) <- sha1Input is is1' <- checkedSha1Input d1 is1 S.skipToEof is1'