アプリカティブ ファンクターは、計算ステップが独立している場合に、モナドの代替としてよく言及されます。F[G[X]]
よく言及される利点の 1 つは、常にアプリカティブでもあるため、アプリカティブをスタックする場合にトランスフォーマーが必要ないことです。次の機能があるとしましょう:
def getDataOption(): Option[Data]
def getUserFuture(): Future[User]
def process(data: Data, user: User)
Future[Option[User]]
andを取得し、それFuture[Option[Data]]
を でマップするために、エレガントなスタッキングが必要process
です。
これまでのところ、私はこれを思いつきました(猫を使用):
Applicative[Future]
.compose[Option]
.map2(
Applicative[Future].pure(getDataOption()),
getUserFuture().map(Applicative[Option].pure))(process)
しかし、それは理想にはほど遠いと確信しています。同じことを達成するためのよりエレガントで一般的な方法はありますか?