/// <summary>
        /// <see cref="ISequenceFilter{T, TContext}"/> をフィルターパイプラインに追加します。
        /// </summary>
        /// <typeparam name="T">フィルター処理の対象となる要素の型。</typeparam>
        /// <typeparam name="TContext">フィルター処理のコンテキストを表す型。</typeparam>
        /// <param name="pipeline"><see cref="IPipelineBuilder{T, TContext}"/> インスタンス。常に非 <c>null</c>。</param>
        /// <param name="filter"><typeparamref name="T"/> のシーケンスをフィルター処理する <see cref="ISequenceFilter{T, TContext}"/> インスタンス。常に非 <c>null</c>。</param>
        /// <returns>自身の <see cref="IPipelineBuilder{T, TContext}"/> インスタンス。常に非 <c>null</c>。</returns>
        public static IPipelineBuilder <T, TContext> Add <T, TContext>(this IPipelineBuilder <T, TContext> pipeline, ISequenceFilter <T, TContext> filter)
        {
            Debug.Assert(pipeline != null);
            Debug.Assert(filter != null);

            return(pipeline.Add(filter.ExecuteAsync));
        }
        /// <summary>
        /// フィルターデリゲートをフィルターパイプラインに追加します。
        /// </summary>
        /// <typeparam name="T">フィルター処理の対象となる要素の型。</typeparam>
        /// <typeparam name="TContext">フィルター処理のコンテキストを表す型。</typeparam>
        /// <param name="pipeline"><see cref="IPipelineBuilder{T, TContext}"/> インスタンス。常に非 <c>null</c>。</param>
        /// <param name="filter"><typeparamref name="T"/> のシーケンスをフィルター処理するデリゲート。常に非 <c>null</c>。デリゲートのパラメーター及び戻り値、戻り値の各要素も常に非 <c>null</c>。</param>
        /// <returns>自身の <see cref="IPipelineBuilder{T, TContext}"/> インスタンス。常に非 <c>null</c>。</returns>
        public static IPipelineBuilder <T, TContext> Add <T, TContext>(
            this IPipelineBuilder <T, TContext> pipeline
            , Func <IEnumerable <T>, TContext, SequenceFilterFunc <T>, Task <IEnumerable <T> > > filter
            )
        {
            Debug.Assert(pipeline != null);
            Debug.Assert(filter != null);

            return(pipeline.Add(next => {
                Debug.Assert(next != null);

                return (source, context) => {
                    Debug.Assert(source != null);
                    Debug.Assert(context != null);

                    return filter(source, context, src => next(src, context));
                };
            }));
        }