我正在尝试使用Control.Arrow.ArrowTree构建一个 HTML 处理箭头,该箭头在给定树中的第一次成功转换(深度优先)后停止。即具有类型的函数
processFirst :: (ArrowTree a, Tree t) => a (t b) (t b) -> a (t b) (t b)
例如,要将类“first”添加到 HTML 文档中的第一个列表项,可以构建箭头
processFirst (hasName "li" `guards` addAttr "class" "first")
我对 HXT 相当陌生,我已经阅读 API 文档几个小时并试图弄清楚如何实现processFirst
,但我无法将所有部分组合在一起。processTopDownUntil
起初听起来很有希望,但该函数仅停止对特定子树的处理,因此它仍将转换除嵌套元素之外的所有元素。