The dstring package

Difference strings: a data structure for O(1) append on strings. Note that a
DString is just a newtype wrapper around a DList Char. The reason we need a
new type instead of just a type synonym is that we can have an instance
IsString DString without using language extensions (TypeSynonymInstances or
FlexibleInstances) so we can write overloaded string literals of type DString.