Programming and reasoning with algebraic effects and dependent types
a verified staged interpreter is a verified compiler .