Ralf Hinze and Ross Paterson.
in *Journal of Functional Programming*16:2 (2006), pages 197-217.

We present 2-3 finger trees, a functional representation of persistent sequences supporting access to the ends in amortized constant time, and concatenation and splitting in time logarithmic in the size of the smaller piece. Representations achieving these bounds have appeared previously, but 2-3 finger trees are much simpler, as are the operations on them. Further, by defining the split operation in a general form, we obtain a general purpose data structure that can serve as a sequence, priority queue, search tree, priority search queue and more.

- gzipped PostScript, PDF.
- A sequence implementation based on the application discussed in section 4.2
is included as a module
Data.Sequence
in GHC and other Haskell implementations.
*Note:*The class`Reduce`in the paper is replaced by the class Foldable. - The fingertree package is a generic finger tree structure, for use as a base for various container types.
- Slides in DVI and gzipped 4-up PostScript.

*Purely Functional Data Structures*, Chris Okasaki. Cambridge University Press, 1998.General techniques for designing functional data structures, with a wealth of applications. Finger trees can be viewed as a generalization of the implicit deques discussed in section 11.1.

- H. Kaplan and R. E. Tarjan.
Purely functional representations of catenable sorted lists
In
*Proceedings of the 28th Annual ACM Symposium on Theory of Computing*, pages 202-211. ACM Press, 1996.A more complex structure achieving the same bounds, but in the worst case. They also sketch a variant that is claimed to achieve doubly logarithmic time for concatenation.

- Explanations of fingertrees in blog posts by apfelmus, Edward Kmett and Maniagnosis.
- Implementations in other languages: C#, Clojure, Coq, Humus, Java, Scala and Isabelle/HOL.