Для этого вы можете использовать ArrowState экземпляр SLA .
Пример: предположим, нам нужно объединить все текстовые элементы второго уровня.
Prelude Text.XML.HXT.Core> fst $ runSLA (xread >>> getChildren >>> getChildren >>> isText >>> getText >>> changeState (++)) "" "<xml><item>a</item><item>b</item></xml>"
"ab"
Обратите внимание, что вы не можете использовать IO
внутри SLA
, поскольку у него нет ArrowIO
экземпляра.
Надеюсь, это то, что вам нужно.