हम फ़ंक्शन परिभाषाओं के लिए प्रकार समानार्थी का उपयोग कर सकते हैं, उदा।एक नए प्रकार के डेटा कन्स्ट्रक्टर में फ़ंक्शन परिभाषा का उदाहरण
type FuncDef = Int -> Int -> Int
यह हर बार लंबी फ़ंक्शन परिभाषा लिखने से बचाता है।
उपयोग:
someFunc :: FuncDef -> Int
बजाय
someFunc :: (Int -> Int -> Int) -> Int
जो अधिक पठनीय और कम कोड के रूप में अच्छी तरह से है।
सरल बीजगणितीय डेटा प्रकार सीधे आगे और पैटर्न मिलान आदि करने में आसान हैं, उदाहरण के लिए
data AType = X | Y | Z Int
matchType :: AType -> Bool
matchType X = ..
matchType Y = ..
matchType (Z _) = ..
जैसा कि मैंने हास्केल डेटा प्रकार में और अधिक लग रही है, मैंने पाया हम डेटा निर्माता में समारोह परिभाषा हो सकती है जब नए प्रकार को परिभाषित।
data MyType a b = X | Y (a -> b)
यह मुझे थोड़ा सा पहेली करता है और इस के आसपास के कई उदाहरण नहीं देखे हैं। एक तरह से, उच्च-आदेश फ़ंक्शन का विचार जहां कोई फ़ंक्शन तर्क के रूप में कोई अन्य कार्य ले सकता है, इस स्थिति के समान है, सिवाय इसके कि यह डेटा प्रकार पर लागू होता है। हास्केल विकी "उच्च-आदेश डेटा प्रकार परिभाषा" के बारे में बहुत कुछ नहीं कहता है। मुझे एहसास है कि मुझे इन सभी शर्तों को गलत हो रहा है, इसलिए कृपया मुझे सही करें, और मुझे और पढ़ने के लिए इंगित करें। मैं वास्तव में इसका ठोस उपयोग देखना चाहता हूं। धन्यवाद!
matchMyType :: (MyType a b) -> Bool
matchMyType X = ..
matchMyType Y ?? = ..
मुझे लगता है कि आप बहुत चिंता कर सकते हैं! जैसा कि आप कहते हैं, कार्यों को तर्क के रूप में पारित किया जा सकता है। ऐसा इसलिए है क्योंकि फ़ंक्शंस किसी भी अन्य मूल्य से स्वाभाविक रूप से अलग नहीं हैं। आप उन्हें डेटा प्रकार में डाल सकते हैं और उन्हें पैटर्न मिलान से निकाल सकते हैं। वास्तव में यह सब कुछ है। –
धन्यवाद +1, यह बिल्कुल समझ में आता है कि आपने क्या कहा था। क्या आप मुझे एक उदाहरण दे सकते हैं जहां मैं केवल मूल्यों की बजाय डेटा संरचना में फ़ंक्शन डालना चाहता हूं। एक पेड़ में पूर्णांक? – vis
खैर, अधिकांश व्यावहारिक उपयोग मैं डेटा प्रकारों के कार्यों के बारे में सोच सकता हूं जो अधिक जटिल हैं और संभवतः इस मुद्दे से विचलित हो जाएंगे। यदि आप एक सामान्य उदाहरण चाहते हैं, तो डेव 4420 का जवाब ठीक होगा। यदि आप सोचने के लिए कुछ और चुनौतीपूर्ण चाहते हैं, तो अनिवार्य उदाहरण शायद [राज्य मोनैड ट्रांसफार्मर] है (http://hackage.haskell.org/packages/archive/transformers/latest/doc/html/Control-Monad-trans-State -Lazy.html # छ: 2)। –