/// <summary> /// Removes non-matching nodes and replaces them with <see cref="FilterNode{TFilter}.True"/> /// </summary> /// <typeparam name="TFilter"></typeparam> /// <param name="filter"></param> /// <param name="predicate"></param> /// <returns></returns> public static IFilterNode <TFilter> Where <TFilter>( this IFilterNode <TFilter> filter, Func <TFilter, bool> predicate) where TFilter : IFilter => filter.Bind <TFilter>(leafFilter => { if (predicate(leafFilter)) { return(leafFilter.ToLeafFilterNode()); } return(FilterNode <TFilter> .True); });