2015-03-20 16 views
9

आप टाइप-ऑपरेटरों को कैसे निर्यात करते हैं? ध्यान दें कि वे सामान्य ऑपरेटरों के साथ संघर्ष कर सकते हैं, यदि संभव हो तो एक विशेष वाक्यविन्यास होना चाहिए।मॉड्यूल से निर्यात प्रकार-ऑपरेटरों

उत्तर

12

मैं अनुभाग 7.4.4 of the GHC User's Guide में जवाब है, जिसमें कहा गया है पाया:

अब आयात और निर्यात सूचियों में कुछ संभावित अस्पष्टता है; उदाहरण के लिए यदि आप import M((+)) लिखते हैं तो क्या आपका मतलब है फ़ंक्शन(+) या टाइप कन्स्ट्रक्टर(+)? डिफ़ॉल्ट पूर्व है, लेकिन -XExplicitNamespaces (जो -XExplicitTypeOperators द्वारा निहित है) के साथ GHC आप कीवर्ड type साथ यह पूर्ववर्ती, इस प्रकार से उत्तरार्द्ध निर्दिष्ट करने के लिए अनुमति देता है:

import M(type (+)) 

यह आप की तरह प्रतीत नहीं होता है हालांकि वास्तव में -XExplicitNamespaces निर्दिष्ट करने की आवश्यकता है, शायद -XExplicitTypeOperators एक टाइपो है जो -XTypeOperators होने का मतलब है। इस के लिए कुछ और अनुभवजन्य साक्ष्य:

★ → :set -XExplicitTypeOperators 
Some flags have not been recognized: -XExplicitTypeOperators 
+2

GHC Trac पर कि प्रलेखन के खिलाफ एक बग रिपोर्ट फ़ाइल करें। यदि आप नहीं चाहते हैं, तो मुझे बताएं और मैं इसे करूँगा। वास्तव में, मुझे किसी भी तरह से पता है :)। – dfeuer

+1

@dfeuer https://ghc.haskell.org/trac/ghc/ticket/10175 यहां हम जाते हैं! – Shou

0

बजाय एक प्रकार आयात करने, आप केवल निर्यात एक प्रकार ऑपरेटर कर सकते हैं।

मैंने type a * b = ... को परिभाषित किया, लेकिन (*) निर्यात करने के लिए समानार्थी शब्द (*) को समानार्थी शब्द के बजाय निर्यात किया गया। जवाब से ऊपर की ही तरह, निर्यात एक प्रकार ऑपरेटर के लिए, आप सिंटैक्स का उपयोग कर सकते हैं:

module Foo (type (*)) where 

    type a * b = ... 
संबंधित मुद्दे