Validate is a specialisation of Validation, so the module does not re-export the Validation constructors (they do not have the same arity) so if you want to pattern match a Validate value you will have to use the Validation constructors:
match validated_value with
| Validation.Valid x -> x
| Validation.Invalid errors ->
Format.sprintf "Error: %a" (Nonempty_list.pp Exn.pp) errors
As you can see, it is in the definition of the Preface_specs.APPLICATIVE that Validate differs from Try. The 'errors part must be a Preface_specs.SEMIGROUP to allow for the accumulation of errors.