Estoy buscando una estructura de datos persistente similar a la matriz (pero inmutable), que permita operaciones rápidas de indexación, anexión, anteposición e iteración (buena localidad).
Clojure proporciona Vector persistente, pero es solo para un apéndice rápido. Scala's Vector tiene efectivamente anexos y antepuestos de tiempo constante, pero no puedo entender cómo se implementa, ya que se basa en la misma estructura de datos (vector de mapa de bits) que el vector Clojure y, según tengo entendido, vector de mapa de bits no puede tener un antecedente rápido sin algunos trucos.
No estoy interesado en la implementación lista para usar, sino en una descripción de cómo implementar esa estructura de datos yo mismo.