Type-Directed Program Synthesis