use monoid