Alvaro Blazquez checa
11/23/2021, 9:09 AMValidated.applicative(validationSemigroup).tupled(Valid("foo"), Valid("bar")).fix()Alvaro Blazquez checa
11/23/2021, 9:09 AMval validationSemigroup: Semigroup<List<WebError>> = object : Semigroup<List<WebError>> {
override fun List<WebError>.combine(b: List<WebError>): List<WebError> =
Stream.concat(stream(), b.stream()).toList()
}Alvaro Blazquez checa
11/23/2021, 9:10 AMAlvaro Blazquez checa
11/23/2021, 9:12 AMValid("foo").zip(Valid("bar"), ::Pair)simon.vergauwen
11/23/2021, 9:12 AMval validationSemigroup: Semigroup<List<WebError>> = object : Semigroup<List<WebError>> {
override fun List<WebError>.combine(b: List<WebError>): List<WebError> =
this + b
}
Valid("foo").zip(validationSemigroup, Valid("bar"), ::Pair)Alvaro Blazquez checa
11/23/2021, 9:12 AMsimon.vergauwen
11/23/2021, 9:12 AMStream.concat inside Semigroup you can just use List.plus from Kotlin.simon.vergauwen
11/23/2021, 9:12 AMValidatedNel you can omit the semigroup parameter to zip.simon.vergauwen
11/23/2021, 9:13 AMList inside Invalid means it can also contain an empty list of errors, which typically isn’t possible.simon.vergauwen
11/23/2021, 9:14 AMNonEmptyList is just like List but has a minimum size of 1 instead of 0. It has special support for Validated in for example zip.Alvaro Blazquez checa
11/23/2021, 9:14 AMAlvaro Blazquez checa
11/23/2021, 9:15 AMAlvaro Blazquez checa
11/23/2021, 9:16 AMAlvaro Blazquez checa
11/23/2021, 9:16 AM