मान लीजिए कि एक पुस्तकालय मॉड्यूल Foo
जो मेरे नियंत्रण में नहीं है है:नियंत्रण दस्तावेज के प्रकार के हस्ताक्षर फिर से निर्यात समारोह
module Foo (Foo, thing) where
data Foo = Foo Int
thing :: Foo
thing = Foo 3
अब मान लीजिए कि मैं अपने खुद के पुस्तकालय मॉड्यूल है, जो Foo
से-निर्यात फिर से thing
है मॉड्यूल।
module Bar (Foo.thing, getBar) where
import qualified Foo
type Bar = Foo.Foo
getBar :: Bar -> Int
getBar (Foo i) = i
संगतता कारणों के लिए, मैं नहीं एक अलग thing
निर्यात करना चाहते हैं। मैं यह सुनिश्चित करना चाहता हूं कि मैं Foo.thing
निर्यात करता हूं, ताकि उपयोगकर्ता Foo
और Bar
मॉड्यूल दोनों आयात करता है, तो उन्हें एक ही thing
मिल जाएगा और नाम टकराव नहीं होगा।
अब मान लें कि हमारे पास एक तीसरा मॉड्यूल है जो Bar
का उपयोग करता है।
module Main where
import Bar
चलिए तीसरे को ghci में लोड करते हैं।
[1 of 3] Compiling Foo (Foo.hs, interpreted)
[2 of 3] Compiling Bar (Bar.hs, interpreted)
[3 of 3] Compiling Main (test.hs, interpreted)
Ok, modules loaded: Main, Bar, Foo.
ghci> :t thing
thing :: Foo.Foo
ghci> :t getBar
getBar :: Bar -> Int
ghci> getBar thing
3
ghci> :info Bar
type Bar = Foo.Foo -- Defined at Bar.hs:3:6-8
GHCi और haddocks का संकेत मॉड्यूल
Bar
में
thing
टाइप
Foo.Foo
है कि करने के बजाय
, मैं इसे राज्य के लिए thing
टाइप Bar
है कि चाहते हैं। क्या यह अलग-अलग thing
निर्यात किए बिना ऐसा करने का कोई तरीका है?
रुको, यदि उपयोगकर्ता दोनों मॉड्यूल आयात करता है तो क्या कोई संघर्ष नहीं होगा? –
@GabrielGonzalez तीसरे फ़ाइल में 'आयात Foo' जोड़ने का प्रयास करें, और अपने लिए देखें! (दोनों एक ही * 'चीज 'निर्यात करते समय एक संघर्ष नहीं है।) अगर दोनों आयात किए जाते हैं, तो मैं अभी भी' फू 'पर' बार 'पसंद करने के लिए ghci को बताना चाहता हूं। –
वाह! यह सुविधा कितनी देर तक उपलब्ध है!?!? यह सब कुछ बदलता है। –