@"Hello"
यहां अप्रासंगिक है, यह सब String
पर प्रकार को ठीक करता है। आप
s :: String
s = s
साथ समान व्यवहार कौन सा अर्थ की दृष्टि से
s' :: String
s' = undefined
जो परिणाम देता है के बराबर है मिल
Prelude> s'
"*** Exception: Prelude.undefined
क्या मैं द्वारा "शब्दार्थ बराबर" मतलब है, दोनों s
और s'
के नीचे दिए गए मान के उदाहरण हैं, यानी "त्रुटि मानों के पाप बिन किसी भी प्रकार के मान एस, गैर सख्तता के लिए धन्यवाद "। जैसे ही आप नीचे मूल्य डालते हैं, शुद्ध हास्केल भाषा मूल रूप से शक्तिहीन होती है और अपरिभाषित, "अशुद्ध व्यवहार", जैसे आपको हमेशा के लिए प्रतीक्षा करने या अपवाद फेंकने की अनुमति देती है।
हालांकि, फिर से सख्तता के लिए धन्यवाद, यह आवश्यक नहीं है। एक मूल्य मुद्रित करते समय, पहली चीज जो होती है, Show
उदाहरण लागू होता है और एक स्ट्रिंग का उत्पादन करने के लिए कहा जाता है। एक हास्केल स्ट्रिंग एक आलसी सूची है। और show
स्ट्रिंग "
के साथ शुरू होता है, इसलिए यदि स्ट्रिंग स्वयं पूरी तरह से अपरिभाषित है, तो show
उस वर्ण का उत्पादन करने में सक्षम होगा।
हम
Prelude> head $ show s
'"'
के साथ इस अधिक आश्रय का निरीक्षण कर सकते तुम यहाँ कर रहे हैं ... जब इस व्यवहार मैं सच है कि आप ऐसा कर सकते हैं भर में आया था की छानबीन करने की कोशिश की 'चलो 1 = 2' किसी भी परिणाम के बिना । क्या आप इसे समझा सकते हैं? –
@ यूजीन: इसे आलस्य के साथ करना है - जब तक आप मूल्य की जांच नहीं करते हैं, पैटर्न मिलान में असफल होने का मौका नहीं होगा। तो 'x में x @ 1 = 2 को विफल होने दें, जैसा कि' चलो! 1 = 2 में() '। लेकिन '1 = 2 में()' के साथ, कुछ भी हास्केल को वास्तव में अनुरोधित पैटर्न मिलान करने के लिए मजबूर नहीं करेगा। –
@EugeneSh। ओह, कोशिश करें '2 + 2 = 5 में 2 + 2' ... – leftaroundabout