2014-08-28 8 views
8

मुझे समझ में आता है कि नए role system and annotations को टाइप (और डेटा) परिवार पैरामीटर की भूमिका nominal पर क्यों आवश्यकता है।नाममात्र प्रकार की भूमिकाएं और डेटा परिवार

तो मैं उम्मीद जब मैं

data family CoordinateRepresentation ty a :: * 

ने घोषणा की कि ty और anominal भूमिकाओं मिलेगा। (मेरा वास्तविक उदाहरण एक संबंधित डेटा परिवार है, लेकिन चूंकि मुझे नहीं लगता कि यह कुछ भी बदलता है, मैं उसके साथ आने वाले अतिरिक्त शोर को छोड़ रहा हूं।)

मुझे उम्मीद नहीं थी कि जब मैंने इसे

में बदल दिया
data family CoordinateRepresentation ty :: * -> * 

यह है कि अनामित दूसरे प्रकार के तर्क को अभी भी nominal भूमिका मिलती है।

यह क्यों है? क्या यह representational भूमिका सुरक्षित रूप से प्राप्त नहीं कर सका, क्योंकि data instance CoordinateRepresentation ... = ... को कोई नया कन्स्ट्रक्टर नहीं बनाना है? उस कन्स्ट्रक्टर को nominal भूमिका पर अपने पैरामीटर का उपयोग करने का अवसर कैसे मिल सकता है जिस तरह संकलक नहीं देख सकता है? भले ही यह एक खुली प्रणाली है और अलग संकलन है, फिर भी मुझे यह नहीं मिला है।

उत्तर

6

पहले के रूप में, मामूली बिंदु: क्या डेटा परिवार को प्रकार चर के साथ घोषित किया गया है या वर्तमान में हस्ताक्षर के साथ वर्तमान में पूरी तरह से अपरिपक्व है, वे एक ही चीज़ के लिए केवल अलग वाक्यविन्यास हैं। डेटा परिवार घोषणाओं पर the GHC User's Guide से:

बस GADT declarations नामित तर्क के साथ के रूप में

, पूरी तरह से वैकल्पिक हैं [...]

प्रमुख बिंदु बना हुआ है, और this GHC trac thread में चर्चा की गई। संक्षिप्त सारांश: डेटा/प्रकार परिवारों के लिए भूमिका अनुमान और/या भूमिका एनोटेशन जोड़कर यह संभव है, लेकिन यह अभी तक लागू नहीं हुआ है।

+0

आह, मैं देखता हूं। मुझे उम्मीद थी कि दूसरा वाक्यविन्यास टाइप परिवार के "पैटर्न मिलान" भाग को पहले तर्क में सीमित करेगा और इसके परिणामस्वरूप '* -> *' को कुछ सामान्य "सामान्य" में होना चाहिए, लेकिन ऐसा नहीं है। –

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