हैलो साथी हास्केलर्स।एक आवेदक फंक्शन को कई बार लागू करने के तरीके
मान लें कि मेरे पास एक आवेदक मज़ेदार (मोनैड का उदाहरण नहीं है) I शुद्ध प्रारंभिक मूल्य पर कई बार लागू करना चाहता है। उदाहरण के लिए,
λ> Just (1+) <*> (Just (1+) <*> pure 0)
Just 2
मैं लगातार अनुप्रयोगों के किसी भी संख्या को यह सामान्यीकरण करने के लिए चाहते हैं, तो मैं इसे एक fold
के साथ क्या कर सकते हैं।
applyAppl :: Applicative f => f (a -> a) -> Int -> f a -> f a
applyAppl f n i = foldr (<*>) i $ replicate n f
इस परिभाषा के बाद,
λ> applyAppl (Just (1+)) 10 $ pure 0
Just 10
मैं एक अजीब संदेह सामान्यीकरण भी हो सकता है कि इस तरह के sequenceA
या traverse
के रूप में उच्च क्रम builtin अनुप्रयोगी उपकरणों में से एक के साथ किया है। यह कर सकते हैं?
(। नीचे पहले दो टिप्पणियों को ध्यान में रखना संपादित)
क्या आप उस फ़ंक्शन का प्रकार दे सकते हैं जिसे आप लिखने की कोशिश कर रहे हैं? –
"अधिक आसानी से" से आपका क्या मतलब है? आपका फ़ंक्शन कोड की एक पंक्ति है; यह वास्तव में उससे ज्यादा आसान नहीं मिलता है। – user2407038
आप क्या सरलीकरण करना चाहते हैं? मैंने कुछ सोचने की कोशिश की, लेकिन यह वास्तव में कुछ प्रकार के तह होने के लिए समाप्त हो गया, और आपको फ़ेस को आवेदक से हैक में फ़ंक्शन खींचने के लिए '<*>' पर कॉल करना होगा। – HuStmpHrrr