<! and >! should be macros

Description

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.: ASYNC-168

Environment

None

Assignee

Unassigned

Reporter

jcr

Labels

None

Approval

None

Patch

None

Priority

Major
Configure