   This module contains functions to parse command line options.
   """
 
-  @type argv    :: [String.t]
-  @type parsed  :: keyword
-  @type errors  :: [{String.t, String.t | nil}]
+  @type argv :: [String.t()]
+  @type parsed :: keyword
+  @type errors :: [{String.t(), String.t() | nil}]
   @type options :: [switches: keyword, strict: keyword, aliases: keyword]
 
   defmodule ParseError do


  """
  @spec next(argv, options) ::
        {:ok, key :: atom, value :: term, argv} |
        {:invalid, String.t, String.t | nil, argv} |
        {:undefined, String.t, String.t | nil, argv} |
        {:error, argv}

  def next(argv, opts \\ []) when is_list(argv) and is_list(opts) do
    next_with_config(argv, build_config(opts))

  end

  # Finish the string expecting a nil marker
  defp do_split(<<>>, "", acc, nil), do: Enum.reverse(acc)

  defp do_split(<<>>, buffer, acc, nil), do: Enum.reverse([buffer | acc])

  # Otherwise raise
  defp do_split(<<>>, _, _acc, marker) do
