Type Erasure on Built-in And Array Types

You normally can't have arrays of heterogeneous types. The closest you can get is to have an array of simple protocols. That is, protocols with no Self constraints or associated type. So potentially you might need another protocol in the protocol hierarchy:

protocol BaseArrow {
}
protocol ArrowValue: BaseArrow {
  func createGArray(...)
}

That said, I'm not sure how applicable that'd be for your use case.