diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -48,3 +48,31 @@
 might help you diagnose any dependency issues.
 
 [![Build Status](https://travis-ci.org/massysett/multiarg.svg?branch=master)](https://travis-ci.org/massysett/multiarg)
+
+## Similar libraries
+
+Of course there are many command-line parsing modules and libraries
+out there; here are some comparisons.
+
+[optparse-applicative](https://hackage.haskell.org/package/optparse-applicative):
+very featureful with a well thought-out interface.  Builds help for
+you.  I often use this if it meets my needs.  From what I can tell,
+though, it strips out information about the relative ordering of the
+words from the command line; for instance, if the user typed "hello
+--opt1 --opt2", you cannot tell whether she entered "--opt1" before
+she entered "--opt2".  Also, from what I can tell it cannot easily
+parse options that take more than one argument.
+
+[GetOpt](https://hackage.haskell.org/package/base-4.7.0.2/docs/System-Console-GetOpt.html):
+comes with the base libraries, so you don't have to install anything
+extra, which gives it a huge advantage.  Keeps information about the
+relative ordering of the words from the command line.  Cannot easily
+parse options that take more than one argument.
+
+[cmdargs](https://hackage.haskell.org/package/cmdargs): after multiple
+passes through the Haddocks I could never make any sense of this
+library at all, which must be a reflection of my level of Haskell
+ignorance.
+
+More comparisons are at the [Haskell
+Wiki](https://www.haskell.org/haskellwiki/Command_line_option_parsers).
diff --git a/lib/Multiarg/Vocabulary.hs b/lib/Multiarg/Vocabulary.hs
--- a/lib/Multiarg/Vocabulary.hs
+++ b/lib/Multiarg/Vocabulary.hs
@@ -8,18 +8,18 @@
 -- shell is responsible for splitting the command line into
 -- /words/. Typically you separate /words/ with spaces, although
 -- quoting can affect this. multiarg parses lists of /words/. Each
--- /word/ can consist of a single /long option/, a single /long
--- option/ and an accompanying /option argument/, a single /short
--- option/, multiple /short options/, and even one or more /short
--- options/ with the last /short option/ being accompanied by an
+-- /word/ can consist of a single /long option/, a single /long option/
+-- and an accompanying /option argument/, a single /short option/,
+-- multiple /short options/, and even one or more /short options/
+-- with the last /short option/ being accompanied by an
 -- /option argument/.  Or, a word can be a /positional argument/ or a
 -- /stopper/. All these are described below.
 --
 -- [/option/] /Options/ allow a user to specify ways to tune the
 -- operation of a program. Typically /options/ are indeed optional,
 -- although some programs do sport \"required options\" (a bit of an
--- oxymoron). /Options/ can be either /short options/ or /long
--- options/.  options. Also, /options/ can take /option arguments/.
+-- oxymoron). /Options/ can be either /short options/ or /long options/.
+-- Also, /options/ can take /option arguments/.
 -- The option is specified on the command line with both the /flag/
 -- that specifies the option and of any /option arguments/ that are
 -- included with the /option/.  Therefore the /option/ might be
@@ -62,8 +62,7 @@
 -- single letter. For example, @tail(1)@ has long options including
 -- @follow@ and @verbose@. The user would specify these on the command
 -- line by typing @tail --follow --verbose@.  A long option is
--- specified on the command line with a /flag/ and any /option
--- arguments/.
+-- specified on the command line with a /flag/ and any /option arguments/.
 --
 -- [/option argument/] An /option/ may take anywhere from zero to
 -- three /option arguments/.  When using a /short option/, the first
@@ -81,10 +80,10 @@
 -- appear in its own /word/.
 --
 -- [/positional argument/] A /word/ on the command line that does not
--- contain a /flag/, is not a /stopper/, and is not an /option
--- argument/.  For instance, with @tail(1)@, you specify the files you
--- want to see by using /positional arguments/. In the command @tail -n
--- 10 myfile@, @myfile@ is a /positional argument/.
+-- contain a /flag/, is not a /stopper/, and is not an /option argument/.
+-- For instance, with @tail(1)@, you specify the files you
+-- want to see by using /positional arguments/. In the command @tail -n 10 myfile@,
+-- @myfile@ is a /positional argument/.
 --
 -- [/stopper/] A  /word/ consisting solely of two hyphens,
 -- @--@. The user types this to indicate that all subsequent words
diff --git a/multiarg.cabal b/multiarg.cabal
--- a/multiarg.cabal
+++ b/multiarg.cabal
@@ -3,15 +3,16 @@
 -- http://www.github.com/massysett/cartel
 --
 -- Script name used to generate: genCabal.hs
--- Generated on: 2014-12-22 12:47:53.73184 EST
--- Cartel library version: 0.10.0.2
+-- Generated on: 2015-02-19 07:37:09.506803 EST
+-- Cartel library version: 0.14.2.0
+
 name: multiarg
-version: 0.30.0.0
+version: 0.30.0.2
 cabal-version: >= 1.16
-build-type: Simple
 license: BSD3
 license-file: LICENSE
-copyright: Copyright 2011-2014 Omari Norman
+build-type: Simple
+copyright: Copyright 2011-2015 Omari Norman
 author: Omari Norman
 maintainer: omari@smileystation.com
 stability: Experimental
@@ -24,150 +25,150 @@
   See the documentation in the Multiarg module for details.
 category: Console, Parsing
 extra-source-files:
-    ChangeLog
-  , README.md
-
-source-repository head
-  type: git
-  location: git://github.com/massysett/multiarg.git
-
-Flag programs
-  Description: Build test programs.
-  Default: False
-  Manual: True
+  ChangeLog
+  README.md
 
 Library
   hs-source-dirs:
-      lib
+    lib
   ghc-options:
-      -Wall
+    -Wall
   default-language: Haskell2010
   build-depends:
-      base ((> 4.5.0.0 || == 4.5.0.0) && < 5)
+      base >= 4.5.0.0 && < 5
   exposed-modules:
-      Multiarg
-    , Multiarg.Examples
-    , Multiarg.Examples.Grover
-    , Multiarg.Examples.Telly
-    , Multiarg.Internal
-    , Multiarg.Limeline
-    , Multiarg.Maddash
-    , Multiarg.Mode
-    , Multiarg.Mode.Internal
-    , Multiarg.Types
-    , Multiarg.Util
-    , Multiarg.Vocabulary
+    Multiarg
+    Multiarg.Examples
+    Multiarg.Examples.Grover
+    Multiarg.Examples.Telly
+    Multiarg.Internal
+    Multiarg.Limeline
+    Multiarg.Maddash
+    Multiarg.Mode
+    Multiarg.Mode.Internal
+    Multiarg.Types
+    Multiarg.Util
+    Multiarg.Vocabulary
 
+source-repository head
+  type: git
+  location: https://github.com/massysett/multiarg.git
+
 Executable grover
   main-is: grover-main.hs
   if flag(programs)
+    buildable: True
     hs-source-dirs:
-        lib
+      lib
     ghc-options:
-        -Wall
+      -Wall
     default-language: Haskell2010
     build-depends:
-        base ((> 4.5.0.0 || == 4.5.0.0) && < 5)
+        base >= 4.5.0.0 && < 5
     build-depends:
-        QuickCheck ((> 2.6 || == 2.6) && < 2.8)
-      , quickpull ((> 0.4.0.0 || == 0.4.0.0) && < 0.5)
-      , barecheck ((> 0.2.0.6 || == 0.2.0.6) && < 0.3)
-    buildable: True
+        QuickCheck >= 2.7 && < 2.8
+      , quickpull >= 0.4.0.0 && < 0.5
+      , barecheck >= 0.2.0.6 && < 0.3
     other-modules:
-        Multiarg
-      , Multiarg.Examples
-      , Multiarg.Examples.Grover
-      , Multiarg.Examples.Telly
-      , Multiarg.Internal
-      , Multiarg.Limeline
-      , Multiarg.Maddash
-      , Multiarg.Mode
-      , Multiarg.Mode.Internal
-      , Multiarg.Types
-      , Multiarg.Util
-      , Multiarg.Vocabulary
-      , Decrees
-      , Ernie
-      , Grover.Tests
-      , Makeopt
-      , Multiarg.Maddash.Tests
-      , Telly.Tests
+      Multiarg
+      Multiarg.Examples
+      Multiarg.Examples.Grover
+      Multiarg.Examples.Telly
+      Multiarg.Internal
+      Multiarg.Limeline
+      Multiarg.Maddash
+      Multiarg.Mode
+      Multiarg.Mode.Internal
+      Multiarg.Types
+      Multiarg.Util
+      Multiarg.Vocabulary
+      Decrees
+      Ernie
+      Grover.Tests
+      Makeopt
+      Multiarg.Maddash.Tests
+      Telly.Tests
     hs-source-dirs:
-        tests
+      tests
   else
     buildable: False
 
 Executable telly
   main-is: telly-main.hs
   if flag(programs)
+    buildable: True
     hs-source-dirs:
-        lib
+      lib
     ghc-options:
-        -Wall
+      -Wall
     default-language: Haskell2010
     build-depends:
-        base ((> 4.5.0.0 || == 4.5.0.0) && < 5)
+        base >= 4.5.0.0 && < 5
     build-depends:
-        QuickCheck ((> 2.6 || == 2.6) && < 2.8)
-      , quickpull ((> 0.4.0.0 || == 0.4.0.0) && < 0.5)
-      , barecheck ((> 0.2.0.6 || == 0.2.0.6) && < 0.3)
-    buildable: True
+        QuickCheck >= 2.7 && < 2.8
+      , quickpull >= 0.4.0.0 && < 0.5
+      , barecheck >= 0.2.0.6 && < 0.3
     other-modules:
-        Multiarg
-      , Multiarg.Examples
-      , Multiarg.Examples.Grover
-      , Multiarg.Examples.Telly
-      , Multiarg.Internal
-      , Multiarg.Limeline
-      , Multiarg.Maddash
-      , Multiarg.Mode
-      , Multiarg.Mode.Internal
-      , Multiarg.Types
-      , Multiarg.Util
-      , Multiarg.Vocabulary
-      , Decrees
-      , Ernie
-      , Grover.Tests
-      , Makeopt
-      , Multiarg.Maddash.Tests
-      , Telly.Tests
+      Multiarg
+      Multiarg.Examples
+      Multiarg.Examples.Grover
+      Multiarg.Examples.Telly
+      Multiarg.Internal
+      Multiarg.Limeline
+      Multiarg.Maddash
+      Multiarg.Mode
+      Multiarg.Mode.Internal
+      Multiarg.Types
+      Multiarg.Util
+      Multiarg.Vocabulary
+      Decrees
+      Ernie
+      Grover.Tests
+      Makeopt
+      Multiarg.Maddash.Tests
+      Telly.Tests
     hs-source-dirs:
-        tests
+      tests
   else
     buildable: False
 
 Test-Suite multiarg-tests
   hs-source-dirs:
-      lib
+    lib
   ghc-options:
-      -Wall
+    -Wall
   default-language: Haskell2010
   build-depends:
-      base ((> 4.5.0.0 || == 4.5.0.0) && < 5)
+      base >= 4.5.0.0 && < 5
   type: exitcode-stdio-1.0
   main-is: multiarg-tests.hs
   other-modules:
-      Multiarg
-    , Multiarg.Examples
-    , Multiarg.Examples.Grover
-    , Multiarg.Examples.Telly
-    , Multiarg.Internal
-    , Multiarg.Limeline
-    , Multiarg.Maddash
-    , Multiarg.Mode
-    , Multiarg.Mode.Internal
-    , Multiarg.Types
-    , Multiarg.Util
-    , Multiarg.Vocabulary
-    , Decrees
-    , Ernie
-    , Grover.Tests
-    , Makeopt
-    , Multiarg.Maddash.Tests
-    , Telly.Tests
+    Multiarg
+    Multiarg.Examples
+    Multiarg.Examples.Grover
+    Multiarg.Examples.Telly
+    Multiarg.Internal
+    Multiarg.Limeline
+    Multiarg.Maddash
+    Multiarg.Mode
+    Multiarg.Mode.Internal
+    Multiarg.Types
+    Multiarg.Util
+    Multiarg.Vocabulary
+    Decrees
+    Ernie
+    Grover.Tests
+    Makeopt
+    Multiarg.Maddash.Tests
+    Telly.Tests
   hs-source-dirs:
-      tests
+    tests
   build-depends:
-      QuickCheck ((> 2.6 || == 2.6) && < 2.8)
-    , quickpull ((> 0.4.0.0 || == 0.4.0.0) && < 0.5)
-    , barecheck ((> 0.2.0.6 || == 0.2.0.6) && < 0.3)
+      QuickCheck >= 2.7 && < 2.8
+    , quickpull >= 0.4.0.0 && < 0.5
+    , barecheck >= 0.2.0.6 && < 0.3
+
+Flag programs
+  description: Build sample programs
+  default: False
+  manual: True
diff --git a/tests/Decrees.hs b/tests/Decrees.hs
--- a/tests/Decrees.hs
+++ b/tests/Decrees.hs
@@ -12,8 +12,8 @@
 decrees :: [Decree]
 decrees =
 
-  [ Decree ( Meta {modDesc = ModDesc {modPath = "tests/Grover/Tests.hs", modName = ["Grover","Tests"]}, linenum = 118, qName = "prop_ValidGrover"} ) ( Single Grover.Tests.prop_ValidGrover )
-  , Decree ( Meta {modDesc = ModDesc {modPath = "tests/Grover/Tests.hs", modName = ["Grover","Tests"]}, linenum = 124, qName = "prop_alwaysTrue"} ) ( Single Grover.Tests.prop_alwaysTrue )
+  [ Decree ( Meta {modDesc = ModDesc {modPath = "tests/Grover/Tests.hs", modName = ["Grover","Tests"]}, linenum = 123, qName = "prop_ValidGrover"} ) ( Single Grover.Tests.prop_ValidGrover )
+  , Decree ( Meta {modDesc = ModDesc {modPath = "tests/Grover/Tests.hs", modName = ["Grover","Tests"]}, linenum = 129, qName = "prop_alwaysTrue"} ) ( Single Grover.Tests.prop_alwaysTrue )
   , Decree ( Meta {modDesc = ModDesc {modPath = "tests/Multiarg/Maddash/Tests.hs", modName = ["Multiarg","Maddash","Tests"]}, linenum = 119, qName = "prop_nonOptWordNotAnOptionIfStateIsReady"} ) ( Single Multiarg.Maddash.Tests.prop_nonOptWordNotAnOptionIfStateIsReady )
   , Decree ( Meta {modDesc = ModDesc {modPath = "tests/Multiarg/Maddash/Tests.hs", modName = ["Multiarg","Maddash","Tests"]}, linenum = 128, qName = "prop_stopperNotAnOptionIfStateIsReady"} ) ( Single Multiarg.Maddash.Tests.prop_stopperNotAnOptionIfStateIsReady )
   , Decree ( Meta {modDesc = ModDesc {modPath = "tests/Multiarg/Maddash/Tests.hs", modName = ["Multiarg","Maddash","Tests"]}, linenum = 136, qName = "prop_singleDashNotAnOptionIfStateIsReady"} ) ( Single Multiarg.Maddash.Tests.prop_singleDashNotAnOptionIfStateIsReady )
diff --git a/tests/Grover/Tests.hs b/tests/Grover/Tests.hs
--- a/tests/Grover/Tests.hs
+++ b/tests/Grover/Tests.hs
@@ -94,7 +94,12 @@
     nonEmpty = (:) <$> firstWord <*> listOf arbitrary
       where
         firstWord = arbitrary `suchThat`
-          (\s -> not (s `elem` ["int", "string", "maybe"]))
+          (\s -> not (s `elem` ["int", "string", "maybe"])
+                 && not (startsWithHyphen s))
+        startsWithHyphen s = case s of
+          '-':_ -> True
+          _ -> False
+
 
 resultAndStrings
   :: (Arbitrary a, Show a)
