simbolos opciones mundo listas imprimir hola hacer funciones como basico haskell io directory-traversal

opciones - listas en haskell



¿Hay algún andador de directorio en Haskell? (4)

Aquí hay una forma de enumerar todos los archivos de Haskell en un árbol de directorios, usando el árbol de directorios que no está en un directorio oculto (cuyo nombre comienza por ''.''):

import Data.Traversable (traverse) import System.Directory.Tree ( AnchoredDirTree(..), DirTree(..), filterDir, readDirectoryWith ) import System.FilePath (takeExtension) listFilesDirFiltered = do _:/tree <- readDirectoryWith return "C://devmy//code" traverse print $ filterDir myPred tree return () where myPred (Dir (''.'':_) _) = False myPred (File n _) = takeExtension n == ".hs" myPred _ = True main = listFilesDirFiltered

Funciona tanto en Windows como en Linux.

¿Hay algún andador de directorio recursivo en Haskell para poder escribir algo así como

listing <- walkDir "/tmp"

No me gustaría escribir el mío Puedo instalar alguna dependencia de cabal, pero quiero que sea multiplataforma (al menos Linux y Windows).



Tengo una definición recursiva para recorrer un directorio usando el paquete de ruta de archivo:

import Control.Monad import System.Directory import System.FilePath import System.Posix.Files -- | Traverse from ''top'' directory and return all the files by -- filtering out the ''exclude'' predicate. traverseDir :: FilePath -> (FilePath -> Bool) -> IO [FilePath] traverseDir top exclude = do ds <- getDirectoryContents top paths <- forM (filter (not.exclude) ds) $ /d -> do let path = top </> d s <- getFileStatus path if isDirectory s then traverseDir path exclude else return [path] return (concat paths)


El paquete filemanip proporciona funciones potentes y elegantes para eso. Por ejemplo, proporciona una función de fold que llamará recursivamente a su función en un árbol de directorios. Como ejemplo, lo usé aquí para enumerar recursivamente los archivos en un directorio comenzando desde el más antiguo