यह अच्छी तरह से ज्ञात है कि Monad
उदाहरणों को मोनाड कानूनों का पालन करना चाहिए। यह शायद कम ज्ञात है कि Functor
उदाहरणों को फंक्टर कानूनों का पालन करना चाहिए। फिर भी, मुझे एक जीएचसी पुनर्लेखन नियम लिखने में काफी आत्मविश्वास महसूस होगा जो fmap id == id
को अनुकूलित करता है।मानक हास्केल प्रकार के वर्गों को बनाए रखने की अपेक्षा रखने वाले कानून क्या हैं?
अन्य मानक वर्गों के पास कानून क्या हैं? (==)
एक असली समकक्ष संबंध होना चाहिए? क्या Ord
को आंशिक क्रम बनाना है? कुल आदेश? क्या हम कम से कम यह संक्रमित मान सकते हैं? विरोधी सममित?
ये अंतिम कुछ हास्केल 2010 की रिपोर्ट में निर्दिष्ट नहीं दिखते हैं और न ही मुझे विश्वास है कि वे लिखने के नियमों को पुनः लिखने के नियमों को फिर से लिखेंगे। क्या कोई सामान्य पुस्तकालय है जो करते हैं? एक उदाहरण कितना रोगजनक आत्मविश्वास से लिख सकता है?
आखिरकार, यह मानते हुए कि इस तरह के एक उदाहरण के लिए एक मानक, व्यापक संसाधन है कि प्रत्येक प्रकार के वर्ग उदाहरण को बनाए रखने के लिए एक मानक, व्यापक संसाधन हो सकता है?
उदाहरण के लिए, कितना मुसीबत मैं में
newtype Doh = Doh Bool
instance Eq Doh where a == (Doh b) = b
परिभाषित करने के लिए यह महज समझना कठिन है या होगा होगा संकलक का अनुकूलन गलत तरीके से कहीं भी?
ध्यान दें कि बहुत से समझदार ध्वनि वाले कानून (मौजूदा कोड द्वारा स्पष्ट रूप से ग्रहण किए गए समेत) एक व्यक्ति 'ऑर्ड', 'न्यू' के लिए प्रस्तावित कर सकता है, और संबंधित वर्गों का उल्लंघन ' फ़्लोट 'और' डबल '। उदाहरण के लिए, 'डेटा.मैप' में एक महत्वपूर्ण ब्रेक लुकअप के रूप में NaN का उपयोग करके और सटीक समस्याओं का अर्थ है कि फ़्लोटिंग पॉइंट एडिशन सहयोगी नहीं है। –
@ सीए.एमसीकैन जिसका मतलब है कि प्रलोभन के उदाहरण हैं कि इसे नहीं करना चाहिए! 'फ्लोट' और 'डबल' 'Eq' –
@ फिलिपजेएफ के सदस्य नहीं होना चाहिए: एक तरफ, मैं सहमत हूं। लेकिन उनका 'न्यू' उदाहरण थोड़ा बेहतर है, और इसके तार्किक निष्कर्ष पर तर्क की उस पंक्ति के बाद प्रत्येक इंस्टेंस को हटाने की ओर जाता है जो फ्लोटिंग पॉइंट प्रकारों को व्यावहारिक रूप से उपयोगी बना देता है। संयोग से, [मैं कैसे टूट उनके 'Ord' उदाहरण एक पुराने पोस्ट में है का एक प्रदर्शन दे दी है।] (Http://stackoverflow.com/a/6399798/157360) –