Все, что вам нужно сделать, чтобы написать функцию, которая возвращает все файлы в текущем каталоге, это:
import System.Directory
filesInCurDir = getCurrentDirectory >>= getDirectoryContents
Оператор >> = - это оператор последовательности монад с передачей значения. Это лучше всего описано здесь http://www.haskell.org/tutorial/monads.html.
Если вы собираетесь использовать это внутри ghci:
let filesInCurDir = getCurrentDirectory >>= getDirectoryContents
вы можете проверить, что функция имеет тип filesInCurDir :: IO [FilePath]
, сохраняя тем самым "монадную природу".
Таким образом, если вы хотите дополнительно отфильтровать файлы, вы можете сделать:
let filteredFilesInCurDir =
getCurrentDirectory >>=
getDirectoryContents >>=
\files -> return [ x | x <- files, (length x) > 10 ]
Если вы хотите каждый раз проходить фильтр:
let filterFilesInCurDir f =
getCurrentDirectory >>=
getDirectoryContents >>=
\files -> return [ x | x <- files, f x ]
, что совпадает с:
let filteredFilesInCurDir f =
getCurrentDirectory >>=
getDirectoryContents >>=
return . filter f
и вы можете использовать его как:
filterFilesInCurDir (\x -> (length x) > 2)