Minor refactoring, finally got hs-lint.
I just learned that I've been using Show horribly wrong.

https://github.com/quchen/articles/blob/master/fbut.md#show-is-not-for-prettyprinting

Show is for converting data to a string, in as syntactically-valid-haskell a manner as possible and hopefully precisely reversible with Read functions. I've been using show for pretty printing! Looking up the Prelude docs on Show confirms that I've been doing this all wrong.

I've rewritten the show instances to generate proper haskell representations, and I'll look into implementing proper pretty printing solutions.