nptools-0.1: show-pollbox.hs
#!/usr/bin/env runhaskell
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Data.Digest.Pure.SHA (sha1)
import qualified Data.ByteString.Lazy.Char8 as L
import Data.List
import Data.Monoid
import System.FilePath.Glob (namesMatching)
import System.FilePath ( (</>) )
import System.Environment
(<>) :: Monoid m => m -> m -> m
(<>) = mappend
nest :: Int -> L.ByteString -> L.ByteString
nest n = L.unlines . map (L.replicate (fromIntegral n) ' ' <>) . L.lines
onFiles :: [L.ByteString] -> L.ByteString
onFiles [] = "Missing file!"
onFiles [x] = x
onFiles xs = "Too many files!\n\n" <> L.intercalate "\n---\n\n" (map (nest 2) xs)
onDir :: FilePath -> IO ()
onDir dir = L.putStrLn . (("\n" <> L.pack dir <> ":\n") <>) . nest 2 <$>
onFiles =<< mapM L.readFile =<< namesMatching (dir </> "*")
main :: IO ()
main = do [arg] <- getArgs
dirs <- sort <$> namesMatching (arg </> "*/")
print . sha1 . L.pack . show $ dirs
mapM_ onDir dirs