'da uygulama kılavuzları nasıl istiflenebilir? Kullanım kılavuzları genellikle hesaplama adımlarınız bağımsız olduğunda monadlere alternatif olarak belirtilir. Sık sık belirtilen avantajlarından biri, uygulamaların istiflenmesi istendiğinde transformatörlere ihtiyacınız olmamasıdır, çünkü F[G[X]]
her zaman aynı zamanda bir uygulamadır. ı aşağıdaki işlevleri var diyelim:Scala
def getDataOption(): Option[Data]
def getUserFuture(): Future[User]
def process(data: Data, user: User)
Ben Future[Option[User]]
ve Future[Option[Data]]
almak ve process
o eşleştirmek için zarif istiflenmesini istiyorum.
Bugüne kadar yalnızca bu (kullanarak Kediler) ile geldi:
Applicative[Future]
.compose[Option]
.map2(
Applicative[Future].pure(getDataOption()),
getUserFuture().map(Applicative[Option].pure))(process)
ama ideal olmaktan uzak olduğuna eminim. Aynı şeyi elde etmenin daha şık ve genel bir yolu var mı?
Teşekkür yapabileceği en iyisidir. – kciesielski
Burada yapılabilecek en kolay şey, sadece 'OptionT' almanız olabilir, ancak muhtemelen ((getDataOption) | @ | send (getUserFuture)) map (process _). RunOption.detach. Eff ile (gelecekle [Seç] [A]] Eff Eff (ve Emm ile benzer bir şey) elde edin. – Eric
Sağ. Ancak, uygulamalarla kalmak istedim. Sorumluluğumun amacı, övgüye değer uygulamalı mülkün pratik bir uygulamasını görmek ve transformatör kullanmadan istiflenebilmekti. – kciesielski