anchor.diff:  first(#{?TYPE := ?M, array := Array, index := Index}) ->
     array:get(Index, Array).
   
  -next(#{?TYPE := ?M, array := Array, index := Index}) ->
  -  case Index + 1 < array:size(Array) of
  +next(#{?TYPE := ?M, array := Array, size := Size, index := Index}) ->
  +  case Index + 1 < Size of
       true  -> ?CONSTRUCTOR(Array, Index + 1);
       false -> ?NIL
     end.
  
positive.code: 
  %% clojerl.IChunkedSeq
  
  chunked_first(#{?TYPE := ?M, array := Array, index := Index}) ->
    End  = lists:min([array:size(Array), Index + ?CHUNK_SIZE]),
    List = [array:get(I, Array) || I <- lists:seq(Index, End - 1)],
    'clojerl.TupleChunk':?CONSTRUCTOR(list_to_tuple(List)).
  
  chunked_next(#{?TYPE := ?M, array := Array, index := Index}) ->
    End = lists:min([array:size(Array), Index + ?CHUNK_SIZE]),
    case End < array:size(Array) of
      true  -> ?CONSTRUCTOR(Array, Index + ?CHUNK_SIZE);
      false -> ?NIL
    end.
  
negative.code: 
  %% clojerl.ISeqable
  
  seq(#{ ?TYPE := ?M
       , size  := Size
       , index := Index
       } = ChunkedSeq) ->
    case Index < Size of
      true  -> ChunkedSeq;
      false -> ?NIL
    end.
  
  to_list(#{?TYPE := ?M, array := Array, size := Size, index := Index}) ->
    [array:get(I, Array) || I <- lists:seq(Index, Size - 1)].
  
  %% clojerl.IStringable
  
  