Most Haskell effect libraries including Heftia use integer IDs for so‑called "effect tags" to identify which effect to handle. Concretely, this ID is the index of that effect in a type‑level list representing the effect set. For example, in the set
{Reader[String], Reader[Double], Reader[Char]}
the tag ID of State[Char]
is 2
.
Effect handling matches on these tag IDs at runtime to determine which effect to interpret. The tag IDs themselves, however, are computed at compile time via type‑level computation.