public static Result2 <TOut, TFailure> Continue <TSuccess, TOut, TFailure>(
            this Result2 <TSuccess, TFailure> result,
            Func <TSuccess, Result2 <TOut, TFailure> > onsucces,
            Func <TFailure, Result2 <TOut, TFailure> > onfailure)
        {
            if (onsucces == null)
            {
                throw  new ArgumentNullException(nameof(onsucces));
            }
            if (onfailure == null)
            {
                throw new ArgumentNullException(nameof(onfailure));
            }

            if (result.IsSuccess)
            {
                return(result.OnSuccess(onsucces));
            }

            return(onfailure(result.FailureResult));
        }