How do I code a tree of objects in Haskell with pointers to parent and children?
- by axilmar
I've got the following problem: I have a tree of objects of different classes where an action in the child class invalidates the parent. In imperative languages, it is trivial to do. For example, in Java:
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
    }
}
How do I do the above in Haskell? I cannot wrap my mind around this, since once I construct an object in Haskell, it cannot be changed.
I would be much obliged if the relevant Haskell code is posted.