optimize `parse(IO)`

This is still embarrassingly slow... but this change shaves off an order of magnitude