Я пытаюсь разобрать 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. Но я не Я вообще ничего не хочу возвращать!
Наверное, есть лучший выход. Можете ли вы мне помочь?
Спасибо за ваше время и помощь!