У меня следующая проблема: у меня есть дерево объектов разных классов, где действие в дочернем классе делает недействительным родителя. В императивных языках это тривиально. Например, в 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
}
}
Как мне сделать это в Haskell? Я не могу обдумать это, поскольку, как только я создам объект в Haskell, его нельзя будет изменить.
Я был бы очень признателен, если бы соответствующий код Haskell был опубликован.
РЕДАКТИРОВАТЬ: проблема, которую я пытаюсь решить, заключается в следующем:
У меня есть приложение, которое редактирует документы. Документ представляет собой иерархию объектов. Когда свойства дочерних объектов изменяются, документ должен быть установлен в недопустимое состояние, чтобы пользователь знал, что документ необходимо проверить.
ST
илиIO
. ИспользованиеSTRef
s для изменяемых указателей. - person yairchu   schedule 07.06.2010