Подсчет и фильтрация Стрелка для HXT

Я пытаюсь разобрать XML, но хочу отфильтровать и извлечь только определенное количество дочерних элементов из данного узла. Например:

<root>
    <node id="a" />
    <node id="b" />
    <node id="c" />
    <node id="d" />
</root>

А затем, если я выполню стрелку getChildren >>> myFilter 2 , я верну только узлы с идентификаторами «a» и «b».

Интуиция подсказывает, что я Для отслеживания нужно использовать Стрелку состояния, но я не знаю, как это сделать.

Я пытался сделать это сам, но это не совсем то, что мне нужно, выглядит не очень элегантно и не работает. Я пытаюсь запустить свою цепочку стрелок с runSLA и целочисленным параметром в качестве начального состояния, а затем определяю:

takeOnly :: IOSLA Int XmlTree XmlTree
takeOnly = changeState (\s b -> s-1)
             >>> accessState (\s b -> if s >= 0 then b else Nothing)

Но, конечно, я не могу вернуть Ничего , мне нужно вернуть XmlTree. Но я не Я вообще ничего не хочу возвращать!

Наверное, есть лучший выход. Можете ли вы мне помочь?

Спасибо за ваше время и помощь!

6
задан Jorge Diz 3 March 2011 в 02:14
поделиться