Bidirectional type checking step by step (in Ruby)
luizpvas.github.io