In the following paper we introduced an implementation that performs lookup in O(log n) and insertion in O(1) by moving some of the work to compile time.
@INPROCEEDINGS { MVP13, AUTHOR = { Martinez, Bruno and Viera, Marcos and Pardo, Alberto }, TITLE = { Just Do It While Compiling!: Fast Extensible Records in Haskell }, BOOKTITLE = { Proceedings of the ACM SIGPLAN 2013 Workshop on Partial Evaluation and Program Manipulation }, SERIES = { PEPM '13 }, YEAR = { 2013 }, ISBN = { 978-1-4503-1842-6 }, LOCATION = { Rome, Italy }, PAGES = { 77--86 }, NUMPAGES = { 10 }, DOI = { 10.1145/2426890.2426908 }, ACMID = { 2426908 }, PUBLISHER = { ACM }, ADDRESS = { New York, NY, USA }, KEYWORDS = { balanced trees, extensible records, haskell, hlist, staged computation, type-level programming }, PDF = { http://www.fing.edu.uy/~mviera/papers/pepm13.pdf },}
Best,
marcos