A difference-list monad transformer / a monadic difference-list.
Difference lists are lists with O(1) append (instead of O(N)).
Transforming a difference list to a list is O(1), a must be done to access a difference list. The transformation from a list to a difference list is O(N).