this response से another question में, थोड़ा हास्केल कोड स्केच दिया गया था जो कमांड लाइन तर्कों पर वाक्यविन्यास जांच करने के लिए कुछ कोड को कारक करने के लिए रैपर फ़ंक्शंस का उपयोग करता है।मैं पैटर्न मिलान करने वाले कार्यों के लिए बॉयलरप्लेट कोड लिखने से कैसे बच सकता हूं?
takesSingleArg :: (String -> IO()) -> [String] -> IO()
takesSingleArg act [arg] = act arg
takesSingleArg _ _ = showUsageMessage
takesTwoArgs :: (String -> String -> IO()) -> [String] -> IO()
takesTwoArgs act [arg1, arg2] = act arg1 arg2
takesTwoArgs _ _ = showUsageMessage
एक तरह से (शायद Template Haskell का उपयोग कर?) तर्कों की प्रत्येक संख्या के लिए अतिरिक्त कार्यों लिखने के लिए होने से बचाने के वहाँ है: यहाँ कोड है जो मैं सरल करने के लिए कोशिश कर रहा हूँ का हिस्सा है? आदर्श रूप में, मैं की तरह कुछ (मैं इस वाक्य रचना ऊपर बना रहा हूं)
generateArgumentWrapper<2, showUsageMessage>
लिखने में सक्षम होना चाहते हैं और वह
\fn args -> case args of
[a, b] -> fn a b
_ -> showUsageMessage
आदर्श रूप में करने के लिए फैलता है, मैं भी के परिवर्तनशील हो सकता था generateArgumentWrapper
मेटा-कार्य करने के लिए तर्क, ताकि मैं
generateArgumentWrapper<2, asInt, asFilePath, showUsageMessage>
कर सकता है और वह
के लिए विस्तारितक्या कोई इसे प्राप्त करने के तरीके से अवगत है? मनमानी कार्यों के लिए कमांड लाइन तर्क ([String]
) को बांधना वास्तव में एक आसान तरीका होगा। या शायद एक पूरी तरह से अलग, बेहतर दृष्टिकोण है?
मानक लाइब्रेरी में टेक्स्ट.प्रिंटफ भी देखें, जो वही काम करता है, कम या ज्यादा। ध्यान दें कि तर्कों की गलत संख्या प्रदान करना एक रनटाइम त्रुटि है, एक प्रकार त्रुटि नहीं। –