;; A foreign function's address is not a Flan function value. A Flan ;; function's emitted signature ends with the environment and the transfer ;; channel and a C one does not, so nothing could call the resulting pointer ;; correctly — and the gap is wider since capture arrived, because a Flan ;; function value is two words and a C symbol is one — and an ;; aggregate crossing the boundary is flattened by a generated shim, which the ;; raw symbol knows nothing about. Refused for what it is, with the wrapper ;; named as the way to get one. (declare c-abs [n i32] i32 "abs") (defn use [f (Fn [i32] i32)] i32 (f 3)) (defn main [] i32 (println (use c-abs)) 0)