2013-10-20 8 views
9

बहुत बुनियादी प्रश्न के लिए खेद है: जीएचसीआई में, import Library.Name और :m +Library.Name के बीच कोई अंतर है? वे बराबर लगते हैं, लेकिन मुझे लगता है कि वैकल्पिक वाक्यविन्यास का एक कारण है।हास्केल लाइब्रेरी आयात वाक्यविन्यास

उत्तर

6

आप स्रोत कोड में import शामिल करेंगे, जो अधिक सामान्य है, जबकि :m एक ghci-specific कमांड (सुविधा के लिए) है।

आप एकाधिक मॉड्यूल लोड करने के लिए ghci> :m + Module1 ... ModuleN का उपयोग कर सकते हैं। मॉड्यूल को अनलोड करने के लिए + के बजाय - का उपयोग करें। क्योंकि ghci इंटरैक्टिव है, मैं :m तक चिपक जाता हूं, जब तक कि आपका वर्कफ़्लो न हो: अपनी .hs फ़ाइल संपादित करें, इसे सहेजें, और इसे पुनः लोड करें। फिर import अधिक उपयुक्त होगा (और इसमें अधिक सुविधाएं हैं जैसे qualified imports)।

import निर्देश भी काम करेगा यदि आप बाद में उदाहरण के लिए ghc का उपयोग करके प्रोग्राम को संकलित करने का निर्णय लेते हैं। आप चुनिंदा केवल विशिष्ट कार्यों को आयात कर सकते हैं: import Data.List (sort) केवल क्रमबद्ध आयात करेगा, इसलिए नामस्थान को कम प्रदूषित किया जाता है।

+1

तो है: एम बस संक्षेप में? – planarian

+0

यह मेरे लिए होता है कि: एम आयात किए जाने के बाद पुस्तकालयों के * हटाने * को भी अनुमति देता है। – planarian

+0

हां, यदि आप '+' – jev

9

आप सही है कि import Module और :module + Module समान हैं कर रहे हैं, लेकिन वहाँ :module (इसके बाद से संक्षिप्त :m) वाक्य रचना के लिए कुछ कारण हैं।

  1. यह पुराना है। जीएचसीआई वास्तव में IOdo ब्लॉक के अंदर ही होता था; अब यह भाषा के हर हिस्से का समर्थन करता है, इसलिए हम import एस कर सकते हैं। (यह GHCi 6.6.x didn't support import, लेकिन GHCi 6.8.1 did तरह लग रहा है, हम GHCi 7.4.1 जब तक उच्च-स्तरीय घोषणाओं के लिए पूरा समर्थन नहीं मिला।)

  2. यह आप एक साथ कई मॉड्यूल आयात करने देता है। :m + M1 M2 M3import M1, import M2, और import M3 प्रत्येक नई लाइन पर लिखने जैसा ही है।

  3. यह आपको मॉड्यूल को आयात करने देता है: :m - M वर्तमान में प्रॉम्प्ट पर मौजूद होने वाले M की सामग्री को हटा देगा।

  4. यह आपको एक व्याख्याित मॉड्यूल आयात करने देता है ताकि आप पूरे स्कोप देख सकें। यह तब होता है जब आप :load File.hs; आप पाते हैं कि आप मॉड्यूल *File में हैं, और उदा। सब कुछ देखें जो File आयात और यहां तक ​​कि वह सब कुछ जो निर्यात नहीं करता है। यदि आपके पास एक व्याख्याित मॉड्यूल MI लोड किया गया है, तो आप M1 और M2 को सामान्य तरीके से दायरे में लाने के लिए :m + M1 *MI M3 का उपयोग कर सकते हैं, और MI को विशेष तरीके से दायरे में डाल सकते हैं।

    1. योग्य आयात:

    पूर्णता के लिए, हालांकि, import वाक्य रचना हमें तीन चीजें हैं जो :m नहीं की पेशकश करता है। import qualified Data.Map as M करने में सक्षम होने के लिए यह बहुत अच्छा है और का उपयोग Data.Map.lookup करने या अस्पष्टता त्रुटियों को भुगतने के लिए करें। (ध्यान दें कि स्थापित हर पैकेज जीएचसीआई में पूरी तरह से योग्य है, इसलिए import qualified Module अकेले आपको कुछ भी नहीं खरीदता है।)

  5. आयात सूचियां। यहां तक ​​कि यदि मेरे पास Data.Map से M के साथ योग्यता है, तो भी मैं टाइप को अयोग्यता में लाने के लिए import Data.Map (Map) कर सकता हूं।

  6. आयात hiding। उपरोक्त के विपरीत; शायद मैं अपना खुद का सॉर्टिंग दिनचर्या लिख ​​रहा हूं, इसलिए मैं import Data.List hiding (sort) कर सकता हूं।

आप §2.4.5, "What's really in scope at the prompt?", in the GHC (7.6) user's guide भी देख सकते हैं।

+0

के बजाय '-' का उपयोग करते हैं तो पूरी तरह से उत्तर के लिए धन्यवाद; अगर मैंने पहले से ही "हल" धागा चिह्नित नहीं किया था, तो मैंने इसे चुना होगा। – planarian

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