मैं कई असंगत बनाना चाहता हूं, लेकिन अन्यथा बराबर, डेटाटाइप। जो है, मैंक्या मैं हैस्केल में सिंगलटन प्रकारों के बारे में सोच रहा हूं और उपयोग कर रहा हूं?
bar :: (Foo a) -> (Foo a) -> (Foo a)
इस तरह के रूप में भी कार्य वास्तव में क्या a
है के बारे में देखभाल के बिना एक पैरामिट्रीकृत प्रकार Foo a
करना चाहते हैं, और। आगे स्पष्ट करने के लिए, मैं मेरे
x :: Foo Int
y :: Foo Char
bar x y
करने से रोकने के लिए जब मैं एक ही समय में वास्तव में परवाह नहीं है के बारे में Int
और Char
(मैं केवल परवाह कि वे एक ही नहीं कर रहे हैं) प्रकार प्रणाली चाहते हैं ।
मेरे वास्तविक कोड में मेरे पास एक दी गई अंगूठी पर बहुपद के लिए एक प्रकार है। मैं वास्तव में परवाह नहीं करता कि indeterminates क्या हैं, जब तक कि प्रकार प्रणाली मुझे बहुपद के साथ एक बहुपद जोड़ना बंद कर देता है। जो विशेष रूप से अंगूठी के बारे में दिए गए बहुपद खत्म हो गया है, क्योंकि मैं देखभाल कर अब तक मैं एक typeclass Indeterminate
बनाने, और के रूप में
data (Ring a, Indeterminate b) => Polynomial a b
यह दृष्टिकोण मेरी बहुपद प्रकार parameterizing द्वारा इस समाधान कर लिया है Ring
भाग के लिए पूरी तरह से प्राकृतिक महसूस करता है । Indeterminate
भाग के लिए यह बहुत समझा जाता है, जैसा कि नीचे दिया गया है।
उपर्युक्त दृष्टिकोण ठीक काम करता है, लेकिन माना जाता है। विशेष रूप से इस भाग:
class Indeterminate a where
indeterminate :: a
data T = T
instance Indeterminate T where
indeterminate = T
data S = S
instance Indeterminate S where
indeterminate = S
(और शायद कुछ और अनिश्चितता के लिए)। यह अजीब और गलत लगता है। अनिवार्य रूप से मैं यह मांगने की कोशिश कर रहा हूं कि Indeterminate
के उदाहरण सिंगलेट बनें (this sense में)। अजीबता की भावना एक संकेतक है कि मैं इस गलत तरीके से हमला कर सकता हूं। एक और तथ्य यह है कि मैं अपने Polynomial a b
एस के बहुत सारे एनोटेट करने के लिए समाप्त होता हूं क्योंकि वास्तविक प्रकार b
अक्सर अनुमानित नहीं किया जा सकता है (यह अजीब नहीं है, लेकिन फिर भी परेशान है)।
कोई सुझाव? क्या मुझे बस ऐसा करने पर रोकना चाहिए, या क्या मुझे कुछ याद आ रहा है?
पीएस: अगर मैं तुरंत जवाब नहीं देता या जवाब नहीं देता तो नाराज न हों। मैं कुछ दिनों के लिए वापस जांचने में असमर्थ हूं।
क्या बहुपद मॉडलिंग को अंगूठी के तत्वों के अनुक्रम या उदाहरण के लिए कुछ (उदाहरण के लिए आंशिक रकम के अनुक्रम) के रूप में मॉडलिंग नहीं करने का कोई अच्छा कारण है? –
ठीक है, मैं यहाँ थोड़ा सा खो गया हूँ। मुझे समझ में नहीं आता कि आपको 'अनिश्चितता' क्यों चाहिए। यदि आप बस दो बीएस लागू करना चाहते हैं, तो इसे टाइप हस्ताक्षर में छोड़ दें, और यही वह है? – sclv
@Alexandre सी .: मैं यह कर रहा हूँ। लेकिन मैं टाइप हस्ताक्षर को अर्थहीन बनाना चाहता हूं, कहें, "2 + 5t" से "6s" जोड़ें। अंगूठी तत्वों के अनुक्रमों के रूप में बहुपद के साथ, प्रकार प्रणाली (सही ढंग से) मुझे एक अंगूठी में गुणांक के साथ बहुपद जोड़ना बंद कर देता है जिसमें एक दूसरे के गुणांक के साथ होता है, लेकिन यह अनिश्चितता पर अंतर नहीं करता है। अब, ज़ाहिर है, मुझे वास्तव में अनिश्चितता की आवश्यकता है या नहीं, यह एक बहुत ही वैध सवाल है :-) – gspr