Проверка последовательности элементов 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")
Есть ли смысл? Как бы вы исправили / упростили это?