anchor.diff:      {seq, {list, L}};
   seq({seq, _} = Seq) ->
       Seq;
  -seq(_Seq) ->
  -    throw(argument_exception).
  +seq(Map) when is_map(Map) ->
  +    {seq, {delay, fun () -> seq(maps:to_list(Map)) end}};
  +seq({set, Map}) ->
  +    {seq, {delay, fun () -> seq(maps:keys(Map)) end}};
  +seq(Seq) ->
  +    case array:is_array(Seq) of
  +        true  ->
  +            {seq, {array, array:size(Seq), 0, Seq}};
  +        false ->
  +            throw(argument_exception)
  +    end.
   
   %%% ------- internal -------
   
  
positive.code:     [] = toList(windowed(2, [1])),
      ok.
  
  
  
  -endif.
  
negative.code:         {Item, Seq} ->
              Window = array:set(Idx, Item, Window0),
              next({windowed, false, Size, Idx+1, Window, Seq})
      end;
  next({array, Size, Size, _Array}) ->
      finished;
  next({array, Size, Idx, Array}) ->
      {array:get(Idx, Array), {array, Size, Idx+1, Array}}.
  
  
  do_filter(P, Enum0) ->
  