  Type systems usually characterize the shape of values but not their free
variables. However, many desirable safety properties could be guaranteed if one
knew the free variables captured by values. We describe CCsubBox, a calculus
where such captured variables are succinctly represented in types, and show it
can be used to safely implement effects and effect polymorphism via scoped
capabilities. We discuss how the decision to track captured variables guides
key aspects of the calculus, and show that CCsubBox admits simple and intuitive
types for common data structures and their typical usage patterns. We
demonstrate how these ideas can be used to guide the implementation of capture
checking in a practical programming language.
