
Hello all, Punchline first: What's the "best practice" way of doing unix-style command line argument and file input processing in Haskell? Background: I'm using Haskell to write programs that act like well-behaved, pipe-friendly unix tools. i.e., the following are all equivalent: % ./prog file % ./prog < file % cat file | ./prog Thus far, I've done this by directly inspecting the first element of System.Environment.getArgs, which has been fine thus far. I'd also like to be able to take simple command line arguments (boolean flags and numeric parameters) and the above doesn't adapt well to that case. I'd like to do this in the idiomatic, "standard" way (a la getopt() in C). Browsing through the wiki page on command line argument parsers [1] gave me a bewildering array of options. I'm not really sure where to start, though I remember reading a blanket endorsement of optparse-applicative somewhere. Any pointers or examples that address my use-case would be much appreciated. -vale [1]: https://wiki.haskell.org/Command_line_option_parsers