2017-01-21 7 views
5

विभिन्न संकुल की haddocks ब्राउज़िंग का एक उदाहरण सूची मैं अक्सर उदाहरण दस्तावेजों है कि इस तरह दिखना साथ आ (Control.Category) में मतलब है:क्या * करता है (तारा) या अन्य प्रकार के हेडेक

Category k (Coercion k) 
Category * (->) 

या इस (Control.Monad.Trans.Identity):

MonadTrans (IdentityT *) 

इस तरह के हस्ताक्षर का अर्थ वास्तव में क्या है? यह स्रोत में दिखाई नहीं देता है, लेकिन मैंने पहले ही देखा है कि ऐसा लगता है कि यह मॉड्यूल में होता है जो पॉलीकिंड्स एक्सटेंशन का उपयोग करता है। मुझे संदेह है कि यह शायद एक प्रकार के अनुप्रयोग की तरह है लेकिन एक तरह से। तो उदा। अंतिम उदाहरण का अर्थ है कि IdentityT एक मोनड ट्रांसफॉर्मर है यदि इसका पहला तर्क * है।

तो मेरी प्रश्न हैं:

  • मेरी व्याख्या सही है और वास्तव में क्या तरह हस्ताक्षर का उल्लेख करता है?
  • पहले Category उदाहरण में, मुझे कैसे पता होना चाहिए कि k एक प्रकार का है और एक प्रकार नहीं है? या क्या मुझे सिर्फ Category की धैर्य जाननी है?
  • इस वाक्यविन्यास के स्रोत कोड एनालॉग क्या है?

मैं प्रकारों की व्याख्या नहीं मांग रहा हूं।

उत्तर

4

To quote Richard Eisenberg’s recent post on the haskell-cafe mailing list:

हेडॉक कभी कभी संघर्ष -XPolyKinds सक्षम साथ प्रकार प्रस्तुत करना। समस्या यह है कि जीएचसी को आम तौर पर लिखित तर्कों की आवश्यकता नहीं होती है और यह उन्हें प्रिंट नहीं करता है (जब तक कि आप -fprint-explicit-kinds नहीं कहें)। लेकिन हैडॉक, मेरा मानना ​​है कि जब भी -XPolyKinds चालू होता है तो प्रिंट आउट करता है। तो दो अलग-अलग परिभाषा वास्तव में वही हैं: यह सिर्फ एक मॉड्यूल में -XPolyKinds है और दूसरा नहीं है।

* सामान्य प्रकारों का प्रकार है। तो Int दयालु * है (हम Int :: * लिखते हैं) जबकि Maybe में * -> * है। Typeable वास्तव में दयालु forall k. k -> Constraint है, जिसका अर्थ है कि यह पॉलीकिंड है। नीचे दिए गए पहले स्निपेट में, *Typeable पर तर्क k* के साथ तत्काल करता है, क्योंकि टाइप वैरिएबल में * है।

तो हाँ, जैसा कि आपने अनुमान लगाया है, इसे PolyKinds के साथ करना है। हैडॉक इन पॉली-प्रकार के प्रकारों को "स्पष्ट प्रकार के अनुप्रयोग" के साथ प्रस्तुत करता है। ऐसा ही होता है कि Category पॉली-किंडेड है, जिसमें forall k. (k -> k -> *) -> Constraint है, इसलिए हैडॉक प्रत्येक इंस्टेंस के साथ दयालु एप्लिकेशन प्रस्तुत करता है।

मेरी राय में, यह हैडॉक का एक बग या गलतफहमी है, क्योंकि जहां तक ​​मुझे पता है कि कोई समकक्ष स्रोत कोड एनालॉग नहीं है। यह उलझन में है, और मुझे यह समझने के बेहतर तरीके से नहीं पता कि यह आम तौर पर प्रकट होता है और संदर्भ से क्या हो रहा है इसका अनुमान लगाता है।

+2

सहमत हुए, मैं इसे एक बग भी मानता हूं। हो सकता है कि 'श्रेणी @k (जबरन के)' का उपयोग करना बेहतर संकेत होगा। – chi

+0

ऐसे मामले हैं जहां इसे प्रकार के प्रकारों को निर्दिष्ट करने की आवश्यकता है जो प्रकार में मौजूद नहीं हैं। यह संयोजन दस्तावेज के लिए एक रास्ता खोजने के लिए वास्तव में मुश्किल बनाता है। – Carl

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