QuickCheck Manual पढ़ते समय, मैं निम्न उदाहरण भर में आया था:'कहां' में घोषणाएं - क्या चल रहा है?
गुण monomorphic प्रकार होना चाहिए:
prop_RevRev xs = reverse (reverse xs) == xs where types = xs::[Int]
पुस्तिका पर कहने के लिए चला जाता है। `पॉलिमॉर्फिक 'गुण, जैसे उपर्युक्त, परीक्षण के लिए उपयोग किए जाने वाले किसी विशेष प्रकार तक सीमित होना चाहिए। यह एक
में एक या अधिक तर्क के प्रकार कहते हुए कि ऐसा करने के लिए सुविधाजनक है जहां प्रकार = (x1 :: t1, x2 :: t2, ...)
खंड। ध्यान दें कि प्रकार एक कीवर्ड नहीं है; यह सिर्फ एक स्थानीय घोषणा है जो x1, x2 आदि के प्रकारों को प्रतिबंधित करने के लिए एक सुविधाजनक स्थान प्रदान करता है
मैंने पहले कभी हास्केल में ऐसी चाल नहीं देखी है। यहां मुझे वास्तव में समस्याएं हैं:
टाइप घोषणाओं के लिए यह वाक्यविन्यास क्यों मौजूद है? यह मेरे लिए क्या कर सकता है कि निम्नलिखित नहीं कर सका?
prop_RevRev :: [Int] -> Bool prop_RevRev xs = reverse (reverse xs) == xs
where
के इस प्रयोग का गठन प्रकार घोषणाओं के लिए 'विशेष' वाक्य रचना है? या यह लगातार और तार्किक है (और यदि हां, तो कैसे?)?क्या यह उपयोग मानक या पारंपरिक हास्केल है?
मैं इस बारे में लंबे समय तक सोच रहा था। धन्यवाद। – sykora
@ मैटफ़ेनविक: आप किसी भी स्तर पर किसी उप-अभिव्यक्ति के लिए एक प्रकार की एनोटेशन जोड़ सकते हैं, इसलिए यह चाल तब उपयोगी होती है जब आप पूर्ण प्रकार के हस्ताक्षर निर्दिष्ट किए बिना संकलक को अनुमान लगाने में असमर्थ थे। हालांकि, उन्हें अभी भी सुसंगत होना चाहिए, उदा। '(x :: फ्लोट) + (x :: Int) 'परिणामस्वरूप एक प्रकार की त्रुटि होगी। – hammar
इसलिए मूल रूप से 'टाइप' या' प्रकार' एक डमी चर है जिसका उपयोग नहीं किया जाता है; केवल अन्य अभिव्यक्ति – newacct