After reading these discussions, I may have interpreted :compact in the wrong way, it's not intended for switching between single-line and multi-line displaying.
Also the philosophy of the 2-argument show(io::IO, t::MyType) is that it always returns an expression that can be evaluated, kinda like the constructor. You do not want compact mode to accidentally switch it to a multi-line printing.