Добавление состояния к разбору HXT
Я пытаюсь написать стрелку, которая будет генерировать пронумерованные элементы из анализа XML с HXT. Кажется, что это должно быть сделано со стрелкой состояния, как монада состояния, но все примеры, которые я могу найти в пакете HXT и методах доступа к состоянию ( XmlState), используют IOStateArrow, и я бы предпочел сохранить его чистым для упростить процесс тестирования с помощью StateArrow. Существуют ли такие варианты? Если нет, то как мне добавить состояние к анализу HXT, не прибегая к запуску Arrow в IO?
1 ответ
Для этого вы можете использовать экземпляр соглашения об уровне обслуживания ArrowState. Пример: предположим, нам нужно объединить все текстовые элементы второго уровня.
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
пример.
Надеюсь, это то, что вам нужно.