क्या साधारण फ़ंक्शन संरचना के लिए "नोटेशन" वाक्य रचनात्मक चीनी है?फंक्शन संरचना नोटेशन
(यानी (.) :: (b -> c) -> (a -> b) -> a -> c
)
मैं बाद में करने के लिए कुछ रचनाओं के परिणाम स्टोर करने के लिए सक्षम होने के लिए चाहते हैं (जबकि अभी भी श्रृंखला जारी है।
मैं नहीं बल्कि यदि संभव हो तो RebindableSyntax एक्सटेंशन का उपयोग नहीं चाहते हैं।
मैं कुछ इस तरह की तलाश में हूँ:
composed :: [String] -> [String]
composed = do
fmap (++ "!!!")
maxLength <- maximum . fmap length
filter ((== maxLength) . length)
composed ["alice", "bob", "david"]
-- outputs: ["alice!!!", "david!!!"]
मैं इस तरह नहीं यकीन है कि कुछ संभव है, रेस के बाद से पहले के कार्य के अंत में अनिवार्य रूप से अधिकतम लम्बाई के बंधन के माध्यम से "गुजरना" होता है, लेकिन मैं किसी भी अन्य समान अभिव्यक्ति विकल्पों की सुनवाई के लिए खुला हूं। मूल रूप से मुझे जानकारी एकत्र करने की आवश्यकता होती है क्योंकि मैं इसे बाद में उपयोग करने के लिए संरचना के माध्यम से जाता हूं।
शायद मैं ऐसा कुछ राज्य मोनड के साथ कर सकता हूं?
आपकी मदद के लिए धन्यवाद!
संपादित
बात इस तरह की थोड़े काम करता है: जैसे कि तीर हैं कुछ प्राप्त करने के लिए
split :: (a -> b) -> (b -> a -> c) -> a -> c
split ab bac a = bac (ab a) a
composed :: [String] -> [String]
composed = do
fmap (++ "!!!")
split
(maximum . fmap length)
(\maxLength -> (filter ((== maxLength) . length)))
कृपया क्या रचना आप वास्तव में यहाँ प्राप्त करने के लिए कोशिश कर रहे हैं निर्दिष्ट करें। कम से कम, उस प्रकार के हस्ताक्षर दें जिसे आप 'रचित' के लिए चाहते हैं! – leftaroundabout
बस सामान्य फ़ंक्शन संरचना, लेकिन बाद के फ़ंक्शन कॉल में उपयोग के लिए अंतरालीय परिणामों को स्टोर करने की क्षमता के साथ (उदाहरण देखें)। मैंने टाइप जोड़ा। –
क्या कोई कारण है कि आपको इसे पॉइंट-फ्री शैली में लिखना होगा? यह गैर-बिंदु-मुक्त शैली में आसान होना चाहिए। – immibis