Ok, updated to make more consistent. Moved the duplication into the Io module - prefer to compose rather than require formatters to use a superclass if possible.