;; Coercion between the two function types goes one way only. A (CFn ...) ;; widens into a (Fn ...) through a per-signature thunk, and a (Fn ...) does ;; not narrow: there is nowhere for the environment to go, and nothing at this ;; definition can know whether there is one. ;; ;; Refused by the ordinary type message, which names both spellings and is the ;; right sentence for it: the fix is to widen the position, not to convert the ;; value. (defn apply-bare [f (CFn [i32] i32) x i32] i32 (f x)) (defn hand-on [f (Fn [i32] i32) x i32] i32 (apply-bare f x)) (defn main [] i32 0)