It is pretty obscure how to get constant-time dispatch for e.g. Enums, even if user knows about case.
The possibility to dispatch to arbitrary constants with case, by wrapper macro, should be documented.
- Should it warn against doing that with unstable values?
- Should it mention anything else than java Enums?
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).
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?