added applicative, tag types, and monoid