There is a dimension of programming language design with imperative programs on one side and declarative programs on the other. This dimension corresponds to that across telling a computer how to get a result versus what result to get, where imperative languages embody the former and declarative languages the latter. Effect -- the impacts programs have on outer, implicit contents (e.g. writing to memory, printing "hello world" to the console) -- are intuitive in the imperative but frustrating in the declarative framework. Henry's thesis builds up a way to implement imperative-styled effects in a completely pure declarative language.