-- | Parse command lines with /options/ that might take multiple
-- /option arguments/.
--
-- I built this library could not find anything that would readily
-- parse command lines where the /options/ took more than one
-- /option argument/. For example, for the @tail@ command on GNU systems, the
-- @--lines@ /option/ takes one /option argument/ to specify how many
-- lines you want to see. Well, what if you want to build a program
-- with an option that takes two /option arguments/, like @--foo bar
-- baz@? I found no such library so I built this one.
--
-- Please consult the "Multiarg.Vocabulary" module to learn common
-- vocabulary used throughout Multiarg and its documentation.  Words
-- that appear in /italics/ are defined in "Multiarg.Vocabulary".
--
-- Use this module to build parsers for simple commands.  The
-- 'parseCommandLine' function runs in the IO monad and will cause
-- your program to exit unsuccessfully if there are any errors in the
-- command line, printing an error message in the process.  If you
-- want more control over error handling, use the "Multiarg.Internal"
-- module.
--
-- To write parsers for commands with multiple modes (for instance,
-- @ghc-pkg@ has multiple modes, such as @ghc-pkg list@ and @ghc-pkg
-- check@) use the "Multiarg.Mode" module.
--
-- You will find examples in "Multiarg.Examples.Telly" for non-mode
-- parsers, and in "Multiarg.Examples.Grover" for mode parsers.
module Multiarg
  ( ArgSpec(..)
  , OptSpec
  , optSpec
  , parseCommandLine
  ) where

import Multiarg.Internal
import Multiarg.Types