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

如何在Scala中使用monoid检查XML?,xml,scala,monoids,Xml,Scala,Monoids,假设我需要验证输入XML,例如 <a> <a1>a1a1a1</a1> <a2>a2a2a2</a2> <a3/> </a> 由于Status是一个幺半群(与list同构),那么Validate[a]也是一个幺半群,我们可以用+ val a1: ValidateNode = label("a1") |+| text("a1a1a1") val a2: ValidateNode = label("a2

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

<a>
  <a1>a1a1a1</a1>
  <a2>a2a2a2</a2>
  <a3/>
</a>
由于
Status
是一个幺半群(与list同构),那么
Validate[a]
也是一个幺半群,我们可以用
+

val a1: ValidateNode = label("a1") |+| text("a1a1a1")
val a2: ValidateNode = label("a2") |+| text("a2a2a2") 
val a3: ValidateNode = label("a3")
val a:  ValidateNode = label("a") |+| child(a1) |+| child(a2) |+| child(a3) 

这有意义吗?您将如何修复/改进它?

这看起来很合理,但如果您使用Scalaz(?)有没有理由不直接使用
ValidationNel
?我曾考虑过
ValidationNel[String,Unit]
,但感觉有点过头了。我真正需要的只是一个列表,不是吗?是的,
ValidationNel[String,Unit]
list[String]
是同构的,但前者更清楚地说明了您的意图(并且
验证
上的一些组合符可能很有用,这取决于您正在做的事情)。嗯。。。也许我应该重新考虑
ValidationNel
。谢谢你的意见。
val a1: ValidateNode = label("a1") |+| text("a1a1a1")
val a2: ValidateNode = label("a2") |+| text("a2a2a2") 
val a3: ValidateNode = label("a3")
val a:  ValidateNode = label("a") |+| child(a1) |+| child(a2) |+| child(a3)