anchor.diff:  %%
   %% Q2 empty: O(1)
   %% else:     O(len(Q1))
  --spec join(Q1, Q2) -> Q3 when
  -      Q1 :: queue(),
  -      Q2 :: queue(),
  -      Q3 :: queue().
  +-spec join(Q1 :: queue(), Q2 :: queue()) -> Q3 :: queue().
   join({R,F}=Q, {[],[]}) when is_list(R), is_list(F) ->
       Q;
   join({[],[]}, {R,F}=Q) when is_list(R), is_list(F) ->
  
positive.code: %% Return the first element in the queue
  %%
  %% O(1) since the queue is supposed to be well formed
  -spec head(Q) -> Item when
        Q :: queue(),
        Item :: term().
  head({[],[]}=Q) ->
      erlang:error(empty, [Q]);
  head({R,F}) when is_list(R), is_list(F) ->
  
negative.code: new() -> {[],[]}. %{RearList,FrontList}
  
  %% O(1)
  -spec is_queue(Term :: term()) -> boolean().
  is_queue({R,F}) when is_list(R), is_list(F) ->
      true;
  is_queue(_) ->
      false.
  
  %% O(1)
  -spec is_empty(Q :: queue()) -> boolean().
  is_empty({[],[]}) ->
      true;
  is_empty({In,Out}) when is_list(In), is_list(Out) ->
  