A solution that works in this specific example and does not require to rewire the logic is to return the printing function inside a record with the right universal quantification: ... type debug = {fn: 'a. ('a, unit, string, unit) format4 -> 'a }[@@unboxed];; let udebug = {fn=debug} let give_fn () = Some udebug ... | Some {fn} -> fn "fn"; fn "fn param: %s" param -- Caml-list mailing list. Subscription management and archives: https://sympa.inria.fr/sympa/arc/caml-list Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs