2012-10-02 9 views
7

क्या इंफिक्स ऑपरेटरों से निपटने के दौरान <$> और <*> के आवेदक उपयोग करने का कोई तरीका है? मुझे लगता है किइंफिक्स ऑपरेटरों के लिए आवेदक शैली?

((++) <$> a <*> ((++) <$> b <*> c)) 

तो

a ++ b ++ c 

तो मुझे आश्चर्य है कि एक अच्छे तरीका है अगर बहुत अधिक अव्यवस्था लग रहा है।

+3

यदि वे सभी एक ही ऑपरेटर हैं, तो आप 'फ़ोल्ड 1 (लिफ्टए 2 (++)) [ए, बी, सी]' का उपयोग कर सकते हैं। –

उत्तर

11
(<++>) = liftA2 (++) 
a <++> b <++> c 

या

liftA2 (++) a $ liftA2 (++) b c 
+2

yup - कोण ब्रैकेट की एक और जोड़ी जोड़ें। – AndrewC

6

देखें थॉमस डेवी के InfixApplicative पैकेज है, जो एक सामान्य वाक्यात्मक चाल प्रदान करता है न कि हर उठाने के लिए एक नया ऑपरेटर परिभाषित करने के लिए की तुलना में।

+2

प्रलेखन थोड़ा उलझन में है। मैं * सोचता हूं * ओपी का उदाहरण '<^(++)^> (बी <^(++)^> सी) के रूप में अनुवाद करेगा --- --- क्या आप पुष्टि/अस्वीकार कर सकते हैं? – dave4420

+0

मुझे सही लगता है। – Conal

3

SHE आप लिखते हैं

(|a ++ (|b ++ c|)|) 

कि यदि कोई फायदा नहीं है की सुविधा देता है। बेशक, प्रीप्रोकैसिंग परत शुरू करने के लिए कुछ ओवरहेड है।

संबंधित मुद्दे