anchor.diff:        , #option{short="-f", long="--file", argcount=1}
         ],
     St = fun(Tokens) ->
  -           #st{ options = O
  -              , tokens  = Tokens
  -              , mode    = parse_pattern}
  +           #state{ options = O
  +                 , tokens  = Tokens
  +                 , mode    = parse_pattern}
          end,
     [ ?_assertEqual({[#argument{name="FOO"}], St([])},
                     parse_atom(St(["FOO"])))
  
positive.code: %% seq ::= ( atom [ '...' ] )* ;
  parse_seq(State) -> parse_seq(State, []).
  
  parse_seq(#st{tokens=[]}      = State, Acc) -> {lists:reverse(Acc), State};
  parse_seq(#st{tokens=["]"|_]} = State, Acc) -> {lists:reverse(Acc), State};
  parse_seq(#st{tokens=[")"|_]} = State, Acc) -> {lists:reverse(Acc), State};
  parse_seq(#st{tokens=["|"|_]} = State, Acc) -> {lists:reverse(Acc), State};
  parse_seq(State0, Acc) ->
    ct:pal("in parse seq: ~p, ~p", [tokens(State0), Acc]),
    {Atom, State} = parse_atom(State0),
  
negative.code: 
  %%%_* Records =================================================================
  
  -record(state, { options = [] :: [child_pattern()]
                 , tokens  = [] :: [string()]
                 , mode         :: parse_mode()
                 }).
  
  %% Parent patterns
  -record(one_or_more , {children :: [pattern()]}).
  