2013-10-09 8 views
5

मेरी समझ यह है कि हास्केल में मॉड्यूल के बिंदीदार वाक्यविन्यास डिस्क पर तार्किक संरचना का प्रतिनिधित्व करता है। तो, हम इस तरह की एक संरचना है यदि:"पेड़ ऊपर" हास्केल मॉड्यूल

Main.hs 
Foo/ 
    Bar.hs -- exports "Bar" 
    Quux.hs -- exports "Quux" 

... तो हमारी Main.hs, हम कर सकते हैं:

import Foo.Bar 
import Foo.Quux 

(मुझे लगता है कि हम केवल फाइल सिस्टम की पत्र-गांठ पर मॉड्यूल हो सकता है उदाहरण के लिए, उपरोक्त में, कोई तरीका नहीं है कि हम Foo मॉड्यूल भी प्राप्त कर सकें।)

इस उदाहरण में, हम पेड़ को पार कर रहे हैं। अगर हम ऊपर जाना चाहते हैं तो क्या होगा?

lib/ 
    SomeModule.hs 
    XYZ.hs 
src/ 
    Main.hs 

यही है, Main.hs में, हम SomeModule या XYZ कैसे आयात करूँ?

शायद यह Main के साथ एक आम घटना नहीं होगी, लेकिन अंतर-मॉड्यूल निर्भरताओं के बारे में क्या होगा? वे वैध रूप से "चचेरे भाई" नोड्स को संदर्भित करने की आवश्यकता हो सकती है।

+3

"शाखाओं" में मॉड्यूल होना बहुत आम है - बस उदा। अपनी '' 'foo /' '' dir – amindfv

+1

जैसी ही निर्देशिका में '' 'Foo.hs''' बनाएं, इसके अलावा, सटीक होने के लिए: मॉड्यूल के बिंदीदार वाक्यविन्यास जीएचसी * में डिस्क * पर तार्किक संरचना का प्रतिनिधित्व करता है। रिपोर्ट स्वयं डिस्क पर मॉड्यूल कैसे संग्रहीत की जाती है इसका कोई संकेत नहीं देता है, और प्रतिद्वंद्वी कार्यान्वयन अन्य चीजों को करने का विकल्प चुन सकता है - एक मेनिफेस्ट फ़ाइल है, डेटाबेस का उपयोग करें, क्लाउड में चीजें स्टोर करें ... –

उत्तर

7

बस मॉड्यूल के पूर्णतः योग्य नाम का उपयोग करें और जीएचसी को बताएं कि मॉड्यूल पदानुक्रम की रूट -i विकल्प के साथ कहां खोजें। आपके उदाहरण में, इसका मतलब है कि आपको import XYZ का उपयोग Main.hs में मॉड्यूल आयात करने के लिए और ghc -i../src --make Main.hs को अपने प्रोग्राम को संकलित करने के लिए करना चाहिए। यदि आपको पारस्परिक रूप से रिकर्सिव मॉड्यूल को संकलित करने की आवश्यकता है, तो जीएचसी मैनुअल के this section पर एक नज़र डालें।

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

Name: some-package 
Version: 1.0 
... 
Library 
    ... 
    Exposed-modules: XYZ 
    Hs-source-dirs: lib 
    ... 
Executable some-executable 
    ... 
    build-depends: some-package == 1.0 
    ... 
... 

यह विशेष रूप से उपयोगी है, तो अपने पैकेज के लिए एक परीक्षण या बेंचमार्क स्वीट में शामिल है, क्योंकि:

some-package.cabal 
lib/ 
    XYZ.hs 
src/ 
    Main.hs 

some-package.cabal फ़ाइल के प्रासंगिक भागों इस तरह दिखेगा: आप निम्नलिखित निर्देशिका संरचना होगा lib के तहत मॉड्यूल केवल एक बार संकलित किए जाएंगे।

इस तकनीक के a real-life example यहां है।

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