https://medium.com/@adisalimgereev/implementing-type-inference-in-rust-part-1-unification-34b789d3df6a