public void AddPredicateAndOptionFunc(DelegateFunc <Option <T>, bool> predicate, DelegateFunc <Option <T>, TResult> func) { _predicatesAndResults.Add(Tuple.Create(predicate, Union <DelegateFunc <T, TResult>, DelegateFunc <Option <T>, TResult>, TResult> .CreateSecond(func))); }