generic finger-tree structure (http://staff.city.ac.uk/~ross/papers/FingerTree.html)

#13Add extraction function

For priority queues, one important finger tree operation is splitting a tree, extracting the split point, and then joining the tree back together. This can be done in one pass with substantially better constant factors using a twisted-inside-out version of classical 2–3 tree deletion. See the deleteAt function in Data.Sequence. Ideally the function would return the same "metadata" as search.