nice. Note it never uses the monoid property.