Добавление состояния к разбору 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 пример.

Надеюсь, это то, что вам нужно.

Другие вопросы по тегам