2010-11-18 17 views
5

द्वारा मैं LYAH पढ़ रहा था। इसे कहते हैं मैं स्पष्ट रूप से Control.Monad.Instances लोड करने के लिए काम करने के लिए निम्न सिंटैक्स प्राप्त करने की आवश्यकता:क्यों नहीं (->) Control.Monad के साथ कार्यान्वित नहीं किया गया है। डिफ़ॉल्ट रूप से

((fmap (+5)) (+5)) 4 

कि क्यों है? क्यों मज़ेदार यह अंतर्निहित और एकीकृत तकनीक है, तो मुझे उस कार्यक्षमता को प्राप्त करने के लिए स्पष्ट रूप से Control.Monad.Instances लोड करना होगा। इसके बिना कार्यान्वित (->) कैसे है (या केवल छुपा हुआ है और केवल -> निर्यात किया गया है)? डिफ़ॉल्ट रूप से लागू फ़ंक्शन प्रकारों पर fmap का उपयोग क्यों नहीं किया जाता है?

+0

यह भी देखें http://stackoverflow.com/questions/4204086/is-the-monad-w-instance-anywhere- मानक –

उत्तर

10

यहां 3 अलग-अलग अवधारणाएं शामिल हैं। फ़ंक्शन प्रकार, फ़ंक्शन प्रकार श्रेणी, और फ़ंक्शन "उदाहरण"। फ़ंक्शन प्रकार, (->), भाषा में बनाया गया है और इसका अस्तित्व और कार्यान्वयन फंक्टर और एफएमएपी से पूरी तरह से असंबंधित है। प्रकार वर्ग इसके संबंधित तरीकों के हस्ताक्षर का विनिर्देश है। "उदाहरण" उस हस्ताक्षर का कार्यान्वयन है।

तो अपना प्रश्न स्पष्ट करने के लिए, मैं इसे फिर से वाक्यांश दूंगा "प्रीलूड में प्रदान किए गए फ़ंक्शन उदाहरण (->) क्यों नहीं है?" (प्रीलूड मॉड्यूल है जो डिफ़ॉल्ट रूप से दायरे में है)। चूंकि यह वर्तमान में phrased है, यह बहुत समझ में नहीं आता है।

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

2

फ़ैक्टर एक भाषा सुविधा नहीं है, यह केवल एक उपयोगी टाइपक्लास है जिसे यादृच्छिक मॉड्यूल परिभाषित करने के लिए होता है। उस मॉड्यूल की फ़ंक्शन के परिभाषा का उपयोग करने के लिए, आपको इसे लोड करना होगा, कहानी का अंत।

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