I've understood how C code is compiled to Assembly, from Computer Architecture class. It was not that difficult for me, possibly because these two languages are both imperative language.
In Programming Language class, I've learned how functional language can be composed via AST, and tried to make my own small interpreted language.
The thing is, how this functional language is compiled to assembly code? What I've learned is, functional languages are based on lambda calculus, of which the minimal unit of computation is "expression", not the same as the unit of imperative languages, which is "statement" with semicolon.
I tried to analyze GHC code on my own, but it was way too hard and time consuming for me. All I want is some intuition about how lambda calculus-based languages can be compiled to assembly code.