module CabalGild.Unstable.Class.MonadWalk where

import qualified System.FilePattern as FilePattern
import qualified System.FilePattern.Directory as FilePattern

-- | A 'Monad' that can also "walk" a directory to discover files within it.
class (Monad m) => MonadWalk m where
  -- | This has the same signature and semantics as
  -- 'FilePattern.getDirectoryFilesIgnore'. The first argument is the directory
  -- to walk. The second argument is a list of patterns to include. The third
  -- argument is a list of patterns to exclude.
  walk :: FilePath -> [FilePattern.FilePattern] -> [FilePattern.FilePattern] -> m [FilePath]

-- | Uses 'FilePattern.getDirectoryFilesIgnore'.
instance MonadWalk IO where
  walk :: FilePath -> [FilePath] -> [FilePath] -> IO [FilePath]
walk = FilePath -> [FilePath] -> [FilePath] -> IO [FilePath]
FilePattern.getDirectoryFilesIgnore