2010-12-16 17 views
8

मैं निम्नलिखित typeclass जो मॉडल एक SQL जैसी क्वेरी अनुकूलन:उदाहरणों और प्रकार कार्यों हास्केल ओवरलैपिंग

class OptimizableQuery q where 
    type Optimized q :: * 
    optimize :: q -> Optimized q 

instance Query q => OptimizableQuery q where 
    type Optimized q = q 
    optimize q = q 

instance (Query q, OptimizableQuery q) => OptimizableQuery (Select (Select q p) p) where 
    type Optimized (Select (Select q p) p) = Select (Optimized q) p 
    optimize (Select (Select q _) p) = Select (optimize q) p 

समस्या यह है कि मैं त्रुटि अनुकूलित प्रकार समारोह पर "विरोधी परिवार उदाहरण घोषणाओं" हो जाता है। वह क्यों है और मैं इसे कैसे हल कर सकता हूं? सभी मामलों को निकालने के बजाय वास्तव में "फॉलबैक इंस्टेंस" होना अच्छा लगेगा (जो बहुत अधिक हो सकता है) ...

उत्तर

7

टाइप परिवारों के साथ उदाहरण ओवरलैप करना अवैध है। विवरण के लिए GHC manual, "समानार्थी उदाहरणों का ओवरलैप" देखें।

कारण यह है कि उपलब्ध उदाहरणों के आधार पर एक प्रकार के फ़ंक्शन एप्लिकेशन के लिए दो अलग-अलग संभावित परिणाम होने से असंतोष हो सकता है।

+0

मैं इसके आसपास कैसे काम करूं? –

+0

मैं सभी मामलों को समाप्त करने के अलावा किसी भी कामकाज के बारे में नहीं सोच सकता। माफ़ कीजिये! –

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