如何在Scala中使用monoid检查XML?
假设我需要验证输入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
<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)