我想编写一个函数,可以在 Haskell 中以广度优先递归方式列出目录。如您所见,我需要一个可以将 a (a -> IO b) 转换为 IO (a->b) 的函数。看起来很简单,我做不到。我想知道该怎么做或是否有可能。
dirElem :: FilePath -> IO [FilePath]
dirElem dirPath = do
getDirectoryContents'' <- theConvert getDirectoryContents'
return $ takeWhile (not.null) $ iterate (concatMap getDirectoryContents'') [dirPath] where
getDirectoryContents' dirPath = do
isDir <- do doesDirectoryExist dirPath
if isDir then dirContent else return [] where
dirContent = do
contents <- getDirectoryContents dirPath
return.(map (dirElem</>)).tail.tail contents
theConvert :: (a -> IO b) -> IO (a -> b)
theConvert = ??????????