次の問題があります。子クラスのアクションが親を無効にする、さまざまなクラスのオブジェクトのツリーがあります。命令型言語では、行うのは簡単です。たとえば、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コードが投稿されている場合、私は非常に義務付けられています.
編集:私が解決しようとしている問題は次のとおりです。
ドキュメントを編集するアプリケーションがあります。ドキュメントは、オブジェクトの階層です。子オブジェクトのプロパティが変更された場合、ユーザーがドキュメントを検証する必要があることを認識できるように、ドキュメントを無効な状態に設定する必要があります。