Basically what we did for Mezzo. All printers are intended to work with Buffer.t and %a; then, define a bunch of variants of fprintf, iprintf, kprintf, sprintf, eprintf that work with Buffer.t

https://github.com/protz/mezzo/blob/master/lib/MzString.ml

On 7/8/16 3:53 AM, Gabriel Scherer wrote:
For non-formatted printing, I find that bprintf (using Buffer.t) is the more composable primitive.

On Fri, Jul 8, 2016 at 4:16 AM, Rodolphe Lepigre <rodolphe.lepigre@univ-savoie.fr> wrote:
Thanks for your answer!

> I don't think this is possible with Printf.  But if you can switch to Format
> you can use Format.asprintf instead.

Yes, I know it is possible to use Format. This is actually what I am doing
currently! However, I am not using any of the formating features, so I'd
like to switch to Printf to avoid going from channels to formatters all the
time...

>> Dear list,
>>
>> If I define two values
>>
>>   val p : type out_channel -> blop -> unit
>>   val e : blop
>>
>> then I can do something like
>>
>>   Printf.printf "%a" p e
>>
>> but I can't find a way to do something like
>>
>>   Printf.sprintf "%a" p e
>>
>> which is not well-typed. Is there any trick that I can use to avoid
>> changing the type of [p] to [blop -> string]?
>>
>> Cheers,
>>
>> Rodolphe

Cheers,

Rodolphe
--
Rodolphe Lepigre
LAMA, Université Savoie Mont Blanc, FRANCE
http://lama.univ-smb.fr/~lepigre/
On 08/07/2016 10:08, Nicolas Ojeda Bar wrote:

--
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