Computer programs are often factored into pure components - simple, total functions from inputs to outputs - and components that may have side effects - errors, changes to memory, parallel threads, abortion of the current loop, and so on. In this Element, the authors make the case that human languages are similarly organized around the give and pull of pure values and impure processes, and show how denotational techniques from computer science can be leveraged to support elegant and illuminating analyses of semantic composition in natural language.