123456789101112131415161718192021222324252627282930313233343536373839404142(** This module extends {{!Base.Printf}[Base.Printf]}. *)open!ImportincludeBase.Printf(** @open *)leteprintf=Stdio.Out_channel.eprintfletfprintf=Stdio.Out_channel.fprintfletkfprintf=Stdio.Out_channel.kfprintfletprintf=Stdio.Out_channel.printf(** print to stderr; exit 1 *)letexitffmt=ksprintf(funs()->eprintf"%s\n%!"s;exit1)fmt;;typeprintf={printf:'a.('a,Buffer.t,unit)format->'a}letcollect_to_stringf=letbuf=Buffer.create64inletdone_=reffalseinletprintffmt=kbprintf(funbuf->if!done_then(Buffer.resetbuf;raise_s[%message"[printf] used after [collect_to_string] returned"]))buffmtinf{printf};done_:=true;letoutput=Buffer.contentsbufinBuffer.resetbuf;output;;