Why not use the dlist library:
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dlist
With something like (untested code):
> xs +++ ys = shows xs `append` shows ys
> x .++ ys = showChar x `cons` shows ys
> xs ++. y = shows xs `snoc` showChar y
>
> ext3' = toList $ '(' .++ n +++ ' ' .++ s ++. ')'