2016-12-31 61 views
1

我只是想知道是否可以使用System.Directory包中的任何特定方法或其他方法來獲取給定指定路徑的所有嵌套目錄的列表。我還沒有找到任何適當的功能,所以我想出了這樣的事情:Haskell中的嵌套目錄列表

getDirList :: FilePath -> IO [FilePath] 
getDirList dir = do 
    contents <- getDirectoryContents dir 
    all <- mapM (return . (dir </>)) $ filter (\f -> f /= "." && f /= "..") contents 
    dirs <- filterM doesDirectoryExist all 
    dirs' <- mapM getDirList dirs 
    return (dir : concat dirs') 

可能是我一直想念一些真正簡單的東西?有人可以建議嗎?謝謝。

+0

[也許從昨天有關(http://stackoverflow.com/questions/41404647/how-to-implement-search-in-file-system -in-Haskell中)。 – Alec

+1

不是答案,但請注意,您可以使用'listDirectory'來代替'getDirectoryContents'來自動過濾'.'和'..'特殊目錄。 –

+0

是的,我注意到listDirectory。其實我監督了這個功能的過濾。 :) 新年快樂。 – BarbedWire

回答

1

如果它是確定使用filemanip包:

import System.FilePath.Find 

getDirList dir = find always (fileType ==? Directory) dir