我想在 Haskell 中实现一个 AST。我需要一个父引用,所以似乎不可能使用功能数据结构。我在一篇文章中看到了以下内容。我们定义一个节点为:
type Tree = Node -> Node
Node 允许我们通过 Key a 类型的键获取属性。关于这种模式有什么可读的吗?你能给我一些进一步的链接吗?
我想在 Haskell 中实现一个 AST。我需要一个父引用,所以似乎不可能使用功能数据结构。我在一篇文章中看到了以下内容。我们定义一个节点为:
type Tree = Node -> Node
Node 允许我们通过 Key a 类型的键获取属性。关于这种模式有什么可读的吗?你能给我一些进一步的链接吗?
如果您想要一个具有循环自引用的纯数据结构,那么正如 delnan 在评论中所说,通常的术语是“打结”。搜索该术语应该可以为您提供更多信息。
请注意,通过打结构建的数据结构很难(或不可能)以通常的方式“更新” - 使用非循环结构,您可以在基于它构建新结构时保留原始的片段,但会改变循环的任何部分都需要您重建整个循环。当然,这取决于你在做什么,这可能是也可能不是问题。