2012-04-18 10 views
5

में नेस्टेड यूएनपीएक्स मैं अक्सर टुपल्स में कई मान इकट्ठा करता हूं, क्योंकि मैं ट्यूपल्स को इसके लिए प्राकृतिक प्रकार मानता हूं। हालांकि, tuples सख्त नहीं हैं। तोजीएचसी

data A 

data B = 
    B !A 

data C = 
    C !(B, B) 

data D = 
    D !B !B 

पर विचार -funbox-strict-fields और अनुकूलन के साथ, unpacks नेस्टेड रहते हैं। क्या C में tuple C A A में D, या बस C B B के साथ अनपॅक किया जाएगा? यहां जीएचसी-डॉक्टर में एक संदर्भ है: 7.16. Pragmas

(प्रकार प्रकार-निर्माता ये हैं गैर खाली tuples?)

उत्तर

6

पर विचार करें:

data B = B !Int 

data C = C !(B, B) 

data D = D !B !B 

b0 = B 7 
b1 = B 4 

c = C (b0, b1) 

d = D b0 b1 

जहां

data (,) a b = (a,b) 

GHC खुशी से नेस्ट मिटा देगा, सख्त कंस्ट्रक्टर्स (!B), और यह सी को अपने पहले क्षेत्र में सख्त कर देगा, अनुकूलित करने के लिए:

b0 = B 7 
b1 = B 4 

c = C b0 b1 

d = D 7 4 

हालांकि, महत्वपूर्ण बात यह है कि (,) के क्षेत्र स्वयं सख्त नहीं हैं - इसलिए जीएचसी उन्हें अनपैक नहीं कर सकता है। इसके अलावा, वे बहुरूप हैं, इसलिए यदि वे सख्त हैं तो भी उन्हें अनपैक नहीं किया जा सकता है।

सख्त tuples का उपयोग करने के लिए पहले भाग के लिए एक काम है। दूसरे भाग के लिए कामकाज self-specializing tuples (उदाहरण के लिए परिवारों को टाइप करें जो टुपल्स विशेषज्ञ हैं) का उपयोग करना है।


नोट इस शैली में वाक्य रचना के लिए tuples का उपयोग कर भूमि के ऊपर पड़ता है कि - वे कहते हैं कि दूर अनुकूलित किया जाना चाहिए अविवेक का एक स्तर परिचय। इस तरह, यह कुछ हद तक unidiomatic है।

+0

मैंने अपने प्रश्न में एक त्रुटि तय की: डेटा बी डेटा बी = बी होना चाहिए! ए। तो सी में मुझे अपने स्वयं के विशेष प्रकार का उपयोग करना चाहिए, जिसमें टुपल की जगह सख्त फ़ील्ड हैं? मुझे आशा थी कि जीएचसी टुपल खोजने के बाद अनपॅक करना जारी रखेगा, इसलिए मुझे प्रत्येक क्षेत्र के लिए बहुत से विशेष डेटाटाइप लिखने की जरूरत नहीं है। (लेकिन, चूंकि मैं tuples में मूल्य इकट्ठा करता हूं, मेरे पास शायद मूल्यों के सेट का कुछ अमूर्त विचार है, इसलिए मुझे शायद एक विशेष संस्करण का उपयोग करना चाहिए ...) – telephone

+0

यदि ट्यूपल्स पॉलिमॉर्फिक नहीं होते हैं। मैंने पहले इस समस्या के बारे में लिखा है: http://donsbot.wordpress.com/2009/10/11/self-optimizing-data- संरचनाएं-using-types-to-make-lists-faster/ –

+0

जैसा कि मैंने देखा जीएचसी-डॉक्टर में उदाहरण, डेटाटाइप में सख्त क्षेत्र के रूप में उपयोग की जाने वाली एक जोड़ी चपटा हो जाएगी। – telephone

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