custom hash consing + iter/fold functions