the rest of the world calls them semigroups, might as well