Platform-agnostic library for filesystem operations

Latest on Hackage:

See all snapshots directory appears in

BSD-3-Clause licensed
Maintained by [email protected]

Module documentation for

This version can be pinned in stack with:[email protected]:bb914513b6abfc86bd94a34959ec74be8f232b85287f39b812eefeb055dcfff1,2688


Hackage Build status Windows build status

Documentation can be found on Hackage.

Building from Git repository

When building this package directly from the Git repository, one must run autoreconf -fi to generate the configure script needed by cabal configure. This requires Autoconf to be installed.

autoreconf -fi
cabal install

There is no need to run the configure script manually however, as cabal configure does that automatically.


Changelog for the directory package (April 2015)

  • Fix typo in file time functions when utimensat is not available and version of unix package is lower than (April 2015)

  • Bundled with GHC 8.0.1

  • Fix mistake in file time functions when utimensat is not available (#47) (April 2015)

  • Make findExecutable, findExecutables, findExecutablesInDirectories, findFile, and findFilesWith lazier (#43)

  • Add findFileWith

  • Add copyFileWithAttrs, which copies additional metadata (#40)

  • Improve error message of removeDirectoryRecursive when used on a directory symbolic link on Windows.

  • Add isSymbolicLink

  • Drop support for Hugs. (February 2015)

  • Improve error message of getCurrentDirectory when the current working directory no longer exists (#39)

  • Fix the behavior of trailing path separators in canonicalizePath as well as makeAbsolute when applied to the current directory; they should now match the behavior of canonicalizePath prior to (when the bug was introduced) (#42)

  • Set the location in IO errors from makeAbsolute. (December 2015)

  • Add listDirectory, which is similar to getDirectoryContents but omits . and .. (#36)

  • Remove support for --with-cc= in configure; use the CC= flag instead (ghc:D1608) (September 2015)

  • Work around lack of #const_str when cross-compiling (haskell-cafe)

  • Add findExecutablesInDirectories (#33)

  • Add exeExtension (August 2015)

  • Restore support for Safe Haskell with base < 4.8 (#30) (July 2015)

  • Add support for XDG Base Directory Specification (#6)

  • Implement setModificationTime counterpart to getModificationTime (#13)

  • Implement getAccessTime and setAccessTime

  • Set the filename in IO errors from the file time functions

  • Fix canonicalizePath so that it always returns a reasonable result even if the path is inaccessible and will not throw exceptions unless the current directory cannot be obtained (#23)

  • Corrected the trailing slash behavior of makeAbsolute so that makeAbsolute "" == makeAbsolute "."

  • Deprecate use of HsDirectory.h and HsDirectoryConfig.h

  • Implement withCurrentDirectory (Apr 2015)

  • Fix dependency problem on NixOS when building with tests (#24) (Mar 2015)

  • Bundled with GHC 7.10.1

  • Make getModificationTime support sub-second resolution on Windows

  • Fix silent failure in createDirectoryIfMissing

  • Replace throw by better defined throwIOs

  • Avoid stack overflow in getDirectoryContents (#17)

  • Expose findExecutables (#14)

  • removeDirectoryRecursive no longer follows symlinks under any circumstances (#15)

  • Allow trailing path separators in getPermissions on Windows (#9)

  • renameFile now always throws the correct error type (InappropriateType) when the destination is a directory, as long as the filesystem is not being modified concurrently (#8)

  • Add makeAbsolute, which should be preferred over canonicalizePath unless one requires symbolic links to be resolved (Mar 2014)

  • Bundled with GHC 7.8.1

  • Add support for sub-second precision in getModificationTime when linked against unix>=

  • Fix createDirectoryIfMissing _ "." in C:\ on Windows

  • Remove support for NHC98 compiler

  • Update package to cabal-version >= 1.10 format

  • Enhance Haddock documentation for doesDirectoryExist and canonicalizePath

  • Fix findExecutable to check that file permissions indicate executable

  • New convenience functions findFiles and findFilesWith