如何在Scala中使用monoid检查XML?

时间:2015-06-12 12:45:39

标签: xml scala monoids

假设我需要验证输入XML,例如

<a>
  <a1>a1a1a1</a1>
  <a2>a2a2a2</a2>
  <a3/>
</a>

我需要确保其根元素标记为"a",子标记为"a1""a2""a3"和文字"a1a1a1",{{分别为1}}和"a2a2a2"

我可以按如下方式定义基本验证函数:

""

由于type Status = ... // either Ok or list of error messages type Validate[A] = A => Status type ValidateNode = Validate[scala.xml.Node] val label(l: String): ValidateNode = ... // trivial val text(t: String): ValidateNode = ... // trivial val child(vn: ValidateNode) = ... // find such a child "c" that "vn(c)" is Ok 是一个幺半群(与列表同构),因此Status也是一个幺半群,我们可以用Validate[A]

组成验证函数
|+|

有意义吗?你会如何修复/改进它?

0 个答案:

没有答案