Program Synthesis With Types