https://medium.com/@andrew_johnson_4/building-a-compiler-for-a-modern-functional-language-from-scratch-in-rust-part-2-evaluation-b30b68d450d9