public TransactionNode <TInput, TNewOutput, TOutput, TNewErrorInfo> Then <TNewOutput, TNewErrorInfo>(Operation <TOutput, TNewOutput, TNewErrorInfo> operation)
            where TNewErrorInfo : ErrorInfo, new()
        {
            var tn = new TransactionNode <TInput, TNewOutput, TOutput, TNewErrorInfo>(operation);

            tn.SetParent(this);
            return(tn);
        }
 protected void SetParent <TAny, TAny2>(TransactionNode <TInput, TParentOutput, TAny, TAny2> parent)
     where TAny2 : ErrorInfo, new()
 {
     this.Parent = parent;
 }