Добавление состояния в синтаксический анализ HXT - PullRequest
2 голосов
/ 22 января 2011

Я пытаюсь написать стрелку, которая будет генерировать пронумерованные элементы из анализа XML с HXT.Кажется, что это должно быть сделано со стрелкой состояния, как монада состояния, но все примеры, которые я могу найти в пакете HXT и методы для доступа к состоянию ( XmlState ), используют IOStateArrow, и я быгораздо лучше сохранить чистоту, чтобы упростить процесс тестирования с помощью StateArrow.Существуют ли такие варианты?Если нет, то как мне добавить состояние к анализу HXT, не прибегая к запуску стрелки в IO?

1 Ответ

3 голосов
/ 22 января 2011

Для этого вы можете использовать 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 экземпляра.

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

...