Cats.validate、ValidatedNel[+E,+A]和Validated[+E,+A]有什么区别

Cats.validate, what's the difference between ValidatedNel[+E,+A] and Validated[+E,+A]

我正在学习如何使用 Cats.Validate 验证数据。 我不确定 ValidatedNel[+E,+A]Validated[+E,+A] 之间有什么区别? 我知道 ValidatedNel 定义为:

type ValidatedNel[+E, +A] = Validated[NonEmptyList[E], A]

但是无论如何,Validated[NonEmptyList[E], A]Validated[+E,+A] 有什么区别? 什么时候使用一种或另一种更好?在决定使用哪个时我必须考虑什么?

正如您已经正确提到的那样,ValidatedNel 只是 Validated 的类型别名。唯一的区别是你想如何收集你的验证 errors.With ValidateNel 错误将在 NonEmptyList 中收集,但是如果你想在类型级别上证明你将只有唯一的您可以定义自己的错误 type ValidatedNes[+E, +A] = Validated[NonEmptySet[E], A].

换句话说,您可以将 ValidatedNel 作为建议的默认验证结构,将 Validated 作为更底层的结构,用于 ValidatedNel 未涵盖的情况。