úΜª     Only requires OverloadedStrings experimental#Bas van Dijk <v.dijk.bas@gmail.com>?A difference string is a function that given a string, returns A the original contents of the difference string prepended at the  given string. This structure supports O(1) append en snoc operations on > strings making it very usefull for append-heavy uses such as  logging and pretty printing. 7You can use it to efficiently show a tree for example: 3 (Note that we make use of some functions from the string-combinators package:   Mhttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/string-combinators) $ {-# LANGUAGE OverloadedStrings #-}   import Data.DString 9 import Data.String.Combinators ((<+>), fromShow, paren)  1 data Tree a = Leaf a | Branch (Tree a) (Tree a)  ( instance Show a => Show (Tree a) where  show = toString . go  where 3 go (Leaf x) = "Leaf" <+> fromShow x H go (Branch l r) = "Branch" <+> paren (go l) <+> paren (go r) 1Convert a difference string to a difference list :Convert a difference list of Chars to a difference string 4Convert a difference string back to a normal String 'Convert a ShowS to a difference string 'Convert a difference string to a ShowS 4Create a difference string containing no characters -Build a difference string from a single Char O(1)(, Prepend a Char to a difference string O(1)', Append a Char to a difference string O(1), Appending difference strings O(spine)!, Concatenate difference strings  O(length ds)+, difference list elimination, head, tail. )Return the head of the difference string )Return the tail of the difference string Unfoldr for difference strings Foldr over difference strings          dstring-0.2 Data.DStringDStringtoDList fromDListtoString fromShowStoShowSempty singletonconssnocappendconcatlistheadtailunfoldrfoldrDS