2016-08-14 11 views
11

कहना चलो मैं एक injective प्रकार परिवार Tउलटा injective प्रकार परिवारों

type family T a = b | b -> a 

मेरा पहला सवाल है वहाँ लिखने के लिए एक तरीका है:

type family T' = the inverse of T 

T के सभी उदाहरणों को दोहराने के लिए होने के बिना लेकिन उलटे हुए।

इस तरह की है कि: T (X1 a (T' a)) = a

ऐसा लगता है कि यह काम करना चाहिए, के रूप में दोनों T और T' injective कर रहे हैं, एक तरफ दिए गए यह अन्य बाहर काम करने के यांत्रिक है।

T' लिखने के लिए वैसे भी?

+2

चाहेंगे नहीं 'एक ~ टी बी काम? – mb14

+0

स्पष्ट रूप से 'टाइप टिनव बी = ए' अस्वीकार कर दिया गया है क्योंकि टाइवर 'ए' का उल्लेख 'टिनव 'के तर्कों में किया जाना चाहिए, जो कि उनके द्वारा निर्धारित किए जाने पर बहुत ही सीमित दिखता है, जो कि दायरे में निधि के लिए धन्यवाद। – chi

+1

फंड को एक स्पष्ट प्रकार के पारिवारिक एप्लिकेशन में परिवर्तित करना असंभव है, लेकिन जैसा कि @ mb14 ने कहा है, एक प्रकार के हस्ताक्षर में समानता बाधा का उपयोग करके आप उलटा गणना कर सकते हैं - उदा। '(ए ~ टी बी) => प्रॉक्सी ए -> प्रॉक्सी बी 'या समकक्ष' प्रॉक्सी (टी बी) -> प्रॉक्सी बी'। – user2407038

उत्तर

6
उपयुक्त एक्सटेंशन के साथ

, एक लिख सकते हैं:

type T' b = forall a. T a ~ b => a 

उदाहरण के लिए, यहाँ एक उदाहरण है दिखा रहा है कि आप इस प्रकार के पर्याय के साथ कम से कम बुनियादी प्रकार अनुकूलता मिलती है:

type family T a = b | b -> a 
type instance T Int = Bool 

f :: T' Bool -> Int 
f x = x 
संबंधित मुद्दे