MyNixOS website logo
Description

File path glob-like matching.

A library for matching files using patterns such as "src/**/*.png" for all .png files recursively under the src directory. Features:

  • All matching is O(n). Most functions precompute some information given only one argument.

  • See System.FilePattern and ?== simple matching and semantics.

  • Use match and substitute to extract suitable strings from the * and ** matches, and substitute them back into other patterns.

  • Use step and matchMany to perform bulk matching of many patterns against many paths simultaneously.

  • Use System.FilePattern.Directory to perform optimised directory traverals using patterns.

Originally taken from the Shake library.

FilePattern Hackage version Stackage version Build status

A library for matching files using patterns such as src/**/*.png for all .png files recursively under the src directory. There are two special forms:

  • * matches part of a path component, excluding any separators.
  • ** as a path component matches an arbitrary number of path components.

Some examples:

  • test.c matches test.c and nothing else.
  • *.c matches all .c files in the current directory, so file.c matches, but file.h and dir/file.c don't.
  • **/*.c matches all .c files anywhere on the filesystem, so file.c, dir/file.c, dir1/dir2/file.c and /path/to/file.c all match, but file.h and dir/file.h don't.
  • dir/*/* matches all files one level below dir, so dir/one/file.c and dir/two/file.h match, but file.c, one/dir/file.c, dir/file.h and dir/one/two/file.c don't.

More complete semantics are given in the documentation for the matching function ?==.

Features

  • All matching is O(n). Most functions precompute some information given only one argument. There are also functions to provide bulk matching of many patterns against many paths simultaneously, see step and matchMany.
  • You can obtain the parts that matched the * and ** special forms using match, and substitute them into other patterns using substitute.
  • You can search for files using a minimal number of IO operations, using the System.FilePattern.Directory module.

Related work

  • Another Haskell file pattern matching library is Glob, which aims to be closer to the POSIX glob() function, with forms such as *, ?, **/ (somewhat different to the filepattern equivalent) and [:alpha:]. A complete guide is in the documentation. Compared to filepattern, the Glob library is closer to a regular expression library - definitely more powerful, potentially harder to use.
  • The shake library has contained a FilePattern type since the beginning. This library evolved from that code, with significant improvements.
  • The semantics are heavily inspired by VS Code, Git and the NPM package Glob.
Metadata

Version

0.1.3

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows