मान लीजिए मैं कुछ एडीटी है, जैसेबिना किसी बाधा के जीएडीटी (या अस्तित्व) को बिना किसी सामान्य एडीटी के रूप में तंग किया जा सकता है?
data Foo = Foo !Int
| Bar (Int->Int) Foo
अब कहते हैं कि मैं अतिरिक्त प्रकार सुरक्षा के कुछ प्रकार लागू करने के लिए चाहते हैं, "जादुई संख्या प्रकार" से छुटकारा पाने:
{-# LANGUAGE GADTs #-}
newtype Intey a = Intey { getIntey :: Int }
data Foo' a where
Foo :: !(Intey a) -> Foo' a
Bar :: (Intey a -> Intey b) -> Foo' a -> Foo' b
b
के बाद से बस है कन्स्ट्रक्टर के भीतर एक प्रेत तर्क, कोई बाधा नहीं है या कुछ भी नहीं है, यह मूल रूप से अर्थहीन है - प्रकार चेकर को छोड़कर। इसलिए यह किसी भी प्रदर्शन आदि लागत के बिना Foo
के समान संकलित कर सकता है?
क्या जीएडीटी सिर्फ एडीटी + समानता बाधाओं, ('~') के संकलन नहीं करना चाहिए? – jozefg
और अस्तित्व! –