2012-01-18 11 views
28

मैं सिर्फ हास्केल कोड का एक टुकड़ा में निम्न सिंटैक्स भर में भाग गया -यह हैकेल वाक्यविन्यास क्या है?

data A = A Int Int | B 

m :: A -> Int 
m a = case a of 
    A{} -> 1 
    _ -> 2 

A{} यहाँ क्या कर रहा है? क्या {} स्वचालित रूप से किसी भी संख्या के तर्क के लिए मेल खाता है?

मुझे लगता है कि इस तथ्य यह है कि हास्केल रिकॉर्ड वाक्य रचना कार्यों का एक समूह और एक नियमित बीजीय डाटाटाइप को desugars का शोषण कर रहा है। क्या यह मामला है?

+5

कुछ नया हर दिन के लिए जानें, और अब मैं 5 साल के लिए हास्केल प्रोग्रामिंग किया गया है; मेरे जीवन में वाक्यविन्यास कभी नहीं देखा। –

उत्तर

28

हां, A{}A कन्स्ट्रक्टर के साथ बनाए गए किसी भी मूल्य से मेल खाता है, भले ही इस प्रकार को रिकॉर्ड सिंटैक्स के साथ घोषित किया गया हो या नहीं।

language report निर्दिष्ट करता

अभिव्यक्ति एफ {}, जहां एफ एक डेटा निर्माता है, कानूनी है या नहीं, एफ के साथ रिकॉर्ड वाक्य रचना (बशर्ते एफ कोई सख्त खाने हैं घोषित किया गया था - चौथी गोली ऊपर देखें); यह एफ अर्थ है ⊥1 ... ⊥n, जहां n एफ की arity है

कोष्टक में उल्लेख किया 'चौथे बुलेट' कहा गया है कि यह जो एक सख्त को छोड़ देता है रिकॉर्ड वाक्य रचना के साथ एक मूल्य के निर्माण के लिए एक स्थिर त्रुटि है खेत।

और pattern matching पर अनुभाग में, पैटर्न के लिए व्याकरण के नियमों में से एक

apat -> qcon { fpat1 , … , fpatk }  (labeled pattern, k ≥ 0) 

है और शब्दों को

के रूप में पैटर्न मिलान (3.17.3) की औपचारिक अर्थ विज्ञान पर उपधारा में दिए गए हैं
(o) case v of { K {} -> e ; _ -> e′ } 
     = case v of { 
      K _… _ -> e ; _ -> e′ } 
+3

इस वाक्य रचना, उपयोगी है, क्योंकि भले ही निर्माता 'A' परिवर्तन करने के लिए तर्क की संख्या, समारोह परिभाषा बदलने की जरूरत नहीं है। नियमित पैटर्न मिलान के साथ (उदा। 'ए _ _ -> ...') यह मामला नहीं होगा। –

+0

@Daniel - अभी तक इस मामले में हम भाव है, लेकिन पैटर्न के नहीं बोल रहे हैं। मुझे लगता है कि 'एफ {}' 'एफ के बराबर होना चाहिए _1 _2 ... _n'where * n * निर्माता की arity है। – Ingo

+0

@ इंगो राइट। केवल 'अनौपचारिक अर्थ विज्ञान' अनुभाग कल रात को देखा, वहाँ कुछ भी नहीं मिला है, लेकिन अभिव्यक्ति भाग जाता था। नींद के कुछ घंटों के बाद इसे औपचारिक अर्थशास्त्र अनुभाग में मिला। –

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