Predicate function negation: when the argument of ! is a function, it returns a function which computes the boolean negation of f.
Hence, !iseven is a function that returns true if the argument is not even. I think it would be useful to generalize this behavior for infix operators, like ==, ≈, etc. Currently !== has its own definition, but !≈ is undefined. If ! worked automatically for infix comparison operators, !≈ would work.
Try tab completing \napprox for negating isapprox. If all of the Boolean binary operators already have negated forms, I don’t see much to be gained from !
Well, the same could be said about having !fun define a new function that negates the result of fun; you could just define !fun directly. Still people find the automatic negation by ! useful.
Maybe I was not clear: I meant parsed as it would be for ordinary functions (eg as now), but with the result allowed in an infix position.
However, I agree with @stevengj: given that infix ops already have a negated version which is more compact, I don’t see the pressing need for this. Presumably people are using infix for brevity, so the shorter the better. But perhaps you could open an issue so that this is given due consideration in the post-1.0 era.
You can, of course, use one of the many Unicode comparison operators that are parsed as infix operators by Julia but which don’t have a built-in definition in Base, like ≷. But for these it would typically be more natural to define e.g. ≹(x,y) = !(x ≷ y) using the corresponding Unicode negated operator.
On the other hand, there are some oddball ones like ⩷ that don’t seem to have negated versions in Unicode.
It does not look nice to mix in and ∉ in the same code
I may be conservative about using unicode symbols
Many unicode symbols don’t look very nice in my preferred coding font, typically they are too small and hard to read compared to the surrounding code
Some unicode symbols may not have negated forms at all.
I may want to make a particular point, e.g. that x !< y is an unusual case, and want it to be visually distinctive.
I’m a bit surprised that the preference seems to be relying on the existence of special unicode negated versions, rather than relying on simple composition.
Compositions that require changes to the parser are always going to get some pushback — parser changes require a lot of care because there is so much room for unintended consequences.