packages feed

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