private bool IsPredicate(ITypeSymbol type)
            {
                if (!ExpressionType.Equals(type.OriginalDefinition, SymbolEqualityComparer.Default) ||
                    !(type is INamedTypeSymbol namedType))
                {
                    return(false);
                }

                var actualFuncType = namedType.TypeArguments[0];

                if (!FuncType.Equals(actualFuncType.OriginalDefinition, SymbolEqualityComparer.Default) ||
                    !(actualFuncType is INamedTypeSymbol actualFuncNamedType))
                {
                    return(false);
                }

                var returnType = actualFuncNamedType.TypeArguments[1];

                if (returnType.SpecialType != SpecialType.System_Boolean)
                {
                    return(false);
                }

                return(true);
            }