In reply to @.bobbbob "how would you make": nvmd I got it, unless this is wrong then somebody tell me func hash(self: TheType): Hash = case self.kind: of wtvr1: return !$( hash(self.kind) !& hash(self.wtvr) ) of wtvr2: return !$( hash(self.kind) !& hash(self.smtn) ) of wtvr3: return !$( hash(self.left) !& hash(self.right) )