Personal tools

Command line option parsers

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(details on yaop, simpleargs, ReadArgs)
m (options nolonger uses template haskell since 1.0)
 
(6 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
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:
 
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:
   
{| class="wikitable"
+
{| class="wikitable" border="1" style="border-collapse:collapse"
 
|-
 
|-
 
! Package !! Multi-mode !! Extensions !! Remark
 
! Package !! Multi-mode !! Extensions !! Remark
  +
|-
  +
| {{HackagePackage|id=argparser}} || - || None (though it depends on package containers, which uses extensions) ||
 
|-
 
|-
 
| {{HackagePackage|id=cmdargs}} || X || TemplateHaskell, SYB generics, ViewPatterns, ... || <hask>unsafePerformIO</hask>
 
| {{HackagePackage|id=cmdargs}} || X || TemplateHaskell, SYB generics, ViewPatterns, ... || <hask>unsafePerformIO</hask>
Line 11: Line 13:
 
| {{HackagePackage|id=cmdtheline}} || X || FlexibleInstances (although unnecessary) || shows help as man-page
 
| {{HackagePackage|id=cmdtheline}} || X || FlexibleInstances (although unnecessary) || shows help as man-page
 
|-
 
|-
| {{HackagePackage|id=console-program}} || X || TemplateHaskell || configure options via files
+
| {{HackagePackage|id=console-program}} || X || (none) || configure options via files
 
|-
 
|-
 
| {{HackagePackage|id=getflag}} || - || Haskell98 || like [[GetOpt]] but with Unix/Plan 9 option syntax
 
| {{HackagePackage|id=getflag}} || - || Haskell98 || like [[GetOpt]] but with Unix/Plan 9 option syntax
Line 19: Line 21:
 
| {{HackagePackage|id=multiarg}} || - || CPP || long options with multiple arguments
 
| {{HackagePackage|id=multiarg}} || - || CPP || long options with multiple arguments
 
|-
 
|-
| {{HackagePackage|id=options}} || X || TemplateHaskell ||
+
| {{HackagePackage|id=options}} || X || ||
 
|-
 
|-
| {{HackagePackage|id=optparse-applicative}} || X || GADT || Applicative Functor
+
| {{HackagePackage|id=optparse-applicative}} || X || GADT || Applicative Functor; for wrong arguments it does not show a specific error message but the general usage pattern
 
|-
 
|-
 
| {{HackagePackage|id=parseargs}} || - || FlexibleInstances (although unnecessary) || supports a fixed set of argument types: <hask>Int, Integer, Float, Double, String, FileOpener</hask>
 
| {{HackagePackage|id=parseargs}} || - || FlexibleInstances (although unnecessary) || supports a fixed set of argument types: <hask>Int, Integer, Float, Double, String, FileOpener</hask>
Line 28: Line 30:
 
|-
 
|-
 
| {{HackagePackage|id=simpleargs}} || - || OverlappingInstances (although unnecessary) || the same as ReadArgs
 
| {{HackagePackage|id=simpleargs}} || - || OverlappingInstances (although unnecessary) || the same as ReadArgs
  +
|-
  +
| {{HackagePackage|id=uu-options}} || - || || Uses the less popular data-lens. Error correction.
 
|-
 
|-
 
| {{HackagePackage|id=yaop}} || - || TemplateHaskell, GeneralizedNewtypeDeriving || wrapper around GetOpt
 
| {{HackagePackage|id=yaop}} || - || TemplateHaskell, GeneralizedNewtypeDeriving || wrapper around GetOpt

Latest revision as of 08:27, 18 July 2014

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:

Package Multi-mode Extensions Remark
argparser - None (though it depends on package containers, which uses extensions)
cmdargs X TemplateHaskell, SYB generics, ViewPatterns, ...
unsafePerformIO
cmdlib X SYB generics based on GetOpt
cmdtheline X FlexibleInstances (although unnecessary) shows help as man-page
console-program X (none) configure options via files
getflag - Haskell98 like GetOpt but with Unix/Plan 9 option syntax
hflags - TemplateHaskell inspired by Google's gflags, provides parsed options in top-level variables, allow to set options via environment variables
multiarg - CPP long options with multiple arguments
options X
optparse-applicative X GADT Applicative Functor; for wrong arguments it does not show a specific error message but the general usage pattern
parseargs - FlexibleInstances (although unnecessary) supports a fixed set of argument types:
Int, Integer, Float, Double, String, FileOpener
ReadArgs - OverlappingInstances, TypeOperators No options, only arguments. The argument template is derived from the requested argument tuple.
simpleargs - OverlappingInstances (although unnecessary) the same as ReadArgs
uu-options - Uses the less popular data-lens. Error correction.
yaop - TemplateHaskell, GeneralizedNewtypeDeriving wrapper around GetOpt

The column for required Haskell extensions gives an idea of how easy it is to port the package to compilers other than GHC.