simple-cmd-args: Simple command args parsing and execution

[ bsd3, library, system ] [ Propose Tags ] [ Report a vulnerability ]

This is a small wrapper over optparse-applicative which allows combining args parsers directly with IO commands. For subcommands this can avoid type boilerplate. It also provides some compact aliases for options with their Mod's.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0, 0.1.0.1, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7, 0.1.8
Change log CHANGELOG.md
Dependencies base (>=4 && <5), optparse-applicative (>=0.14.1), semigroups [details]
Tested with ghc ==7.10.3, ghc ==8.0.2, ghc ==8.2.2, ghc ==8.4.4, ghc ==8.6.5, ghc ==8.8.4, ghc ==8.10.7, ghc ==9.0.2, ghc ==9.2.4
License BSD-3-Clause
Copyright 2019-2022 Jens Petersen
Author Jens Petersen
Maintainer juhpetersen@gmail.com
Category System
Home page https://github.com/juhp/simple-cmd-args
Bug tracker https://github.com/juhp/simple-cmd-args/issues
Source repo head: git clone https://github.com/juhp/simple-cmd-args.git
Uploaded by JensPetersen at 2022-08-03T16:06:25Z
Distributions Fedora:0.1.8, LTSHaskell:0.1.8, NixOS:0.1.8, Stackage:0.1.8
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 5230 total (63 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-08-03 [all 1 reports]

Readme for simple-cmd-args-0.1.8

[back to package description]

simple-cmd-args

Hackage BSD license Stackage Lts Stackage Nightly

A thin layer over optparse-applicative that avoids type plumbing for subcommands by using Parser (IO ()).

Various wrapper functions are also provided for common option/arg idioms.

See the library's documentation for details of all the functions provided.

Usage

$ cat readme.hs
import SimpleCmdArgs
import Control.Applicative (some)
import System.Directory

main =
  simpleCmdArgs Nothing "readme example" "Longer description..." $
  subcommands
    [ Subcommand "echo" "Print words" $
      putStrLn . unwords <$> some (strArg "STR...")
    , Subcommand "ls" "List directory" $
      ls <$> strArg "DIR"
    , Subcommand "mkdir" "Create directory" $
      mkdir <$> parentsOpt <*> strArg "DIR"
    ]
  where
    parentsOpt = switchWith 'p' "parents" "Make missing directories"

ls :: FilePath -> IO ()
ls dir =
  listDirectory dir >>= mapM_ putStrLn

mkdir :: Bool -> FilePath -> IO ()
mkdir parents =
  if parents then createDirectoryIfMissing True else createDirectory
$ ghc readme.hs
$ ./readme --help
readme example

Usage: readme COMMAND
  Longer description...

Available options:
  -h,--help                Show this help text

Available commands:
  echo                     Print words
  ls                       List directory
  mkdir                    Create directory
$ ./readme echo hello world
hello world
$ ./readme mkdir -h
Usage: readme mkdir [-p|--parents] DIR
  Create directory

Available options:
  -p,--parents             Make missing directories
  -h,--help                Show this help text

Examples

See the examples.

Hackage packages using this library: https://packdeps.haskellers.com/reverse/simple-cmd-args