[Matthew](https://forum.azimuthproject.org/profile/1818/Matthew%20Doty) Thanks a lot for the compelling example of backtrack search! Do not worry too much about the micro-benchmarks; after asking the question, I've found some answers on why the difference lists help improving performance [[1](https://stackoverflow.com/questions/13879260/why-are-difference-lists-more-efficient-than-regular-concatenation/13879693#13879693), [2](http://h2.jaguarpaw.co.uk/posts/demystifying-dlist/)].

A few minor corrections to your previous comment:

- The function `findInBTree` is missing `BTree a` from its type; its signature should be `findInBTree :: (a -> Bool) -> BTree a -> m a`
- `Leaft` should be `Leaf`