From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.2 required=5.0 tests=AWL,SPF_NEUTRAL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from discorde.inria.fr (discorde.inria.fr [192.93.2.38]) by yquem.inria.fr (Postfix) with ESMTP id 548D7BC0A for ; Sat, 17 Mar 2007 14:31:28 +0100 (CET) Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.168]) by discorde.inria.fr (8.13.6/8.13.6) with ESMTP id l2HDVRGx024673 for ; Sat, 17 Mar 2007 14:31:27 +0100 Received: by ug-out-1314.google.com with SMTP id k3so912778ugf for ; Sat, 17 Mar 2007 06:31:27 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=cmQkk2tErkWVwoPm3m+zhOJgVq2hv1cBhQv4O/vWWZIZnIvU3bUyFpJkcfTmdoGd5XcfmAwUmOn7bze85VoXVuWIQYAawro7xQ3FItZxCccGpxWbxDq1qMo5CdXjqLT39CttTQPCjMf9Wt4R/F8qhd6t/ZvKU0PWChep/prpVmA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=AeKrTYn5PX0z1i9ES9NKuY7mqNCfHDPgqfKeyvApWXecpevsSKziI/bKNz1i5k2sJW9BJcDiTWGWlcLebghdiiMVVoZp7AO/pCHkqglmewQ0/+obkA7kg0tG9nYLUURea997hS7YPu40wRCMt23ae+4mTNE0v6n1D8/1JHWuckU= Received: by 10.115.106.7 with SMTP id i7mr1092349wam.1174138286667; Sat, 17 Mar 2007 06:31:26 -0700 (PDT) Received: by 10.114.183.4 with HTTP; Sat, 17 Mar 2007 06:31:26 -0700 (PDT) Message-ID: Date: Sat, 17 Mar 2007 14:31:26 +0100 From: "Nicolas Pouillard" To: "Till Varoquaux" Subject: Re: [Caml-list] Printf issues Cc: "ocaml ml" In-Reply-To: <9d3ec8300703161134o3866014bie47bf052b20b722@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <9d3ec8300703161134o3866014bie47bf052b20b722@mail.gmail.com> X-j-chkmail-Score: MSGID : 45FBEDAF.000 on discorde : j-chkmail score : X : 0/20 1 0.000 -> 1 X-Miltered: at discorde with ID 45FBEDAF.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; printf:01 sprintf:01 printf:01 sprintf:01 sig:01 val:01 val:01 struct:01 fmt:01 buffer:01 buffer:01 fmt:01 reuse:01 fprintf:01 wrote:01 On 3/16/07, Till Varoquaux wrote: > I having typing issues with sprintf: > > # Printf.sprintf "%a";; > - : (unit -> '_a -> string) -> '_a -> string = > > whereas: > > # Printf.printf "%a";; > - : (out_channel -> '_a -> unit) -> '_a -> unit = > > Am I missing something out here? If not why can't sprintf accept the > same printers as the other? That's specified this way. It's why I don't often use sprintf but rather these one (mainly sbprintf): module Format_plus : sig val ksbprintf : (string -> 'a) -> ('b, Format.formatter, unit, 'a) format4 -> 'b val sbprintf : ('a, Format.formatter, unit, string) format4 -> 'a end = struct open Format let ksbprintf g fmt = let buff = Buffer.create 42 in let f = formatter_of_buffer buff in kfprintf (fun f -> (pp_print_flush f (); g (Buffer.contents buff))) f fmt let sbprintf fmt = ksbprintf (fun x -> x) fmt end That way it's more uniform and I can reuse the same printers for fprintf and sbprintf. Hope this helps, -- Nicolas Pouillard