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