anchor.diff:  
   flatten_children(Children) ->
     lists:flatten(lists:map(fun flatten/1, Children)).
  +
  +name(#command{name=Name})                 -> Name;
  +name(#argument{name=Name})                -> Name;
  +name(#option{long=undefined, short=Name}) -> Name;
  +name(#option{long=Name})                  -> Name.
  +
  +value(#command{value=Value})  -> Value;
  +value(#argument{value=Value}) -> Value;
  +value(#option{value=Value})   -> Value.
   
   parse_doc_options(Doc) ->
     [_|OptStrings] = re:split(Doc, "^ *-|\\n *-", [{return, list}]),
  
positive.code:   Cmd#command{value=true}.
  
  match_fun(#option{}=Opt) ->
    fun(#option{}=O) -> option_name(O) == option_name(Opt);
       (_)           -> false
    end;
  match_fun(#argument{}) ->
  
negative.code:     nomatch                 -> false
    end.
  
  
  match(Pat, Rest) -> match(Pat, Rest, []).
  
  