# Tags and Context — Compile-Time Service Lookup

Chapter 4 showed how `R` encodes dependencies as types. We used simple types like `Database` and `Logger`. That works for small programs, but breaks down as the dependency graph grows.

This chapter introduces the solution: **Tags**. Tags give values compile-time identities, and **Context** assembles them into a heterogeneous list that the compiler can query by name, not by position.

By the end you'll understand why effectful uses this structure instead of tuples, and how to extract exactly the service you need from any environment.
