मैं हाल ही में "मुझे एक हास्केल सीखने" की कोशिश कर रहा हूं, और मैं कच्चे इंटीजर (टाइप सुरक्षा और कोड स्पष्टता के लिए) के बिना, एक पूर्णांक स्थिति का प्रतिनिधित्व करने के लिए एक नया प्रकार बनाना चाहता हूं। विशेष रूप से, निम्न कोड को संकलित करता है:हास्केल प्रकार "इंटीग्रल प्राप्त करने" को "एनम प्राप्त करने" की आवश्यकता क्यों है?
newtype AuxState = AuxState Integer
deriving (Eq, Ord, Num, Integral, Real, Enum)
हालांकि, बाद से वहाँ अपने आवेदन में राज्यों की एक अनंत संख्या में हैं, मैं एक Enum में इस राज्य परिवर्तित करने में कोई दिलचस्पी नहीं है। हालांकि, अगर मैं deriving (Enum)
बयान को दूर करने के तो यह सिर्फ deriving (Eq, Ord, Num, Integral, Real)
है कोशिश, संकलक शिकायत:
No instance for (Enum AuxState)
arising from the 'deriving' clause of a data type declaration
Possible fix:
add an instance declaration for (Enum AuxState)
or use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
When deriving the instance for (Integral AuxState)
मैं यह विश्वास करना कठिन है कि हास्केल इंटीग्रल कक्षा में एक प्रकार बलों भी Enum कक्षा में रहने के लिए मिल; क्या यह सिर्फ दूसरी तरफ नहीं होना चाहिए? क्या इसके लिए कोई कारण है, या क्या मैं कुछ गलत कर रहा/समझ रहा हूं? क्योंकि Integral
गणित की नींव succ
और pred
संचालन कर रहे हैं
एनम उदाहरण अनुक्रमिक रूप से आदेशित प्रकार हैं-उनके मूल्यों का आकलन किया जा सकता है। एनम प्रकार वर्ग का मुख्य लाभ यह है कि हम सूची मूल्यों में अपने मूल्यों का उपयोग कर सकते हैं। उन्होंने उत्तराधिकारी और पूर्ववर्ती भी परिभाषित किए हैं, जिन्हें हम succ और pred fuctions के साथ प्राप्त कर सकते हैं। मेरा मानना है कि सभी पूर्णांक इस वर्ग से संबंधित होना चाहिए, आपका क्यों नहीं होना चाहिए? –
"हालांकि, चूंकि मेरे आवेदन में असीमित राज्य हैं, ..." मुझे लगता है कि आपको 'एनम' की गलत समझ है। 'एनम' का मतलब मानों की सीमित संख्या वाला एक प्रकार नहीं है। – newacct
"क्या यह सिर्फ दूसरी तरफ नहीं होना चाहिए?" 'डबल' एक 'एनम' है, लेकिन जाहिर है कि 'इंटीग्रल' – newacct