anchor.diff:           fold/3,
            %forall/2
            %forall2/3
  -         %groupBy/2,
  +         groupBy/2,
            head/1,
            init/2,
            %initInfinite/1,
  
positive.code:     [] = toList(zip3([], Seq2, Seq3)),
      ok.
  
  
  -endif.
  
negative.code:         {Item, Enum} ->
              enumerate(Enum, [Item | Acc])
      end.
  
  group_by(F, Groups0, Seq0) ->
      case next(Seq0) of
          finished ->
              % reverse each result seq lazily
              maps:fold (fun (Key, Values, Acc) ->
                                 [{Key, delay(fun () -> lists:reverse(Values) end)} | Acc]
                         end, [], Groups0);
          {Item, Seq} ->
              Groups = maps:update_with(F(Item),
                                        fun (Items) -> [Item | Items] end,
                                        [Item], Groups0),
              group_by(F, Groups, Seq)
      end.
  
  
  next({seq, Enum}) ->
      next(Enum);
  