这是我的老问题的后续行动。
假设我需要验证一个 XML:
<a><a1/><a2/><a3/></a>
我需要确保根a
有孩子a1
,,a2
和a3
(按此顺序)。
我想使用List
( 而不是scalaz.Validation
) 和Writer
monad 来收集验证错误。所以我定义了一个函数来验证一系列 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")
这有意义吗?您将如何纠正/简化它?