immut_arr = [1, 2, 3, 4, 5]
mut_content_arr = [1, 2, 3, 4, 5].into [Int!; 5]
telescoping_arr = [1, 2, 3, 4, 5].into [Int; !5]
mut_arr = [1, 2, 3, 4, 5].into [Int!; !5]

mut_content_arr.map! x -> x + 1
# A mutable array class inherits an immutable array class, so a mutable array can compare with an immutable array
assert mut_content_arr == [2, 3, 4, 5, 6]
# This is invalid: telescoping_arr.map!(x -> x + 1)
telescoping_arr.push!(6)
assert telescoping_arr == [1, 2, 3, 4, 5, 6]
# This is invalid: mut_content_arr.push!(6)

# NOTE: `telescoping_arr` can actually do the same thing as `mut_content_arr` or `mut_arr`.
# `mut_arr[0].inc!()` is the same as `telescoping_arr.insert! 0, telescoping_arr.remove!(0) + 1`.
# The important thing is that the length of `mut_content_arr` will not change. This gives advantages such as guaranteed success of accessing.
