Example
import scalaz._
import Scalaz._
scala> Apply[Option].apply2(some(1), some(2))((a, b) => a + b)
res0: Option[Int] = Some(3)
scala> val intToString: Int => String = _.toString
scala> Apply[Option].ap(1.some)(some(intToString))
res1: Option[String] = Some(1)
scala> Apply[Option].ap(none)(some(intToString))
res2: Option[String] = None
scala> val double: Int => Int = _ * 2
scala> Apply[List].ap(List(1, 2, 3))(List(double))
res3: List[Int] = List(2, 4, 6)
scala> :kind Apply
scalaz.Apply's kind is X[F[A]]