In the case where you have 2+ PooledArrays and you want them to share a single pool, it would be useful to have a constructor that's something like
foo = PooledArray(rand(["a","b","c"], 5000))
bar = PooledArray(rand(["a","b","c"], 100), foo)
where bar is a PooledArray of 100 elements that share the pool of foo. Therefore, if one was to change foo.pool[1] = "zebra", every occurrence of "a" in bar would become "zebra"
The constructor would look something like
PooledArray(x, y::PooledArray)
I'm not sure of what a clean and efficient process for that would look like. Perhaps since the pool already exists, replacing every occurrence of a unique element with the corresponding pool index?