मैं कक्षा के उदाहरणों की एक जोड़ी को अनिवार्य रूप से परिभाषित करने की कोशिश कर रहा हूं। यही कारण है:हास्केल "नहीं" टाइप बाधा
class Foo a b | a -> b where
foo :: a -> b
instance (not?)Foo a => Bar a b
foo x = ...
instance Foo a => Bar a b
foo x = ...
पहला उदाहरण आधार कार्रवाई को निर्धारित करता है, और सेकंड रिकर्सिवली foo कहता है। क्या इसे करने का कोई तरीका है? एक अच्छा उदाहरण एक सूची को फ़्लैट करना होगा, जहां पहले मामले में यह पहचान कार्य है और दूसरे में यह कॉन्सट का एक पुनरावर्ती अनुप्रयोग है।
ध्यान दें कि हास्केल में, यह सुनिश्चित करना असंभव है कि दिया गया प्रकार * नहीं * किसी दिए गए प्रकार के वर्ग का उदाहरण नहीं है, क्योंकि कोई और आपके कोड को अपने कुछ कोड के साथ संकलित कर सकता है जो उदाहरण प्रदान करता है। –