;; An fn carries parameter names and no types — that is the surface syntax — ;; so it takes them from the position it is written in. An argument position ;; says what is wanted, because the callee's signature is threaded into every ;; argument; a let binding does not, and is refused saying so. ;; ;; The one thing capture did not change. It is about where the *types* come ;; from and not about what the body may see, so an fn is still written where ;; something says what it takes. (defn main [] i32 (let [f (fn [x] (* x 2))] (println (f 3))) 0)