Currently I have an Array module modeled on Erlangs for speed with extra functions/macros that work like the Dict interface (except mine accepts the Array passed in at the beginning or the end of the parameter list since Dict has it at the beginning and tuple function calls put it at the end) except it only takes integers as keys and hard dies on anything else, but is faster than maps (a little less than twice as fast on gets, but substantially faster, well over ten times as fast and gets faster the larger the data that I am using over maps on erts-7.3/BEAM18, unsure if 19 is any faster):
```elixir
iex(1)> a = Array.new()
{Array, 0, 10, nil, 10}
iex(2)> a = a.resize(400)
{Array, 400, 1000, nil, 1000}
iex(3)> a = a.put_new(42, "testing")
{Array, 400, 1000, nil,
{{10, 10, 10, 10, {nil, nil, "testing", nil, nil, nil, nil, nil, nil, nil}, 10,
10, 10, 10, 10, 10}, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}}
```
How can I also enable this syntax:
```elixir
iex> a[42]
nil
```
Right now it instead raises a `FunctionClauseError` because `Access.fetch` is hard-coded to only a couple of things. Could not something like this be added as an `Access.fetch/2` clause so it follows the same pattern as maps/structs?
```elixir
def fetch(tup, key) when is_tuple(tup) and is_atom(elem(tup, 0)) do
elem(tup, 0).fetch(tup, key)
end
```