public static async Task <Maybe <T> > WhereAsync <T>( this Maybe <T> @this, Func <T, Task <bool> > predicate) { if (predicate is null) { throw new Anexn(nameof(predicate)); } return(await @this.BindAsync(__).ConfigureAwait(false)); async Task <Maybe <T> > __(T x) => await predicate(x).ConfigureAwait(false) ? @this : Maybe <T> .None; }