code: @Nonnull
      public final Maybe<A> index(int index) {
          ImmutableList<A> l = this;
          if (index < 0) {
              return Maybe.empty();
          }
          while (index > 0) {
              if (l.isEmpty()) {
                  return Maybe.empty();
              }
              index--;
              l = ((NonEmptyImmutableList<A>) l).tail;
          }
          return l.maybeHead();
      }
docs: Get the <code>index</code>th element of the list. It is comparable to the <code>[]</code>
  operator for array but instead of returning the element, it returns an <code>Maybe</code> to
  indicate whether the element can be found or not.
  
  @param index The index.
  @return <code>Maybe.of(found element)</code>if the element can be retrieved; or
  <code>Maybe.empty()</code> if index out of range().