Проверка последовательности элементов XML с помощью монады Writer

Это продолжение моего старого вопроса.

Предположим, мне нужно проверить XML:

<a><a1/><a2/><a3/></a>

Мне нужно убедиться, что рут a имеет детей a1, a2, а также a3 (в этом порядке).

Я хотел бы использовать List (вместо scalaz.Validation) а также Writer монада для сбора ошибок валидации. Поэтому я определяю функцию для проверки последовательности элементов XML следующим образом:

type Validate = List[Elem] => Writer[List[String], List[Elem]]

Теперь я могу добавить функцию для проверки метки элемента XML:

val label: String => Validate = ...

Если я переопределить Validate как Kleisli Я смогу сочинить Validate функции с andThen:

val children: Validate = label("a1") andThen label("a2") andThen label("a3")

Есть ли смысл? Как бы вы исправили / упростили это?

0 ответов

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