anchor.diff:      let validationNel (x: Result<_,_>) : (Validation<NonEmptyList<'e>,'a>) = (liftResult result) x
       #endif
   
  -    /// Leaves the validation unchanged when the predicate holds, or
  -    /// fails with [e] otherwise.
  -    ///
  -    /// This can be thought of as having the less general type:
  -    ///
  -    /// ensure : 'e -> ('a -> 'bool) -> Validation<'a,'e> -> Validation<'a,'e>
       [<System.Obsolete("This function will not be supported in future versions.")>]
       let ensure (e: 'e) (p: 'a-> bool) = function
           | Failure x -> Failure x
           | Success a -> validate e p a
  +
  +    /// Creates a safe version of the supplied function, which returns a Validation<exn,'U> instead of throwing exceptions.
  +    let protect (f: 'T->'U) x =
  +        try
  +            Success (f x)
  +        with e -> Failure e
   
   
       let inline _Success x = (prism Success <| either Ok (Error << Failure)) x
  
positive.code: open FSharpPlus.Data
  open System.ComponentModel
  
  // Validation is based on AccValidation from https://github.com/qfpl/validation
  
  /// A 'Validation' is either a value of the type 'err or 'a, similar to 'Result'. However,
  /// the 'Applicative' instance for 'Validation' /accumulates/ errors using a 'Semigroup' on 'err.
  /// In contrast, the Applicative for 'Result' returns only the first error.
  ///
  
negative.code:         match t with
          | Failure a -> f z a
          | Success a -> g z a
  