packages feed

cantor-0.1: src/Utils/Folder.hs

{- |
Module : Utils.Folder
Copyright : Copyright (C) 2014 Krzysztof Langner
License : BSD3

Helper module with functions operating on IO
-}
module Utils.Folder
        ( listFiles
        , listDirs
        )where

import System.Directory (canonicalizePath, getDirectoryContents, doesDirectoryExist)
import Data.List
import Control.Monad


-- | list files
listFiles :: FilePath -> IO [FilePath]            
listFiles p = do 
    contents <- list p
    filterM (fmap not . doesDirectoryExist) contents

    
-- | list subdirectories
listDirs :: FilePath -> IO [FilePath]            
listDirs p = do
    contents <- list p
    filterM doesDirectoryExist contents
    
-- | list directory content
list :: FilePath -> IO [FilePath]            
list p = do 
    ds <- getDirectoryContents p
    let filtered = filter f ds
    path <- canonicalizePath p  
    return $ map ((path++"/")++) filtered
    where f x = (x /= ".") && (x /= "..") && (not . isPrefixOf ".") x