Haskell Language
मॉड्यूल
खोज…
वाक्य - विन्यास
मॉड्यूल का नाम जहां - इस फ़ाइल में घोषित सभी नामों को निर्यात करें
मॉड्यूल का नाम (functionOne, टाइप (..)) जहां - केवल functionOne, टाइप, और टाइप के कंस्ट्रक्टर्स निर्यात करें
आयात मॉड्यूल - मॉड्यूल के सभी निर्यात किए गए नामों का आयात करें
आयात योग्य मॉड्यूल MN के रूप में - योग्य आयात
आयात मॉड्यूल (justThisFunction) - एक मॉड्यूल से केवल कुछ नामों का आयात करें
आयात मॉड्यूल छुपा (functionName, प्रकार) - functionName और प्रकार को छोड़कर एक मॉड्यूल से सभी नाम आयात करें
टिप्पणियों
हास्केल के पास मॉड्यूल के लिए समर्थन है:
एक मॉड्यूल सभी निर्यात कर सकता है, या उसके सदस्य प्रकारों और कार्यों का एक सबसेट
एक मॉड्यूल अन्य मॉड्यूल से आयात किए गए नामों को "पुन: निर्यात" कर सकता है
एक मॉड्यूल के उपभोक्ता अंत पर, एक कर सकता है:
सभी आयात करें, या मॉड्यूल सदस्यों का सबसेट
किसी विशेष सदस्य या सदस्यों के सेट का आयात छिपाना
haskell.org में मॉड्यूल परिभाषा पर एक महान अध्याय है।
अपने खुद के मॉड्यूल को परिभाषित करना
यदि हमारे पास Business.hs
नामक एक फ़ाइल है, तो हम एक Business
मॉड्यूल को परिभाषित कर सकते हैं जिसे import
किया जा सकता है, जैसे:
module Business (
Person (..), -- ^ Export the Person type and all its constructors and field names
employees -- ^ Export the employees function
) where
-- begin types, function definitions, etc
एक गहरी पदानुक्रम निश्चित रूप से संभव है; पदानुक्रमित मॉड्यूल नाम उदाहरण देखें।
एक्सपोर्ट कंस्ट्रक्टर्स
प्रकार और उसके सभी निर्माणकर्ताओं को निर्यात करने के लिए, निम्नलिखित सिंटैक्स का उपयोग करना चाहिए:
module X (Person (..)) where
तो, People.hs
नामक फ़ाइल में निम्न शीर्ष-स्तरीय परिभाषाओं के लिए:
data Person = Friend String | Foe deriving (Show, Eq, Ord)
isFoe Foe = True
isFoe _ = False
शीर्ष पर यह मॉड्यूल घोषणा:
module People (Person (..)) where
केवल Person
और उसके निर्माता Friend
और Foe
निर्यात करेगा।
यदि मॉड्यूल कीवर्ड के बाद निर्यात सूची को छोड़ दिया जाता है, तो मॉड्यूल के शीर्ष स्तर पर बंधे सभी नाम निर्यात किए जाएंगे:
module People where
निर्यात करेगा Person
, इसके निर्माता और isFoe
फ़ंक्शन।
एक मॉड्यूल के विशिष्ट सदस्य आयात करना
हास्केल एक मॉड्यूल से वस्तुओं के सबसेट को आयात करने का समर्थन करता है।
import qualified Data.Stream (map) as D
केवल Data.Stream
से map
आयात करेगा, और इस फ़ंक्शन को कॉल करने के लिए D.
आवश्यकता होगी:
D.map odd [1..]
अन्यथा संकलक Prelude
के map
फ़ंक्शन का उपयोग करने का प्रयास करेगा।
छुपा हुआ आयात
प्रस्तावना अक्सर उन कार्यों को परिभाषित करती है जिनके नाम कहीं और उपयोग किए जाते हैं। इस तरह के आयातों को छिपाना नहीं (या योग्य आयात का उपयोग करना जहां झड़पें होती हैं) संकलन त्रुटियों का कारण होगा।
Data.Stream
map
, head
और tail
नाम के कार्यों को परिभाषित करता है जो आम तौर पर Prelude में परिभाषित लोगों के साथ Data.Stream
। हम उन आयातों को hiding
Prelude से छिपा सकते हैं:
import Data.Stream -- everything from Data.Stream
import Prelude hiding (map, head, tail, scan, foldl, foldr, filter, dropWhile, take) -- etc
वास्तव में, इस तरह से प्रील्यूड Data.Stream
को छिपाने के लिए बहुत अधिक कोड की आवश्यकता होगी, इसलिए आप वास्तव में इसके बजाय Data.Stream
एक qualified
आयात का उपयोग करेंगे।
योग्यता आयात
जब कई मॉड्यूल नाम से समान फ़ंक्शन को परिभाषित करते हैं, तो कंपाइलर शिकायत करेगा। ऐसे मामलों में (या पठनीयता में सुधार करने के लिए), हम एक qualified
आयात का उपयोग कर सकते हैं:
import qualified Data.Stream as D
अब हम map
उपयोग करते समय अस्पष्टता संकलक त्रुटियों को रोक सकते हैं, जिसे Prelude
और Data.Stream
में परिभाषित किया गया है:
map (== 1) [1,2,3] -- will use Prelude.map
D.map (odd) (fromList [1..]) -- will use Data.Stream.map
मॉड्यूल को आयात करना भी संभव है केवल import Data.Text as T
नामों को import Data.Text as T
माध्यम से योग्य किया जा रहा है। import Data.Text as T
, जो किसी को T.Text
आदि के बजाय Text
अनुमति देता है।
पदानुक्रमित मॉड्यूल नाम
मॉड्यूल के नाम फाइलसिस्टम के पदानुक्रमित संरचना का अनुसरण करते हैं। निम्नलिखित फ़ाइल लेआउट के साथ:
Foo/
├── Baz/
│ └── Quux.hs
└── Bar.hs
Foo.hs
Bar.hs
मॉड्यूल हेडर इस तरह दिखेगा:
-- file Foo.hs
module Foo where
-- file Bar.hs
module Bar where
-- file Foo/Bar.hs
module Foo.Bar where
-- file Foo/Baz/Quux.hs
module Foo.Baz.Quux where
ध्यान दें कि:
- मॉड्यूल का नाम मॉड्यूल घोषित करने वाली फ़ाइल के पथ पर आधारित है
- फ़ोल्डर एक मॉड्यूल के साथ एक नाम साझा कर सकते हैं, जो मॉड्यूल को स्वाभाविक रूप से श्रेणीबद्ध नामकरण संरचना देता है