मुझे निम्न समस्या मिली है: मेरे पास विभिन्न वर्गों की वस्तुओं का पेड़ है जहां बाल वर्ग में कोई कार्रवाई माता-पिता को अमान्य करती है। अनिवार्य भाषाओं में, यह करने के लिए तुच्छ है। उदाहरण के लिए, जावा में:मैं हास्केल में ऑब्जेक्ट्स के पेड़ को पॉइंटर्स के साथ माता-पिता और बच्चों को कैसे कोड करूं?
public class A {
private List<B> m_children = new LinkedList<B>();
private boolean m_valid = true;
public void invalidate() {
m_valid = false;
}
public void addChild(B child) {
m_children.add(child);
child.m_parent = this;
}
}
public class B {
public A m_parent = null;
private int m_data = 0;
public void setData(int data) {
m_data = 0;
m_parent.invalidate();
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
B b = new B();
b.setData(0); //invalidates A
}
}
मैं उपरोक्त हास्केल में कैसे कर सकता हूं? मैं इसके चारों ओर अपने दिमाग को लपेट नहीं सकता, क्योंकि एक बार जब मैं हास्केल में ऑब्जेक्ट बनाता हूं, तो इसे बदला नहीं जा सकता है।
यदि संबंधित हास्केल कोड पोस्ट किया गया है तो मैं बहुत अधिक बाध्य होगा।
संपादित करें:
मैं गए एप्लिकेशन है कि दस्तावेजों को संपादित करता है: समस्या मैं हल करने के लिए कोशिश कर रहा हूँ निम्नलिखित है। एक दस्तावेज वस्तुओं का एक पदानुक्रम है। जब बच्चों की वस्तुओं के गुण संशोधित होते हैं, तो दस्तावेज़ को अमान्य स्थिति पर सेट करने की आवश्यकता होती है, ताकि उपयोगकर्ता जानता है कि दस्तावेज़ को सत्यापित करने की आवश्यकता है।
sepp2k और Tal Pressman के उत्तरों को जोड़ने के लिए, आप शुद्ध कार्यात्मक दुनिया से बचकर और 'एसटी' या 'आईओ' मोनैड का उपयोग करके, चीजों को करने के जावा तरीके की नकल करने के लिए हास्केल कोड भी लिख सकते हैं। "परिवर्तनीय" पॉइंटर्स के लिए 'एसटीआरआईफ़' का उपयोग करना। – yairchu
दिलचस्प। यह कैसे काम करता है? क्या कंपाइलर एसटीआरआईफ़ को विशेष निर्माण के रूप में मानता है? और एसटीआरआईफ़ और आईओआरएफ के बीच अंतर क्या हैं? मैंने इसे गुमराह किया है लेकिन मैं समझने में आसान कुछ नहीं आया था। – axilmar