"Type-Driven Program Synthesis" by Nadia Polikarpova