1.7 KiB
Haskell optparse-applicative
This note covers 33-haskell-optparse-cli/, which parses a small deployment CLI with optparse-applicative.
1. Why This Is Different from the Parser-Combinator Example
12-haskell-parser-combinators/ builds a parser for a custom command language.
This example solves a different problem: parsing a conventional CLI with:
- subcommands,
- long options,
- repeated options, and
- typed option readers.
That is a common real-world Haskell task, and optparse-applicative is the standard tool for it.
2. What the Pure Parser Gives You
The example exposes:
runCliParser :: [String] -> Either String Command
Internally it uses execParserPure, which keeps the parsing logic testable without invoking IO or shelling out.
That is the main teaching point here: command-line parsing can still be structured as a pure transformation from argument vectors to typed commands.
3. What Makes the Example Non-Trivial
The parser handles two shapes of command:
validate, which parses typed environment, replica, and track options, andpromote, which parses repeated--ownerflags plus a--dry-runswitch.
That is enough surface area to show why a dedicated CLI parser library is useful.
4. Commands to Try
cd 33-haskell-optparse-cli
nix develop
cabal run
cabal run -- validate --service api --env production --replicas 3 --track stable
cabal run -- promote --service api --from-tag blue --to-tag green --owner platform --owner security --dry-run
cabal test
nix build
./result/bin/mini-cli validate --service api --env production --replicas 3 --track stable
nix run . -- validate --service api --env production --replicas 3 --track stable
nix flake check