Conversation

Replying to
It's taken a bit to get my head around... it seems there's lots of similarities to elaboration (where you take the concrete syntax and turn it into the core language, checking that it's well-typed in the process).
1
One thing I had to get my head around was how to compile a bidirectionally typed core language. You end up making a bidirectional compiler too: fn synth(&Context, &source::Term) -> (target::Term, target::Type) fn check(&Context, &source::Term, &target::Type) -> target::Term
1
2