A moment ago, I wrote:
> I’ve invited A. Ellett (the fellow who requested \bool_case on TeX.SE)
> to join this thread and explain, but my guess would be that he's got a
> group of booleans, only one of which is supposed to be set at any
> given time: a selection from a set of mutually-exclusive options, for
> example.


This use of named options feels like it should be reasonably common in
user-facing code, but Expl3 doesn’t have an obvious way of managing this.

I recently asked “Can I refer to key value in general code?” (
http://tex.stackexchange.com/q/120258/2966). My initial thought (somewhat
bizarre, I’ll admit) was to save the option is a quark, set equal to one of
a group of quarks.

Enrico pointed me in the direction of string comparisons, and I’ve moved to
using code like this:

    \keys_define:nn { jcsfonts }
      { font .choice_code:n = \tl_gset:NV \g_jcsfonts_option_tl
\l_keys_choice_tl }

    \str_case:Vnn \g_jcsfonts_option_tl
      { { cmodern } {} % Computer Modern is LaTeX default
        { kpfonts } { \RequirePackage{kpfonts} }
      } { \msg_error… }

This works, but does not feel entirely satisfactory. Given my C background,
I’m tempted to write an enum package, loosely wrapping l3int, to be used
something like this:

    \enum_case:Vnn \g_jcsfonts_option_enum
      { \c_jcsfonts_cmodern_enum {}
        \c_jcsfonts_kpfonts_enum { \RequirePackage{kpfonts} }
      } { \msg_error… }

It’s too early for anything to be idiomatic LaTeX3, but what should
*become* idiomatic?

—Joel