【发布时间】:2013-12-21 16:51:42
【问题描述】:
我使用 Uniplate 已经有一段时间了,但我发现它缺乏识别节点的能力,这让我的工作变得更加困难。是否有允许绝对 ID 的泛型实现?这是我希望这样的实现具有的一些 API 的示例:
universe :: (Data on) => on -> [(Id,on)] -- returns all sub nodes, with ids
children :: (Data on) => on -> [(Id,on)] -- returns all direct children, with ids
transformAbove :: (Data on) => (on -> on) -> Id -> on -> on -- applies a transformation to all nodes which are ancestors of the node with the given id
【问题讨论】:
-
有趣的想法!如果您想自己构建它,我能给您的唯一帮助是查看
data-reify包。 -
您希望
Id的类型和值是什么? -
我希望
Id ~ [Int],虽然如果我们提前知道D的最大分支B,我们也可以有Id ~ Int并且每个子id等于parent id * B + child index -
好的,对于单个标量,最好使用 Integer 而不是 Int,因为 id 以指数方式增长到树深度
标签: generics haskell types functional-programming