में आवेदक फ़ैक्टरों को कैसे ढेर करें, आपके गणना चरण स्वतंत्र होने पर आवेदक फ़ैक्टर को अक्सर मोनैड के विकल्प के रूप में वर्णित किया जाता है। उनके अक्सर उल्लिखित फायदों में से एक यह है कि जब आप आवेदकों को ढेर करना चाहते हैं तो आपको ट्रांसफार्मर की आवश्यकता नहीं है, क्योंकि F[G[X]]
हमेशा एक आवेदक भी होता है। चलो कहते हैं कि मैं निम्नलिखित कार्य करते हैं:स्कैला
def getDataOption(): Option[Data]
def getUserFuture(): Future[User]
def process(data: Data, user: User)
मैं आदेश में एक Future[Option[User]]
और Future[Option[Data]]
हो और नक्शा कि process
साथ करने के लिए सुरुचिपूर्ण स्टैकिंग करना चाहते हैं।
अब तक मैं केवल यह (बिल्लियों का प्रयोग करके) के साथ आया था:
Applicative[Future]
.compose[Option]
.map2(
Applicative[Future].pure(getDataOption()),
getUserFuture().map(Applicative[Option].pure))(process)
लेकिन मुझे यकीन है कि यह आदर्श से दूर हूँ। क्या यह हासिल करने के लिए एक और अधिक सुरुचिपूर्ण और सामान्य तरीका है?
धन्यवाद, मुझे लगता है कि एफ़/एएमएम मोनड के समान कुछ बॉयलरप्लेट को पट्टी करने के लिए आसान होगा, यदि यह संभव हो। – kciesielski
मुझे लगता है कि यहां करने का सबसे आसान काम केवल 'विकल्प टी' को पकड़ना है, लेकिन आप शायद '(भेजें (getDataOption) | @ भेजें (getUserFuture))। नक्शा (प्रक्रिया _)। RunOption.detach। एफ़ के साथ अंतिम 'भविष्य [विकल्प [ए]]' प्राप्त करने के लिए 'चलाएं' (और एएमएम के समान कुछ)। – Eric
दाएं। हालांकि, मैं आवेदकों के साथ रहना चाहता था। मेरे प्रश्न का मुद्दा प्रशंसनीय आवेदक संपत्ति का व्यावहारिक अनुप्रयोग देखना था, ताकि उन्हें ट्रांसफॉर्मर का उपयोग किये बिना ढेर किया जा सके। – kciesielski