code: def recurse(self, fn, *args):
          
          fn(self, *args)
          for i in self.items:
              if isinstance(i, Hypercat):
                  self.recurse(i, *args)
docs: Calls fn on a hypercat and all its child hypercats (not resources)