Implementing the general combinators in Monads and Applicative Functors