Estou procurando uma estrutura de dados persistente semelhante à matriz (mas imutável), permitindo operações rápidas de indexação, acréscimo, pré-acréscimo e iteração (boa localidade).
O Clojure fornece Vector persistente, mas é apenas para anexação rápida. O vetor de Scala efetivamente anexa e pré-anexa em tempo constante, mas não consigo entender como ela é implementada, pois é baseada na mesma estrutura de dados (vetor trie com mapeamento de bits) que o vetor Clojure e, como eu entendo, vetor trie com mapeamento em bit não pode ter um prefixo rápido sem alguns truques.
Não estou interessado em estar pronto para usar a implementação, mas em uma descrição de como implementar essa estrutura de dados.