anchor.diff:           compareWith/3,
            concat/1,
            contains/2,
  -         % countBy/2
  +         countBy/2,
            delay/1,
  -         %distinct/1,
  -         %distinctBy/2,
  +         distinct/1,
  +         distinctBy/2,
            empty/0,
  -         %exactlyOne/1,
  +         % exactlyOne/1,
            exists/2,
            %exists2/3,
            filter/2,
  
positive.code:             group_by(F, Groups, Seq)
      end.
  
  distinct_by(KeyF, Items, Seq0) ->
      case next(Seq0) of
          finished ->
              lists:reverse(Items);
          {Item, Seq} ->
              case lists:member(KeyF(Item), Items) of
                  true ->
                      distinct_by(KeyF, Items, Seq);
                  false ->
                      distinct_by(KeyF, [Item | Items], Seq)
              end
      end.
  
  
  
  next({seq, Enum}) ->
      next(Enum);
  next({list, [H | Tail]}) ->
  
negative.code:             {{Last, Item}, {pairwise, Item, [], Seq}};
          finished ->
              finished
      end;
  
  next({distinct_by, KeyF, Keys, Seq0}) ->
      case next(Seq0) of
          finished ->
              finished;
          {Item, Seq} ->
              Key = KeyF(Item),
              case maps:is_key(Key, Keys) of
                  true ->
                      next({distinct_by, KeyF, Keys, Seq});
                  false ->
                      {Item, {distinct_by, KeyF, Keys#{Key => ok}, Seq}}
              end
      end;
  
  next({append, first, Enum0, Seq2}) ->
  