why not rename `self.result` to `self._result`, and make `final()` return the finished result?
then the guts of `Squashed` are abstracted away...