Make AST safe by constructions.
I'm almost sure that some recursion points in SqlF are in wrong places. E.g. it's possible to create CASE and print it but the output isn't correct sql^2 and emits an error during parsing.
The idea is about at least introducing Expression type that handles identifiers, literals and operators.
Other thing is GROUP BY, keys should be NonEmpty List a or SELECT should take not Maybe (GroupBy a) but GroupBy a. There are few such things.
Make parser and gen coalgebraic
This one is heavily depending on making AST safe by construction.
Preserve position information during tokenizing
It's vanished right now.