2015-01-17 10 views
5

मुझे निम्न श्रेणी का उदाहरण मिला है: (Monad m, (~) * a()) => LaTeXC (LaTeXT m a), लेकिन इसके संदर्भ को समझ में नहीं आता है।इस संदर्भ का क्या अर्थ है: (मोनाड एम, (~) * ए())?

(~) * a() का क्या अर्थ है? मैं इसके बारे में कहां पढ़ सकता हूं?

उत्तर

6

(~) प्रकार स्तरीय समानता (आप इसे = या == किसी भिन्न रूप के रूप में लिख सकता है, लेकिन राय है कि इस अंकन पहले से ही काफी अलग अलग अर्थ है कि एक और शुरू करने भ्रामक होगा था) है। * प्रकारों का प्रकार है। तो (~) * यह दावा है कि दो (रहने योग्य) प्रकार बराबर हैं। दूसरे शब्दों में, उदाहरण भी इस तरह लिखा जा सकता है:

instance Monad m => LaTeXC (LaTeXT m()) 

ऐसा क्यों नहीं था? खैर, यह अनुमान का सवाल है। जिस तरह से लिखा गया था, संकलक इस उदाहरण को चुनता है, भले ही यह (अभी तक) नहीं जानता कि LaTeXT पर अंतिम तर्क () है, तो उसमें बल दिया गया है, जबकि प्रस्तावित वैकल्पिक उदाहरण केवल शिकायत करेगा।

+3

मैंने कभी भी इस लिखित इंफिक्स को 'a ~() 'के रूप में देखा है और कल्पना करें कि उपसर्ग संस्करण' (~) a() 'होगा। किस प्रकार '*' इसमें आते हैं? [समानता बाधाओं] के लिए प्रलेखन में इसका उल्लेख नहीं किया गया है (https://downloads.haskell.org/~ghc/7.8.4/docs/html/users_guide/equality-constraints.html)। – Cirdec

+5

@Cirdec हां, यह दुर्भाग्यपूर्ण है, लेकिन जीएचसी दयालु विशिष्ट '~' के लिए उपयोगकर्ता-स्तरीय वाक्यविन्यास का पर्दाफाश नहीं करता है। हालांकि, इसकी आंतरिक भाषा में, ~ ~ 'एक दयालु तर्क लेता है (और इसलिए जब उपयोग की जाने वाली जरूरतों को एक प्रकार पर लागू किया जाना चाहिए)। इन प्रकारों को दयालु अनुमान से सम्मिलित किया जाता है, इसी तरह हास्केल के निहित 'फोल' को टाइप-पॉलिमॉर्फिज्म में परिवर्तित किया जाता है और टाइप अनुमान के आधार पर आवेदन को स्पष्ट रूप से टाइप किया जाता है। प्रिंटिंग के दौरान अंतर्निहित प्रकार को पट्टी करने के लिए जीएचसी इस बारे में पर्याप्त जानता है, लेकिन हैडॉक स्ट्रिपिंग नहीं करता है। –

+1

यह मेरे प्रश्न का पूरी तरह उत्तर देता है, धन्यवाद! मैंने इसे केवल 'ए ~()' के रूप में भी देखा है और यह भी कल्पना नहीं कर सका कि ~ ~ एक दयालु तर्क लेता है। –

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