2012-10-27 43 views
14

{-# UNPACK #-} प्रज्ञा अनावश्यक रचनाकारों को खत्म करने के लिए संकलक को बताती है। का हवाला देते हुए Haskell wiki:पॉलिमॉर्फिज्म के साथ सख्त फ़ील्ड कैसे अनपॅक करते हैं?

उदाहरण के लिए, यह देखते हुए इस:

data T = T {-# UNPACK #-} !(Int,Float) 

GHC प्रकार टी इस तरह का प्रतिनिधित्व करेंगे:

data T = T Int Float 

टपल को नष्ट करने। यह भी काम करता है,

data T = T {-# UNPACK #-} !Int 

data T = T Int# 

मैं सोच रहा था के रूप में प्रतिनिधित्व किया जाएगा जब क्षेत्र अनपैक किया जा करने के लिए बहुरूपी है: यह आमतौर पर अनबॉक्स्ड Ints एक निर्माता में सीधे डाल करने के लिए प्रयोग किया जाता है ? उदाहरण के लिए, अगर मैं परिभाषित

data S' a = S String {-# UNPACK #-} !a 

type S1  = S' Int 
newtype S2 = S2 (S' Int) 

कार्यों कि S1 या S2 के साथ काम अनुकूलित किया जाएगा?

उत्तर

11

खोल

यह बहुरूपी क्षेत्रों के लिए कोई मतलब नहीं है, क्योंकि वे चर आकार है, और संकलक (बहुत विशिष्ट परिस्थितियों को छोड़कर) नहीं है क्या प्रकार के बारे में जानकारी के लिए उपयोग के बारे में डॉन की blog से हवाला देते हुए उपयोग में हैं।

इसके अलावा आप मेलिंग सूची में टिबेल के reply पढ़ सकते हैं।

दुर्भाग्य से unpacking के बहुरूपी क्षेत्रों (GHC सिर इस बारे में चेतावनी दी है चाहिए में अप्रभावी खोल pragmas के लिए नए चेतावनी) के लिए काम नहीं करता है ...