states have to be hashable