2014-07-27 12 views
6

मैं 'UnMaybe' प्रकार का परिवार करने की कोशिश कर रहा हूं लेकिन यह संकलित नहीं करता है (उदाहरण परिवार विरोधाभासी)।परिवारों में विरोधाभासी उदाहरण कैसे हल करें?

यहाँ मेरी कोड है

{-# LANGUAGE TypeFamilies #-} 

type family UnMaybe a :: * 

type instance UnMaybe (Maybe a) = a 
type instance UnMaybe a = a 

त्रुटि संदेश

test.hs:4:16: 
    Conflicting family instance declarations: 
     type instance UnMaybe (Maybe a) 
     -- Defined at test.hs:4:16 
     type instance UnMaybe a 
     -- Defined at test.hs:5:15 

मुझे समझ में क्यों यह काम नहीं कर रहा, वैसे भी वहाँ एक और तरीका है एक ही परिणाम प्राप्त करने के लिए (या एक विस्तार है जो इच्छा को सक्रिय करने की अनुमति देता है है यह?)

उत्तर

11

यदि आपको वास्तव में इसकी आवश्यकता है, तो आप एक बंद प्रकार के परिवार का उपयोग कर सकते हैं (कम से कम जीएचसी 7.8 की आवश्यकता है):

{-# LANGUAGE TypeFamilies #-} 

type family UnMaybe a :: * where 
    UnMaybe (Maybe a) = a 
    UnMaybe a   = a 
अब

:

GHCi> :kind! UnMaybe (Maybe Int) 
UnMaybe (Maybe Int) :: * 
= Int 
GHCi> :kind! UnMaybe Bool 
UnMaybe Bool :: * 
= Bool 
+2

अब मैं समझ क्या परिवार को बंद कर दिया के लिए कर रहे हैं – mb14

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

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