खोज…


एक साधारण डेटा प्रकार बनाना

हास्केल में कस्टम डेटा प्रकार बनाने का सबसे आसान तरीका data कीवर्ड का उपयोग करना है:

data Foo = Bar | Biz

प्रकार का नाम data और = बीच निर्दिष्ट है, और इसे एक प्रकार का निर्माता कहा जाता है। के बाद = हम अपने डेटा प्रकार के सभी मूल्य निर्माता निर्दिष्ट करते हैं, जिसे सीमांकित किया जाता है | संकेत। हास्केल में एक नियम है कि सभी प्रकार और मूल्य निर्माणकर्ताओं को एक बड़े अक्षर से शुरू करना चाहिए। उपरोक्त घोषणा निम्नानुसार पढ़ी जा सकती है:

Foo नामक एक प्रकार को परिभाषित करें, जिसमें दो संभावित मान हैं: Bar और Biz

हमारे कस्टम प्रकार के चर बनाना

let x = Bar

ऊपर बयान एक चर नामित बनाता x प्रकार के Foo । आइए इसके प्रकार की जांच करके इसे सत्यापित करें।

:t x

प्रिंट

x :: Foo

मान निर्माता पैरामीटर के साथ डेटा प्रकार बनाना

मूल्य निर्माता वे कार्य हैं जो किसी डेटा प्रकार का मान लौटाते हैं। इस वजह से, किसी भी अन्य फ़ंक्शन की तरह, वे एक या अधिक पैरामीटर ले सकते हैं:

data Foo = Bar String Int | Biz String

आइए Bar वैल कंस्ट्रक्टर के प्रकार की जांच करें।

:t Bar

प्रिंट

Bar :: String -> Int -> Foo

जो साबित करता है कि Bar वास्तव में एक फ़ंक्शन है।

हमारे कस्टम प्रकार के चर बनाना

let x = Bar "Hello" 10
let y = Biz "Goodbye"

टाइप पैरामीटर के साथ डेटा टाइप बनाना

प्रकार के निर्माता एक या अधिक प्रकार के पैरामीटर ले सकते हैं:

data Foo a b = Bar a b | Biz a b

हास्केल में टाइप पैरामीटर एक लोअरकेस अक्षर से शुरू होना चाहिए। हमारा कस्टम डेटा प्रकार अभी तक वास्तविक प्रकार नहीं है। अपने प्रकार के मूल्यों को बनाने के लिए, हमें सभी प्रकार के मापदंडों को वास्तविक प्रकारों के साथ बदलना चाहिए। क्योंकि a और b किसी भी प्रकार के हो सकते हैं, हमारे मूल्य निर्माता पॉलीमॉर्फिक फ़ंक्शन हैं।

हमारे कस्टम प्रकार के चर बनाना

let x = Bar "Hello" 10      -- x :: Foo [Char] Integer
let y = Biz "Goodbye" 6.0   -- y :: Fractional b => Foo [Char] b
let z = Biz True False      -- z :: Foo Bool Bool

रिकॉर्ड मापदंडों के साथ कस्टम डेटा प्रकार

मान लें कि हम एक डेटा टाइप पर्सन बनाना चाहते हैं, जिसमें पहला और आखिरी नाम, एक उम्र, एक फोन नंबर, एक सड़क, एक ज़िप कोड और एक शहर है।

हम लिख सकते थे

data Person = Person String String Int Int String String String

अगर हम चाहते हैं कि अब हमें फोन नंबर मिल जाए, तो हमें एक फंक्शन करना होगा

getPhone :: Person -> Int
getPhone (Person _ _ _ phone _ _ _) = phone

खैर, यह कोई मज़ा नहीं है। हम मापदंडों का उपयोग करके बेहतर कर सकते हैं:

data Person' = Person' { firstName     :: String
                       , lastName      :: String
                       , age           :: Int
                       , phone         :: Int
                       , street        :: String
                       , code          :: String
                       , town          :: String }

अब हमें फंक्शन phone मिल जाता है

:t phone
phone :: Person' -> Int

हम अब जो चाहें कर सकते हैं, जैसे:

printPhone :: Person' -> IO ()
printPhone = putStrLn . show . phone

हम फोन नंबर को पैटर्न मिलान द्वारा भी बांध सकते हैं:

getPhone' :: Person' -> Int
getPhone' (Person {phone = p}) = p

मापदंडों के आसान उपयोग के लिए RecordWildCards देखें



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