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