anchor.diff:  unfold(Gen, State) ->
       {seq, {unfold, Gen, State}}.
   
  +zip(Seq1, Seq2) ->
  +    {seq, {zip, seq(Seq1), seq(Seq2)}}.
  +
  +zip3(Seq1, Seq2, Seq3) ->
  +    {seq, {zip3, seq(Seq1), seq(Seq2), seq(Seq3)}}.
  +
   % casts lists (and others) to seq
   seq(L) when is_list(L) ->
       {seq, {list, L}};
  
positive.code:     [1,2,3] = toList(unfold(Gen, 1)),
      ok.
  
  
  -endif.
  
negative.code:             finished;
          {Item, State} ->
              {Item, {unfold, Gen, State}}
      end;
  next({zip, Seq1_0, Seq2_0}) ->
      case {next(Seq1_0), next(Seq2_0)} of
          {{Item1, Seq1}, {Item2, Seq2}} ->
              {{Item1, Item2}, {zip, Seq1, Seq2}};
          _ ->
              finished
      end;
  next({zip3, Seq1_0, Seq2_0, Seq3_0}) ->
      case {next(Seq1_0), next(Seq2_0), next(Seq3_0)} of
          {{Item1, Seq1}, {Item2, Seq2}, {Item3, Seq3}} ->
              {{Item1, Item2, Item3}, {zip3, Seq1, Seq2, Seq3}};
          _ ->
              finished
      end.
  
  do_filter(P, Enum0) ->
  