anchor.diff:    {#required{children=Result}, options(State)}.
   
   % expr ::= seq ( '|' seq )* ;
  +-spec parse_expr(state()) -> {patterns(), state()}.
   parse_expr(State0) ->
     {Seq, State} = parse_seq(State0),
     case current(State) of
  
positive.code:       {Rest, Acc}
    end.
  
  match_child_pattern(Pat, Rest0, Acc0) ->
    case single_match(Pat, Rest0) of
      nomatch              -> {false, Rest0, Acc0};
  
negative.code:     Groups -> fix_either(Groups)
    end.
  
  -spec fix_either(parent_pattern(), [child_pattern()]) -> [child_pattern()].
  fix_either(#either{}=Pat, Children)      ->
    [[C|Children] || C <- Pat#either.children];
  fix_either(#required{}=Pat, Children)    -> [Pat#required.children ++ Children];
  