You can do a lot with the format concatenation operator (^^): let prefixprintf prefix o fmt = Printf.fprintf o (prefix ^^ fmt) let suffixprintf suffix o fmt = Printf.fprintf o (fmt ^^ suffix) # prefixprintf "foo: " stdout "bar %d" 5;; foo: bar 5- : unit = () # suffixprintf ": foo" stdout "bar %d" 5;; bar 5: foo- : unit = () The type is very general, you can prefix or suffix with more than a litteral string: # suffixprintf ": foo %d" stdout "bar %d" 5 6;; bar 5: foo 6- : unit = () On Fri, Aug 12, 2016 at 2:44 PM, Soegtrop, Michael < michael.soegtrop@intel.com> wrote: > Dear Ocaml Users, > > > > it is quite common to have wrappers for printf to e.g. print errors or > warnings with some context. Prefixing is easy to do in OCaml (honestly it > took me a short while to figure it out): > > > > let prefixprintf (oc : out_channel) (fmt : ('a, out_channel, unit) format) > : 'a = > > Printf.fprintf oc "Prefix: "; > > Printf.fprintf oc fmt > > ;; > > > > I wonder how I would postfix something. Even converting the formatted > output first to a string and then output it together with the postfix > doesn’t seem to be easy, because the formatting function must be the last > call in the function, since it has to produce the returned function. Is > there some way to make a variadic lambda expression or some other magic to > handle such cases? A similar question would be how I can print the same > formatted string twice. > > > > I don’t have an application for this, I ask this out of pure OCaml > curiosity. So I am not so much interested in workarounds, more in an answer > to the question how I can return a function of type ‘a without more or less > directly calling some variant of printf. > > > > Best regards, > > > > Michael > > > > Intel Deutschland GmbH > Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany > Tel: +49 89 99 8853-0, www.intel.de > Managing Directors: Christin Eisenschmid, Christian Lamprechter > Chairperson of the Supervisory Board: Nicole Lau > Registered Office: Munich > Commercial Register: Amtsgericht Muenchen HRB 186928 >