http://hackage.haskell.org/packages/archive/hxt/latest/doc/html/Control-Arrow-ArrowTree.html#v:deep
deep :: Tree t => a (t b) c -> a (t b) cSource
рекурсивно ищет во всем дереве поддеревья, для которых существует предикат. Поиск выполняется сверху вниз. Когда дерево найдено, оно становится элементом списка результатов. Найденное дерево больше не проверяется на предмет любого подстресса, для которого также мог бы храниться предикат. См. multi
для поиска такого типа.
пример: deep isHtmlTable
выбирает все элементы таблицы верхнего уровня в документе (с соответствующим определением для isHtmlTable
), но в ячейке таблицы нет таблиц.
В документации можно найти имя функции или подпись типа с помощью Hoogle или Hayoo!
В основном, если дерево XML похоже на
<p>
<strong id="a">
<em id="b">
<strong id="c">
foo
</strong>
</em>
</strong>
<ins id="d">
<strong id="e">
bar
</strong>
<em id="f">
baz
</em>
</ins>
</p>
deep (isElem >>> hasName "strong") tree
вернет список для
<strong id="a">
<strong id="e">
потому что мы можем найти эти два <strong>
s при входе в дерево, тогда как (isElem >>> hasName tag) tree
вернет пустой список, потому что корнем дерева является <p>
, а не <strong>