anchor.diff:  %% Remove the last element and return resulting queue
   %%
   %% O(1) amortized
  --spec drop_r(Q1) -> Q2 when
  -      Q1 :: queue(),
  -      Q2 :: queue().
  +-spec drop_r(Q1 :: queue()) -> Q2 :: queue().
   drop_r({[],[]}=Q) ->
       erlang:error(empty, [Q]);
   drop_r({[],[_]}) ->
  
positive.code: %% Put at least one element in each list, if it is cheap
  %%
  %% O(1)
  -spec in(Item, Q1) -> Q2 when
        Item :: term(),
        Q1 :: queue(),
        Q2 :: queue().
  in(X, {[_]=In,[]}) ->
      {[X], In};
  in(X, {In,Out}) when is_list(In), is_list(Out) ->
  
negative.code: %% Return the last element in the queue
  %%
  %% O(1) since the queue is supposed to be well formed
  -spec get_r(Q :: queue()) -> Item :: term().
  get_r({[],[]}=Q) ->
      erlang:error(empty, [Q]);
  get_r({[H|_],F}) when is_list(F) ->
  