updates monoid work
add interfaces for monad and applicative functor
work from train