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.1 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 mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id 302D1BC69 for ; Mon, 12 Nov 2007 02:21:07 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAAEo5N0dA6bjsnmdsb2JhbACPBgEBAQEHBAYRGA X-IronPort-AV: E=Sophos;i="4.21,402,1188770400"; d="scan'208";a="19171723" Received: from wr-out-0506.google.com ([64.233.184.236]) by mail4-smtp-sop.national.inria.fr with ESMTP; 12 Nov 2007 02:21:06 +0100 Received: by wr-out-0506.google.com with SMTP id c49so533004wra for ; Sun, 11 Nov 2007 17:20:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=1qiUsVAqDW+c+XKDWWBzcGxFP4/xfmoAJ8m2hJz4E/w=; b=LjA/ibNx82NwQ2rU0J/yjELJbIDCFx6NiNI2Iz0Jiucm4Q04MjBFzNy37yK7E6KipSUfcHKypE32AZzpmhRFL01GaqHZ4sIIx1CwDB2Fxd3Pwi5BCylY9s1y+uLp4PnRnPndDGvCCIMVrCjpP4CeZS7gU5EjNx25L6MpSu5p3Sw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=kTq6ZEvXwXEGX90TvA/jmBQePN4zhk/TAyQYSdWMDNnA+XWuBaFas/jnZwDajb5FTVuHiZI2YJfHC2LZOL0RJT2oBi64LItNkE5XW1NcwpCc96PT5UyEESY+RUKEK3TlphLSLCWkJHiKDZh+kDqWNVqPhyFveRpBN/h9ImddPJM= Received: by 10.142.112.5 with SMTP id k5mr1112525wfc.1194830455394; Sun, 11 Nov 2007 17:20:55 -0800 (PST) Received: by 10.142.115.3 with HTTP; Sun, 11 Nov 2007 17:20:55 -0800 (PST) Message-ID: <9d3ec8300711111720x1996db6bi5417e365f016c483@mail.gmail.com> Date: Sun, 11 Nov 2007 20:20:55 -0500 From: "Till Varoquaux" To: caml-list@yquem.inria.fr Subject: Re: Folding in ML (was "OCaml's formatting libraries") MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Content-Disposition: inline X-Spam: no; 0.00; ocaml's:01 unparsing:01 afaik:01 parser:01 combinators:01 unparsing:01 printf:01 danvy:01 brics:01 sprintf:01 sprintf:01 abstracted:01 struct:01 struct:01 buffer:01 T24gTm92IDEwLCAyMDA3IDI6MTMgUE0sIEpvbiBIYXJyb3AgPGpvbkBmZmNvbnN1bHRhbmN5LmNv bT4gd3JvdGU6Cj4gT24gU2F0dXJkYXkgMTAgTm92ZW1iZXIgMjAwNyAxNTo0MywgQsO8bnpsaSBE YW5pZWwgd3JvdGU6Cj4gPiBMZSAxMCBub3YuIDA3IMOgIDE1OjU4LCBKb24gSGFycm9wIGEgw6lj cml0IDoKPiA+ID4gRnVuY3Rpb25hbCB1bnBhcnNpbmcgcmVxdWlyZXMgYSBsb3QgbW9yZSBjb2Rl LAoKRmlyc3QgbGV0IG1lIHNheSB0aGF0IGZvcm1hdHMgYXJlIGFuIE9wdC1pbiBmZWF0dXJlOiBk b24ndCBsaWtlIGRvbid0CnVzZSBpdC4gQWx0aG91Z2ggb24gYSB0aGVvcmV0aWNhbCBwb2ludCBv ZiB2aWV3IEknbSBub3QgZm9uZCBvZiBpdCBJCnVzZSBpdCBvbiBhIGRhaWx5IGJhc2lzLiBJIGd1 ZXNzIHlvdSBjb3VsZCBzYXkgaXQncyBhIHByYWdtYXRpYwpzb2x1dGlvbi4gT24gb25lIGhhbmQg Zm9ybWF0cyBhcmUgYSBoYWNrIG9uIHRoZSBvdGhlciB0aGV5IGFyZSB2ZXJ5CnVzZWZ1bCAoYW5k IEFGQUlLIHRoZXJlJ3Mgbm8gd2F5IHRvIGltcGxlbWVudCBwYXJzZXIgY29tYmluYXRvcnMgaW4K ZnVuY3Rpb25hbCB1bnBhcnNpbmcpLiBUaGF0IGJlaW5nIHNhaWQgZnVuY3Rpb25hbCB1cGFyc2lu ZyBwcmludGYncwphcmUgbm90IGFzIGJhZCBhcyBtYWtlIHRoZW0gc291bmQuIEl0IGlzIGFsc28g YSB2ZXJ5IHVzZWZ1bCB0ZWNobmlxdWUKdG8gbWFzdGVyOiBpdCBpcyB0aGUgYW5zd2VyIHRvIGEg Z2VuZXJhbCBjbGFzcyBvZiBwcm9ibGVtcyBhbmQgY2FuIGJlCmFuIGVsZWdhbnQgdG8gaGFpcnkg cHJvYmxlbXMuIEEgdHlwaWNhbCBleGFtcGxlIGNvdWxkIGJlIGZ1bmN0aW9uCnRyYW5zZm9ybWF0 aW9ucyBjb21wb3NpdGlvbiAodGFrZSBmwrBnwrBoIHdoZW4geW91IHdhbnQgZiAsZyBhbmQgaCB0 bwpoYXZlIGV2ZW50dWFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycykuCgpUaGF0IGJlaW5nIHRoZXJl IGFyZSBtb3JlIHN1Y2NpbmN0IHNvbHV0aW9ucyB0byB0aGUgInByaW50ZiIgcHJvYmxlbSwKc29t ZSBvZiB0aGVtIGhhdmUgcHJvYmFibHkgbm90IGJlIGZvdW5kLiBUaGlzIGlzIHBhcnQgb2YgYSBm YW1pbHkgb2YKcHJvYmxlbXMgeW91IGNvdWxkIGNhbGwgdGhlICJmb2xkaW5nIiBmYW1pbHkuIEhl cmUgYXJlIHNvbWUgb2YgdGhlCmhhY2tzIEkga25vdyBvZiwgSSAnZCBiZSBpbnRlcmVzdGVkIGlu IGxlYXJuaW5nIG5ldyBvbmVzOgoKCmxldCBzdHJpbmdfb2Zfc3RyaW5nIHMgPSBzCigqCiAgSSkg RnVuY3Rpb25hbCB1bnBhcnNpbmcuCgogIFRoaXMgdGVjaG5pcXVlIHdhcyBmaXJzdCBkZXRhaWxl ZCBieSBPbGl2aWVyIERhbnZ5CiAgKGh0dHA6Ly93d3cuYnJpY3MuZGsvUlMvOTgvMTIvKS4KKikK CnR5cGUgKCdhLCdiKSBmb3JtYXQgPSAoc3RyaW5nIC0+ICdhKSAtPiBzdHJpbmcgLT4gJ2IKbGV0 ICghKWYgOiAoXyxfKSBmb3JtYXQgPSBmdW4gayBhY2MgdiAtPiBrIChhY2MgXiAoZiB2KSkKbGV0 ICgrKykgKGY6KF8sXylmb3JtYXQpIChnOihfLF8pZm9ybWF0KSA6IChfLF8pZm9ybWF0ID0gZnVu IHggLT4gZiAoZyB4KQpsZXQgaW50OiAoXyxfKSBmb3JtYXQgPSBmdW4geCAtPiAhc3RyaW5nX29m X2ludCB4CmxldCBzdHJpbmcgOiAoXyxfKSBmb3JtYXQgPSBmdW4geCAtPiAhc3RyaW5nX29mX2lu dCB4CmxldCBzcHJpbnRmIChmOihfLF8pIGZvcm1hdCkgPSBmIChmdW4gcyAtPiBzKSAiIgoKbGV0 IG15Zm9ybWF0OihfLF8pIGZvcm1hdCA9CiAgZnVuIHggLT4gKGxpdCAiZXhwZWN0aW5nIGFuIGlu dDpcIiIrKyBpbnQgKysgbGl0ICJcImFuZCBhCnN0cmluZzpcIiIrKyBzdHJpbmcgKysgbGl0ICJc IjsiKSB4CmxldCBfID0gc3ByaW50ZiBteWZvcm1hdAoKKCoKICBNbHRvbiBzdHlsZSBmb2xkaW5n Li4uLgoKICBUaGUgZm9ybWF0cyByZXN1bHRpbmcgZnJvbSB0aGlzIHNvbHV0aW9uIGFyZSB2ZXJ5 IHRlcnNlLiBUeXBlLWNoZWNraW5nIGlzCiAgdmVyeSBpbnZvbHZlZCBhbmQgY2Fubm90IGJlIGFi c3RyYWN0ZWQgZWFzaWx5LgoKICBUaGUgbWVjaGFuaWNzIGJlaGluZCBhcmUgZXhwbGFpbmVkIG9u IG1sdG9uJ3Mgd2ViIHBhZ2UgKGh0dHA6Ly9tbHRvbi5vcmcvRm9sZCkKCiAgSSBiZWxpZXZlIHRo aXMgaGFjayBzaG91bGQgYmUgYXR0cmlidXRlIHRvIFN0ZXBoZW4gV2Vla3MuCiopCmxldCBlbmRm IGFjYyBmID0gZiBhY2MKCm1vZHVsZSBGb2xkID0Kc3RydWN0CiBsZXQgZm9sZCBhIGYgZyA9IGcg YSBmCiBsZXQgc3RlcDAgaCBhIGYgPSBmb2xkIChoIGEpIGYKIGxldCBzdGVwMSBoIGEgZiBiID0g Zm9sZCAoaCBiIGEpIGYKZW5kCgptb2R1bGUgRm9sZHIgPQpzdHJ1Y3QKICBsZXQgZm9sZHIgYSBm ID0gRm9sZC5mb2xkICBmIChmdW4gZyAtPiBnIGEpCiAgbGV0IHN0ZXAwIGggPSBGb2xkLnN0ZXAw IChmdW4gZyB4IC0+IGcgKGggeCkpCiAgbGV0IHN0ZXAxIGggPSBGb2xkLnN0ZXAxIChmdW4gYiBn IHggLT4gZyAoaCBiIHgpKQplbmQKCmxldCAoISkgZiA9IGZ1biB6IC0+IEZvbGRyLnN0ZXAxIChm dW4gcyBrICgoKyksYWNjLHN0b3ApIGEgLT4gawooKCspLChhY2MgKyAoZiBhKSAgKyBzKSxzdG9w KSkgejs7CmxldCAoPDwpIHMgPSBGb2xkci5mb2xkciAoZnVuIChfLGFjYyxzdG9wKSAtPiBzdG9w IGFjYykgKGZ1biBrIGluaXQKc3RvcCAoKykgLT4gayAoKCspLGluaXQrcyxzdG9wKSkKbGV0ICg+ PikgPSBlbmRmCgpsZXQgc3ByaW50ZiBmID0KICBmIChCdWZmZXIuY3JlYXRlIDE3KSAoQnVmZmVy LmNvbnRlbnRzKSAoZnVuIGIgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBiIHM7YikKCgpsZXQgaW50 IGsgPSAhc3RyaW5nX29mX2ludCBrCmxldCBzdHJpbmcgayA9ICFzdHJpbmdfb2Zfc3RyaW5nIGsK CgpsZXQgXyA9IHNwcmludGYgKCg8PCkiZXhwZWN0aW5nIGFuIGludDpcIiJpbnQiXCJhbmQgYSBz dHJpbmc6XCIic3RyaW5nIlwiOyIoPj4pKQoKKCoKICBSZWN0eXBlcwoKICBUaGlzIG9uZSBpcyBi eSBtZS4uLiBpdCByZXF1aXJlcyAtcmVjdHlwZXMgYW5kIGlzIGEgbG90IG1vcmUgdXNlbGVzcyB0 aGFuIHRoZQogIHByZXZpb3VzIG9uZXMuLi4gSSBqdXN0IGZlbHQgbGlrZSBwdXR0aW5nIGl0IGRv d24gYW55d2F5cwoqKQoKdHlwZSAoJ2EsJ2IpIGFjYyA9ICg/cGVhazooJ2IgLT4gdW5pdCkgLT4g J2EgLT4gKCdhLCdiKSBhY2MpCgpsZXQgbWFrZUFjYyBpbml0ICgrKSA6IChfLF8pIGFjYyAgPQog IGxldCByZWMgYXV4IGFjYyA/cGVhayA9CiAgKG1hdGNoIHBlYWsgd2l0aAogICB8IFNvbWUgZiAt PiBmIGFjYwogICB8IE5vbmUgLT4gKCkpOwogICAgZnVuIHYgLT4gYXV4IChhY2MrdikKICBpbiBh dXggaW5pdAoKbGV0ICh8PikgeCBmID0gZiB4CmxldCBwZWFrIChhY2M6KF8sJ2EpIGFjYykgOiAn YSA9CiAgbGV0IHJlcyA9IHJlZiBOb25lIGluCiAgbGV0IHNldCB2ID0gcmVzIDo9IFNvbWUgdiBp bgogIGlnbm9yZSAoYWNjIH5wZWFrOnNldCk7CiAgbWF0Y2ggIXJlcyB3aXRoCiAgfCBTb21lIHYg LT4gdgogIHwgTm9uZSAtPiBhc3NlcnQgZmFsc2UKCmxldCBfID0KICBsZXQgc3VtID0gbWFrZUFj YyAwICgrKSBpbgogIHN1bSAzIDQgNSA2IHw+IHBlYWsKClRpbGwKLS0gCmh0dHA6Ly90aWxsLXZh cm9xdWF1eC5ibG9nc3BvdC5jb20vCg==