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
最初は有望に聞こえましたが、その関数は特定のサブツリーの処理を停止するだけなので、ネストされた要素を除くすべての要素を変換します。