Я пытаюсь использовать Control.Arrow.ArrowTree для создания стрелки обработки HTML, которая останавливается после первого успешного преобразования (глубины в первом) в данном дереве. То есть функция с типомHXT: Как прекратить обработку после первой успешной трансформации?
processFirst :: (ArrowTree a, Tree t) => a (t b) (t b) -> a (t b) (t b)
Например, чтобы добавить класс «первый» к самому первому элементу списка в HTML-документе, можно было бы построить стрелку
processFirst (hasName "li" `guards` addAttr "class" "first")
Я довольно новый к HXT, и я читал документы API уже пару часов и пытался выяснить, как реализовать processFirst
, но мне не удалось собрать все части вместе. processTopDownUntil
сначала казался перспективным, но эта функция только останавливает обработку для определенного поддерева, поэтому она все равно преобразует все элементы, исключая вложенные.