docs: def copy(self):
          """Be sure to implement this method when sub-classing, otherwise you
          will lose any specialization context."""
          doppel = type(self)(
              self.unpack, self.apply, self.collect, self.reduce,
              apply_empty_slots=self.apply_empty_slots,
              extraneous=self.extraneous,
              ignore_empty_string=self.ignore_empty_string,
              ignore_none=self.ignore_none,
              visit_filter=self.visit_filter,
          )
          for x in self.cue:
              doppel.push(x)
          doppel.seen = self.seen
          return doppel