आपको Control.Applicative
पैकेज से मुक्त करने के लिए स्थिर तीर कहा जाता है (कॉनोर मैकब्राइड एट अल द्वारा "प्रभाव के साथ आवेदक प्रोग्रामिंग" देखें) के उदाहरण प्राप्त होते हैं। इसलिए, आपके मामले में Char
में कोई भी स्रोत प्रकार, एक आवेदक उदाहरण को जन्म देता है जहां कोई अन्य प्रकार a
Char -> a
प्रकार से मैप किया गया है।
जब आप इनमें से किसी भी गठबंधन, एक मूल्य के x :: Char -> a
करने के लिए एक समारोह f :: Char -> a -> b
लागू कहते हैं, अर्थ है कि आप एक नया कार्य Char -> b
, जो दोनों f
और x
इसलिए की तरह में अपने तर्क फीड होगा, बनाने है
f <*> x = \c -> (f c) (x c)
इसलिए, के रूप में आप का कहना है, इस
isAlphaNum c = (isAlpha c) || (isNum c)
करने के लिए अपने उदाहरण बराबर मेरी राय में बना देता है, इस तरह के प्रयास हमेशा जरूरी नहीं है, और यह अच्छा लगेगा यदि हास्केल के पास आवेदकों के लिए बेहतर वाक्य रचनात्मक समर्थन था (शायद 2-स्तर की भाषाओं की तरह कुछ)।
'isAlphaNum' ==' (\ c-> ((||) .isAlpha) c (isNum c)) '==' (\ c-> isAlpha c || isNum c) '(... बस एक sidenote)। –