asum really needs to go into the Foldable class (or something)