Command line option parsers
There are several packages that want to simplify the task of writing command line parsers. Unfortunately, they are distributed across several Hackage categories. Here is an attempt to list them.
Based on Hackage downloads, as of May 2017, cmdargs (126k downloads) and optparse-applicative (120k downloads) are the most popular. (Still true as of Oct 2021.)
Package | Multi-mode | Extensions | Maintenance | Popularity (hackage downloads 2021-10-23) | Remark |
---|---|---|---|---|---|
argparser | - | None (though it depends on package containers, which uses extensions) | GHC 9.0 build successful (2021-10-23) | 4k | |
cmdargs | X | TemplateHaskell, SYB generics, ViewPatterns, ... | GHC 9.0 build successful (2021-10-23) | 225k | unsafePerformIO
|
cmdlib | X | SYB generics | DEAD: latest (0.3.6) only for GHC <= 8.4; no repo (2021-10-23) | 10k | based on GetOpt |
cmdtheline | X | FlexibleInstances (although unnecessary) | DEAD: latest (0.2.3) only for GHC <= 7.8; no repo (2021-10-23) | 13k | shows help as man-page |
console-program | X | (none) | DYING: latest (0.4.2.3) only for GHC <= 8.8; no issue tracker (2021-10-23) | 15k | configure options via files |
getflag | - | Haskell98 | GHC 9.0 build successful (2021-10-23) | 1k | like GetOpt but with Unix/Plan 9 option syntax |
hflags | - | TemplateHaskell | GHC 9.0 build successful (2021-10-23) | 10k | inspired by Google's gflags, provides parsed options in top-level variables, allow to set options via environment variables |
multiarg | - | CPP | GHC 9.0 build successful (2021-10-23) | 17k | long options with multiple arguments |
options | X | GHC 9.0 build successful (2021-10-23) | 11k | ||
optparse-applicative | X | GADT | GHC 9.0 build successful (2021-10-23) | 254k | Applicative Functor; for wrong arguments it does not show a specific error message but the general usage pattern |
parseargs | - | FlexibleInstances (although unnecessary) | GHC 9.0 build successful (2021-10-23) | 18k | supports a fixed set of argument types: Int, Integer, Float, Double, String, FileOpener
|
ReadArgs | - | OverlappingInstances, TypeOperators | GHC 9.0 build successful (2021-10-23) | 20k | No options, only arguments. The argument template is derived from the requested argument tuple. |
simpleargs | - | OverlappingInstances (although unnecessary) | DEAD: latest (0.2.1) only for GHC <= 8.0; no repo (2021-10-23) | 2k | the same as ReadArgs |
uu-options | - | latest (0.2.0.0) only for GHC <= 8.10 (2021-10-23) | 3k | Uses the less popular data-lens. Error correction. |
The column for required Haskell extensions gives an idea of how easy it is to port the package to compilers other than GHC.