From a user perspective, <! and >! are not functions, since they can't be used as functions inside a go block; e.g. (go (apply <! ...))
is not a valid form. This is a problem, since it 1) causes confusion among users, and 2) causes bugs in other macros, e.g. CLJ-2291.
Proposed solution: make <! and >! macros.
Backwards compatibility: the change shoudn't introduce any breaking changes, since <! cannot be used as a function anyway. The change will introduce a mismatch between <!! and <!, one being a function and the other not, but that mismatch is in line with the differences in the semantics between the two.
Potentially, it would also move ">! used not in (go ...) block"-type errors to compile-time, cleanly solving some issues reported earlier, e.g.: (link: https://dev.clojure.org/jira/browse/ASYNC-168?focusedCommentId=42881&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-42881 text: ASYNC-168)