खोज…


वाक्य - विन्यास

  • मॉड्यूल का नाम जहां - इस फ़ाइल में घोषित सभी नामों को निर्यात करें

  • मॉड्यूल का नाम (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

ध्यान दें कि:

  • मॉड्यूल का नाम मॉड्यूल घोषित करने वाली फ़ाइल के पथ पर आधारित है
  • फ़ोल्डर एक मॉड्यूल के साथ एक नाम साझा कर सकते हैं, जो मॉड्यूल को स्वाभाविक रूप से श्रेणीबद्ध नामकरण संरचना देता है


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow