Document usage for case with non-readable constants
Description
Problem
It is pretty obscure how to get constant-time dispatch for e.g. Enums, even if user knows about case.
Proposal
The possibility to dispatch to arbitrary constants with case, by wrapper macro, should be documented.
Wording
Should it warn against doing that with unstable values?
Should it mention anything else than java Enums?
Case Techniques
Case is documented for accepting all readable forms as test-constants. However, it can also be made to use any compile-time-known constants as test-constants, by wrapping it in another macro.
Sometimes this is appropriate, e.g. when dispatching on a java Enum. Other times, less so, e.g. when dispatching on objects whose hash changes when the vm is restarted (breaks AOT).
Implications
This technique is an application of a more general technique: Passing non-literals to a macro from another macro. Are there other macros that have use cases like this?
Problem
It is pretty obscure how to get constant-time dispatch for e.g. Enums, even if user knows about case.
Proposal
The possibility to dispatch to arbitrary constants with case, by wrapper macro, should be documented.
Wording
Should it warn against doing that with unstable values?
Should it mention anything else than java Enums?
Case Techniques
Case is documented for accepting all readable forms as test-constants. However, it can also be made to use any compile-time-known constants as test-constants, by wrapping it in another macro.
Sometimes this is appropriate, e.g. when dispatching on a java Enum.
Other times, less so, e.g. when dispatching on objects whose hash changes when the vm is restarted (breaks AOT).
Implications
This technique is an application of a more general technique: Passing non-literals to a macro from another macro.
Are there other macros that have use cases like this?
References
https://groups.google.com/d/topic/clojure/3yGjDO2YnjQ/discussion