これは私の古い質問へのフォローアップです。
XML を検証する必要があるとします。
<a><a1/><a2/><a3/></a>
ルートに、、および(この順序で)のa
子があることを確認する必要があります。a1
a2
a3
List
(の代わりにscalaz.Validation
) とWriter
モナドを使用して、検証エラーを収集したいと思います。そこで、次のような一連の 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")
それは理にかなっていますか?どのように修正/簡素化しますか?