def at(index)
      raise Erlang::ImproperListError if improper?
      index += size if index < 0
      return nil if index < 0
      node = self
      while index > 0
        node = node.tail
        index -= 1
      end
      return node.head
    end
def at(index)
      raise Erlang::ImproperListError if improper?
      index += size if index < 0
      return nil if index < 0
      node = self
      while index > 0
        node = node.tail
        index -= 1
      end
      return node.head
    end
Retrieve the item at `index`. Negative indices count back from the end of
 the list (-1 is the last item). If `index` is invalid (either too high or
 too low), return `nil`.

 @param index [Integer] The index to retrieve
 @return [Object]