lenses and semigroups