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 = ??????????