-- We don't use polymorphism here, since type args aren't erased -- at runtime and we want simple output code. let fst = (\x y -> x) :: Nat -> Nat -> Nat let snd = (\x y -> y) :: Nat -> Nat -> Nat -- should output 2 let main = fst (snd 1 2) 3 -- Both fst and snd compile to three functions. @fst and @_lambda8 are -- just building up closures, while @_lambda10 does the actual work (which -- here is trivial). Likewise with @snd, @_lambda3 and @_lambda5. -- @_main does all the work of making the function calls and stringing -- their results together. @_main is a stub function from libs/ that just -- invokes printf().