2

这是我的老问题的后续行动。

假设我需要验证一个 XML:

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

我需要确保根a有孩子a1,,a2a3(按此顺序)。

我想使用List( 而不是scalaz.Validation) 和Writermonad 来收集验证错误。所以我定义了一个函数来验证一系列 XML 元素,如下所示:

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

现在我可以添加一个函数来验证 XML 元素的标签:

val label: String => Validate = ...

如果我重新定义ValidateKleisli我将能够用以下方式组合Validate函数andThen

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

这有意义吗?您将如何纠正/简化它?

4

0 回答 0