packages feed

denominate-0.4.1: Main.hs

import System.Environment(getArgs, getProgName)
import System.Exit(exitFailure)
import Control.Monad(when)
import System.Denominate

usage = getProgName >>= \name ->
          return ("Usage: " ++ name ++ " base_directory") >>=
          putStrLn >> exitFailure

main = do
  getArgs >>= \args ->
    when (doUsageAndExit args) usage >>
      (fileToTypedFilePath . base) args >>=
         renameAll defaultFilenameConverter >>=
            mapM_ handle

-- Get base dir to recurse in and ensure there is no terminal '/'.
base [] = error "Main.base"
base (d:_) =
  case d == "/" of
    True    -> d
    False   -> if (head revD) /= '/' 
                  then d
                  else reverse $ tail revD
  where revD = reverse d

handle result =
  case result of
    (Failure (_, fName) msg) -> putStr msg >> putStr " [" >>
                                    putStr fName >> putStrLn "]"
    (Success  _         _  )  -> return ()

doUsageAndExit args = null args || arg0 == "-h" || arg0 == "--help"
  where arg0 = head args