2017-02-13 7 views
7

Data.ByteString.Internal में, ByteString निर्माताडबल विस्मयादिबोधक का उपयोग क्या है?

PS !!(ForeignPtr Word8) !!Int !!Int 

इन डबल विस्मय यहाँ क्या मतलब है है? मैंने खोज की और बस यह पाया कि (!!) किसी सूची को सूचीबद्ध करने के लिए इस्तेमाल किया जा सकता है (!!) :: [a] -> Int -> a

+0

यह आमतौर पर के लिए * सख्त * मूल्यांकन तो ऑपरेंड (* आलसी मूल्यांकन * की तुलना में) प्रयोग किया जाता है समारोह कहा जाता है से पहले मूल्यांकन किया जाता है। –

+0

@ विलेममैन ओन्सेम, मुझे याद है कि एक विस्मयादिबोधक चिह्न (!) ऑपरेंड को सख्त बना सकता है, क्या डबल विस्मयादिबोधक समान होता है? – hliu

+1

http://hackage.haskell.org/package/bytestring-0.10.8.1/docs/src/Data-ByteString-Internal.html#ByteString - आपने अपना कोड कहां देखा? – melpomene

उत्तर

7

यह वास्तविक हास्केल स्रोत का हिस्सा नहीं है, लेकिन हैडॉक कैसे अनबॉक्स किए गए डेटा प्रकारों को प्रस्तुत करता है, इसकी एक (अनियंत्रित) विशेषता है। https://mail.haskell.org/pipermail/haskell-cafe/2009-January/054135.html देखें:

2009/1/21 स्टीफ़न Friedrichs < ...>:

हाय,

का उपयोग कर हेडेक-2.4.1 और इस फ़ाइल:

module Test where 

data Test 
    = NonStrict Int 
    | Strict !Int 
    | UnpackedStrict {-# UNPACK #-} !Int 

जेनरेट किए गए दस्तावेज़ इस तरह दिखते हैं :

data Test 
Constructors 
NonStrict Int 
Strict !Int 
UnpackedStrict !!Int 

डबल '!' नोट करें अंतिम निर्माता में। यह व्यवहार का इरादा नहीं है, है ना?

जीएचसी सुंदर प्रिंट अनबॉक्टेड प्रकारों का तरीका है, इसलिए मैंने सोचा कि हैडॉक को उसी सम्मेलन का पालन करना चाहिए। हम्म, शायद Haddock को उसके दस्तावेज़ में भाषा एक्सटेंशन के बारे में अध्याय होना चाहिए, जीएचसी दस्तावेज़ीकरण के संदर्भ में। इस तरह इस्तेमाल की जाने वाली भाषा कम से कम दस्तावेज पर है। यकीन नहीं है कि यह इस मामले में मदद करता है, हालांकि "!!" शायद वहां दस्तावेज नहीं है।

शायद हमें एक कार्यान्वयन विस्तार के बाद से अनबॉक्स एनोटेशन प्रदर्शित नहीं करना चाहिए, है ना? हम एक "!" प्रदर्शित कर सकते हैं इसके बजाए, इंगित करता है कि तर्क सख्त है।

डेविड

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