Validated
Validated provides projections for cats.data.Validated. Valid(r) holds a success value and Invalid(l)
holds an error value. The two projections route each side into the pipeline independently, yielding
Status.Success in both the matching and non-matching cases.
Validated.Valid[T]extracts the success value; yields nothing forInvalid.Validated.Invalid[T]extracts the error value; yields nothing forValid.
Both are polymorphic singletons. Use Validated.Valid[T] and Validated.Invalid[T] to obtain typed
Projection[cats.data.Validated[?, T], T] and Projection[cats.data.Validated[T, ?], T] respectively.
import h8io.stages.cats.*
val validStage = Validated.Valid[String]
// validStage: h8io.stages.base.Projection[Validated.Validated[?$5, String], String] = <function1>
val invalidStage = Validated.Invalid[String]
// invalidStage: h8io.stages.base.Projection[Validated.Validated[String, ?$2], String] = <function1>
validStage(success)
// res0: h8io.stages.Yield[Validated.Validated[?$5, String], String, Nothing] = Some(
// out = "hello",
// status = Success,
// evolution = <function1>
// )
validStage(failure)
// res1: h8io.stages.Yield[Validated.Validated[?$5, String], String, Nothing] = None(
// status = Success,
// evolution = <function1>
// )
invalidStage(success)
// res2: h8io.stages.Yield[Validated.Validated[String, ?$2], String, Nothing] = None(
// status = Success,
// evolution = <function1>
// )
invalidStage(failure)
// res3: h8io.stages.Yield[Validated.Validated[String, ?$2], String, Nothing] = Some(
// out = "error",
// status = Success,
// evolution = <function1>
// )