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