हास्केल में हमें लॉजिकल के साथ प्रकारों पर बाधाओं को संयोजित करने की क्षमता दी जाती है।मैं लॉजिकल या हास्केल में दो प्रकार की बाधाओं को कैसे जोड़ सकता हूं?
पर विचार करें
type And (a :: Constraint) b = (a, b)
निम्नलिखित या अधिक complicatedly
class (a, b) => And a b
instance (a, b) => And a b
मैं कैसे तार्किक या एक साथ करने के लिए दो की कमी हास्केल में जानना चाहते हैं।
मेरा सबसे करीबी प्रयास यह है, लेकिन यह काफी काम नहीं करता है। इस प्रयास में मैं टैग के साथ प्रकार की बाधाओं को प्रमाणित करता हूं और उन्हें अंतर्निहित मानकों के साथ खराब कर देता हूं।
data ROr a b where
L :: a => ROr a b
R :: b => ROr a b
type Or a b = (?choose :: ROr a b)
y :: Or (a ~ Integer) (Bool ~ Integer) => a
y = case ?choose of
L -> 4
x :: Integer
x = let ?choose = L in y
यह लगभग काम करता है, लेकिन उपयोगकर्ता को अंतिम भाग लागू करना है, और संकलक को मेरे लिए यह करना चाहिए। साथ ही, यह मामला किसी तीसरे विकल्प को चुनने नहीं देता है जब दोनों बाधाएं संतुष्ट होती हैं।
मैं तर्कसंगत या दो बाधाओं को एक साथ कैसे कर सकता हूं?
या तो क्या? यह संतुष्ट होने पर यह आपको असंबद्ध कर देगा। –