Static Analysis and Code Optimizations in Glasgow Haskell Compiler
A correspondence between type checking via reduction and type checking via evaluation