Я пытаюсь проанализировать XML, но хочу фильтровать и извлекать только определенное количество дочерних элементов из данного узла. Например:
<root>
<node id="a" />
<node id="b" />
<node id="c" />
<node id="d" />
</root>
И тогда, если я выполню стрелку getChildren >>> myFilter 2
, я верну только узлы с идентификаторами «a» и «b».
Интуиция подсказывает, что я должен использовать State Arrow для отслеживания, но я не знаю, как это сделать.
Я пытался сделать это сам, но это не совсем то, что я хочу, выглядит не очень элегантно и не работает. Я пытаюсь запустить свою цепочку стрелок с runSLA
и целочисленным параметром в качестве начального состояния, а затем определяю:
takeOnly :: IOSLA Int XmlTree XmlTree
takeOnly = changeState (\s b -> s-1)
>>> accessState (\s b -> if s >= 0 then b else Nothing)
Но, конечно, я не могу вернуть Nothing
, мне нужно вернуть XmlTree. Но я вообще ничего не хочу возвращать!
Там, вероятно, лучший выход. Можешь мне помочь?
Спасибо за ваше время и помощь!