我以传统方式递归地遍历目录。这是一个工作原型:
traverseFlatDst :: FilePath -> Int -> Int -> FilePath -> IO ()
traverseFlatDst dstRoot total totw srcDir = do
(dirs, files) <- listDir srcDir
mapM_ (\file -> putStrLn (printf "%s" (strp file))) files -- tracing
let traverse = traverseFlatDst dstRoot total totw
mapM_ traverse dirs
我有一个不那么不寻常的要求:每个跟踪行都应该编号(它不是真正用于跟踪)。像这样:
traverseFlatDst :: FilePath -> Int -> Int -> FilePath -> IO ()
traverseFlatDst dstRoot total totw srcDir = do
(dirs, files) <- listDir srcDir
mapM_ (\file -> putStrLn (printf "%d: %s" counterFromNowhere (strp file))) files
let traverse = traverseFlatDst dstRoot total totw
mapM_ traverse dirs
到目前为止,我看到的所有解决方案都丑陋得超出想象,如果适用的话。有没有很好的管理方法?