Includes Functor (through Apply).
trait Applicative[F[_]] extends Apply[F] with Pointed[F] { self =>
def apply[A, B, C](fa: => F[A], fb: => F[B])(f: (A, B) => C): F[C]
}
This is what we can do with that:
val result1: Option[String] = "First".some
val result2: Option[String] = "Post".some
def combine(first: String, second: String) = first + " " + second
val result = Applicative[Option].apply(result1, result2)(combine)
println(result) // Some("First Post")
// Or:
println(^(result1, result2)(combine))