我正在考虑用haskell编写一个浏览器。中央数据结构将是表示文档的可变树。除了使用完全由 iorefs 组成的树之外,还有更好的解决方案吗?
我希望避免这样的事情:(data DomNode = DomNode TagName NodeProperties (IORef DomNode) [IORef DomNode]
标签,属性,父母,孩子)
问题是 javascript 可以保留树中节点的引用,它可以改变(添加子节点、修改属性)它引用的任何节点,以及遍历它的父节点。
编辑:
我意识到您需要以某种方式使用可变状态 - 因为您可以保留对从树中删除或在树中移动的节点的引用。如果你通过基于树结构的东西引用了元素,那么这个引用将是无效的。