added operations on free monad