anchor.diff:  %% clojerl.IAssociative
   
   contains_key(#{?TYPE := ?M, array := Array}, Index) ->
  -  Index >= 0 andalso Index < array:size(Array).
  +  is_valid_index(Array, Index).
   
   entry_at(#{?TYPE := ?M, array := Array}, Index) ->
  -  array:get(Index, Array).
  +  case is_valid_index(Array, Index) of
  +    true  -> ?CONSTRUCTOR([Index, array:get(Index, Array)]);
  +    false -> ?NIL
  +  end.
   
   assoc(#{?TYPE := ?M, array := Array} = Vector, Index, Value) ->
  -  case  Index =< array:size(Array) of
  +  case is_valid_index(Array, Index) orelse Index == array:size(Array) of
       true  -> Vector#{array => array:set(Index, Value, Array)};
  -    false -> error(<<"Index out of bounds">>)
  +    false -> ?ERROR(<<"Index out of bounds">>)
     end.
   
   %% clojerl.ICounted
  
positive.code:   get(Vector, Index, ?NIL).
  
  get(#{?TYPE := ?M, array := Array}, Index, NotFound) ->
    case Index < array:size(Array) of
      true  -> array:get(Index, Array);
      false -> NotFound
    end.
  
negative.code: %% clojerl.IIndexed
  
  nth(#{?TYPE := ?M, array := Array}, N) ->
    case is_valid_index(Array, N) of
      true  -> array:get(N, Array);
      false -> error(badarg)
    end.
  
  nth(#{?TYPE := ?M, array := Array}, N, NotFound) ->
    case is_valid_index(Array, N) of
      true  -> array:get(N, Array);
      false -> NotFound
    end.
  