【发布时间】:2018-05-25 02:26:23
【问题描述】:
这是一个新手问题。假设我想将文件和目录列表分离为文件列表和目录列表:
getFilesAndDirs :: [FilePath] -> ([FilePath], [FilePath])
getFilesAndDirs paths =
let ...
in (dirs, files)
可能这是一个无可救药的重复,我只是错过了正确的关键字。 这样做(和调用)这个的正确方法是什么?
文件和目录随机出现。
【问题讨论】:
-
Data.List中有一个名为partition的函数,看起来就像您要求的那样。 -
@MarkSeemann:我认为这里的一个问题是谓词是一元的(
FilePath -> IO Bool) -
n.m.是的:没有办法知道路径是指文件还是目录,除非实际访问该路径,这是一个
IO操作。也就是说,除非您对启发式方法(例如是否存在标准文件扩展名)感到满意,但这通常不会很可靠。 -
partitionM :: Monad m => (a -> m Bool) -> [a] -> m ([a], [a])fromextra's Control.Monad.Extra似乎是票。
标签: list file haskell partition io-monad