従来の方法で、ディレクトリを再帰的に調べています。これは実用的なプロトタイプです:
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
私がこれまで見てきたすべての解決策は、たとえ該当するとしても、想像を絶するほど醜いものです。それを管理する良い方法はありますか?