2015-05-04 6 views
5

Haskell 98 report में मैंने पाया है इस:हास्केल: इन्फिक्स प्रकार के रचनाकारों को क्यों अनुमति नहीं दी जाती है?

हास्केल प्रकार भाव का वाक्य विन्यास ऊपर दी गई है। जैसे ही डेटा कंट्रोलर्स का उपयोग करके डेटा वैल्यू बनाए जाते हैं, टाइप टाइप कन्स्ट्रक्टर से टाइप किए जाते हैं। डेटा कन्स्ट्रक्टर के साथ, टाइप कन्स्ट्रक्टर के नाम अपरकेस अक्षरों से शुरू होते हैं। डेटा कन्स्ट्रक्टर के विपरीत, इंफिक्स प्रकार कन्स्ट्रक्टर की अनुमति नहीं है ((->) के अलावा)।

के रूप में कोई कारण इन्फ़िक्स प्रकार कंस्ट्रक्टर्स की अनुमति नहीं है दिया जाता है। Agda और इस तरह, infix प्रकार रचनाकार आम हैं। हास्केल में क्यों नहीं?

+2

हास्केल उचित अनुमति नहीं दे सकता है, लेकिन जीएचसी में एक्सटेंशन हैं जो https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/data-type-extensions.html – jamshidh

उत्तर

10

यह हास्केल मानक का हिस्सा नहीं है, लेकिन jamshidh का उल्लेख है कि यह जीएचसी में अभी भी संभव है। चेतावनी है कि डेटा कंस्ट्रक्टर्स (कंस्ट्रक्टर्स टाइप नहीं) को कोलन से शुरू करनी चाहिए:

{-# LANGUAGE TypeOperators #-} 

data a + b = a :+ b 

f :: a + b -> a 
f (a :+ b) = a 

g :: a + b -> b 
g (a :+ b) = b 
+4

आपको आवश्यकता नहीं है 'टाइप' के साथ इंफिक्स कन्स्ट्रक्टर के लिए 'टाइपऑपरेटर्स' को सक्षम करने के लिए, लेकिन 'डेटा ए एबी = ए:> बी व्युत्पन्न शो' लिख सकता है – Michael

4

बस पूरी तरह स्पष्ट होना: हास्केल 98 और हास्केल 2000 दोनों के लिए अनुमति देते इन्फ़िक्स मूल्य कंस्ट्रक्टर्स ऐसे

data Complex r = r :+ r 
के रूप में

यहां मूल्य निर्माता (:+) इंफिक्स है, जैसा कि 5 :+ 7 में है।

आपको केवल एक्सटेंशन टाइप करने के लिए टाइप करें जो इन्फिक्स हैं। उदाहरण के लिए,

data x ??! y = Left x | Right y 

यहाँ प्रकार निर्माता (??!) इन्फ़िक्स, Int ??! Bool में के रूप में है।

संबंधित मुद्दे

 संबंधित मुद्दे