Compile-time exhaustiveness
Forget a branch and TypeScript stops you.
Matchers narrow the discriminator down to never. Miss a case and the compiler points at the missing key — no opt-in .exhaustive() call required.
const label = match(state)({idle: () => 'tap to load',loading: () => '…',success: ({ data }) => `${data.length}`,error: ({ reason }) => `${reason}`,});