Когда и почему следует использовать Аппликативные Функторы в Scala

я знаю этоMonad можно выразить в Scala следующим образом:

trait Monad[F[_]] {
  def flatMap[A, B](f: A => F[B]): F[A] => F[B]
}

Я понимаю, почему это полезно. Например, даны две функции:

getUserById(userId: Int): Option[User] = ...
getPhone(user: User): Option[Phone] = ...

Я могу легко написать функциюgetPhoneByUserId(userId: Int) посколькуOption это монада:

def getPhoneByUserId(userId: Int): Option[Phone] = 
  getUserById(userId).flatMap(user => getPhone(user))

...

Теперь я вижуApplicative Functor в Скале:

trait Applicative[F[_]] {
  def apply[A, B](f: F[A => B]): F[A] => F[B]
}

Интересно, когда я должен использовать этовместо монада Я думаю, что и Option и ListApplicatives, Не могли бы вы привести простые примеры использованияapply с опцией и список и объяснитьПочему Я должен использовать этовместо flatMap ?

Ответы на вопрос(2)

Ваш ответ на вопрос