2012-08-24 12 views
5

मान लीजिए कि एक पुस्तकालय मॉड्यूल 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 निर्यात किए बिना ऐसा करने का कोई तरीका है?

+0

रुको, यदि उपयोगकर्ता दोनों मॉड्यूल आयात करता है तो क्या कोई संघर्ष नहीं होगा? –

+0

@GabrielGonzalez तीसरे फ़ाइल में 'आयात Foo' जोड़ने का प्रयास करें, और अपने लिए देखें! (दोनों एक ही * 'चीज 'निर्यात करते समय एक संघर्ष नहीं है।) अगर दोनों आयात किए जाते हैं, तो मैं अभी भी' फू 'पर' बार 'पसंद करने के लिए ghci को बताना चाहता हूं। –

+0

वाह! यह सुविधा कितनी देर तक उपलब्ध है!?!? यह सब कुछ बदलता है। –

उत्तर

0

जब तक मैं इसके विपरीत सबूत नहीं सुनता, तो उत्तर लगता है: आप नहीं कर सकते हैं।

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

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