यूनियन प्रकार को परिभाषित करते समय, आप उस प्रकार के मान को बनाने के सभी तरीकों की सूची देते हैं। इसके सरलतम रूप में, कि परिभाषा इस तरह दिखता है:
type Visibility
= All
| Active
| Completed
आप अनुमान लगाया गया है के रूप में, इस प्रकार के Visibility
वाणी और तीन मूल्यों को परिभाषित करता है, के सभी प्रकार Visibility
। Visibility
के प्रकार का निर्माण करने का एकमात्र तरीका इन तीन विकल्पों में से एक का उपयोग करना है। इसके कारण, हम अक्सर उन्हें "रचनाकार" कहते हैं।
type TrainStatus
= OnTime
| Delayed Int
आप उम्मीद करेंगे के रूप में, यह दो नई परिभाषित करता है OnTime
और Delayed
"कंस्ट्रक्टर्स,":
यहाँ थोड़ी ज्यादा जटिल संघ प्रकार परिभाषा है। लेकिन उनकी प्रकार को देखो:
OnTime : TrainStatus
Delayed : Int -> TrainStatus
OnTime
निर्माता शून्य तर्क लेता है, और इसलिए बस एक मूल्य है, यह पहले से ही TrainStatus
है। लेकिन Delayed
को एक-तर्क कन्स्ट्रक्टर के रूप में घोषित किया गया है: यह फ़ंक्शन है जो Int
में से एक नया TrainStatus
बनाता है। इस प्रकार, Delayed 5
, Delayed 10
, और Delayed 100
सभी मान्य TrainStatus
मान हैं। (हम उन्हें "5 मिनट तक देरी" या कुछ समान के रूप में व्याख्या कर सकते हैं।)
एक निर्माता कई तर्क ले सकता है; उदाहरण के लिए, हम शामिल करना चाहते हैं, एक स्ट्रिंग, एक देरी के लिए एक कारण के रूप में यदि:
type TrainStatus
= OnTime
| Delayed Int String
ts : TrainStatus
ts = Delayed 20 "The conductor took a short nap."
जो Delayed : Int -> String -> TrainStatus
परिभाषित करता है।
आप एक TrainStatus
दिया जाता है, तो आप पैटर्न मिलान का उपयोग कर Int
और String
इसके अंदर निकाल सकते हैं:
case ts of
OnTime ->
"Your train is on time!"
Delayed minutes reason ->
"Your train has been delayed by " ++ toString minutes ++ " because " ++ reason