I built this because I was doing vcat(::Number,::AbstractArray) an insane amount of times in my code. That operation requires a copy of the data, this package sidesteps that unnecessary allocation.
In terms of usability, in the example below x_env should match x_vcat in behavior.
a = rand(5,5)
x_vcat = vcat(0.0,a)
x_env = EnvelopedArray(0.0,a)EnvelopedArrays are immutable, but creating a new instance is quick. So, if you wanted to change the parent array in x_env (from above) from a to a2 , you can just do x_env = EnvelopedArray(0.0,a2). Doing it this way just creates a reference, there is no copying of the underlying array.
Thanks to the helpful people on Julia Slack for answering my questions. Additional feedback or suggested improvements are welcome!