{-| napište spustitelný program, který pro každou složku předanou na příkazové řádce zjistí jeji obsah a informuje o něm uživatele: * pro složky vypište, kolik položek obsahují * pro soubory vypište jejich velikost a zda jsou spustitelné symbolické linky můžete považovat za soubory (tedy ignorovat) Několik poznámek: * pro čtení argumentů příkazové řádky použijte funkci getArgs ze System.Environment * Kompilovaný program začíná běh ve funkci main :: IO (). * Použijte funkce z modulů System.Directory, System.Environment a System.FilePath. -} import System.Environment import System.FilePath import System.Directory main :: IO () main = getArgs >>= mapM_ list list :: FilePath -> IO () list dir = listDirectory dir >>= mapM_ dispatch . map (dir ) dispatch :: FilePath -> IO () dispatch p = doesDirectoryExist p >>= \d -> if d then putDir p else putFile p putDir :: FilePath -> IO () putDir d = do n <- length <$> listDirectory d put d ("dir: " ++ show n ++ " entries") putFile :: FilePath -> IO () putFile f = do sz <- getFileSize f put f ("size: " ++ show sz) put :: FilePath -> String -> IO () put f ext = putStrLn (f ++ " " ++ ext)