Здравствуйте.
Пытаясь написать функциональный парсер (тему изучал по "Higher-Order Functions for Parsing∗" Graham Hutton), наткнулся вот на какую проблему:
Разбираемый текст состоит из обычного текста и текста обрамленного тэгами. Начльный и конечный тэг обычно имеют одинаковое "начертание" и тэги могут быть сколь угодно вложенными (но при этом вложенные тэги отличаются).
То есть, на примере, если мы имеем тэги "aa" и "bb", то корректным текстом считается — "t
aatt
bbtt
bbttt
aat" и разбиратся как то так — [(Text "t"), (aa [(Text "tt"),(bb [(Text "tt")], (Text "ttt")]), (Text "t")]
data TagNode = Text* | Tag Text* TagNode Text* Tag
Подскажите пожалуйста, как (хотя бы общие принципы) лучше и проще реализовать парсинг пободного текста, с учетом того, что количество тэгов может быть расширено. Можно просто дать ссылки на простую реализацию подобного парсера (смотрел код hxml-0.2 но код довольно сложен для меня).
Прошу прощения, если вопрос показался довольно простым, — Haskell начал изучать сравнительно недавно.