Added function monoid and function semigroup