Programming and reasoning with algebraic effects and dependent types
Tagless staged interpreters for typed languages