public static function ands(callable ...$predicates) : callable
    {
        return function ($element) use ($predicates) {
            foreach ($predicates as $predicate) {
                if (!self::call($predicate, $element)) {
                    return false;
                }
            }
            return true;
        };
    }