From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id 72088BB83 for ; Wed, 5 Jul 2006 10:19:50 +0200 (CEST) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id k658JowW009138 for ; Wed, 5 Jul 2006 10:19:51 +0200 Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id KAA24954 for ; Wed, 5 Jul 2006 10:19:50 +0200 (MET DST) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.187]) by nez-perce.inria.fr (8.13.6/8.13.6) with ESMTP id k658Jo1B014682 for ; Wed, 5 Jul 2006 10:19:50 +0200 Received: by nf-out-0910.google.com with SMTP id p46so1760762nfa for ; Wed, 05 Jul 2006 01:19:48 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version:content-type:references:x-google-sender-auth; b=ookoWZyy2EbuuhGJPlmuS70MwtLlOhwjCckuvZNds1WsJRtikB6pNytflI0bWd7XYtb0SA/Yl7qtsNFzVGQ06StDud9wX4WY4DQtB0f9UkBUXzis0QM2Ucdn4w09jKqXxMBAZGa3mA9K0wuGO8HI9wV1goMdR4taLDQu/wrT5/E= Received: by 10.78.167.12 with SMTP id p12mr3274909hue; Wed, 05 Jul 2006 01:19:48 -0700 (PDT) Received: by 10.78.13.17 with HTTP; Wed, 5 Jul 2006 01:19:48 -0700 (PDT) Message-ID: Date: Wed, 5 Jul 2006 10:19:48 +0200 From: "Nicolas Pouillard" Sender: nicolas.pouillard@gmail.com To: "Matt Gushee" Subject: Re: [Caml-list] revised syntax and immediate objects Cc: caml-list@inria.fr In-Reply-To: <44AAF164.20406@gushee.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_22259_27859434.1152087588772" References: <44AAF164.20406@gushee.net> X-Google-Sender-Auth: 636a6a73ce5c229a X-j-chkmail-Score: MSGID : 44AB7626.000 on concorde : j-chkmail score : X : 0/20 1 X-j-chkmail-Score: MSGID : 44AB7626.001 on nez-perce : j-chkmail score : X : 0/20 1 X-Miltered: at concorde with ID 44AB7626.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Miltered: at nez-perce with ID 44AB7626.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; syntax:01 syntax:01 ocaml:01 camlp:01 camlp:01 decls:01 decls:01 accessors:01 accessors:01 config:01 defaults:01 expr:01 mlast:01 expr:01 config:01 X-Attachments: cset="UTF-8" cset="ANSI_X3.4-1968" name="without-quotations.ml" name="without-quotations.ml" X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_BY_IP autolearn=disabled version=3.0.3 ------=_Part_22259_27859434.1152087588772 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 7/5/06, Matt Gushee wrote: > Jonathan Roewen wrote: > > > What is the syntax for immediate objects in ocaml when using revised > syntax? > > Not sure offhand, but ... > > > I'd like to try make a camlp4 syntax extension that uses immediate > > objects, > > I've done that. I'll show you the key section of the code below, and I > can send you the complete file if you like. It may not be 100% correct, > but I've been using it in an application and so far it works. I don't > know if I can *explain* it, though ... I wrote it several months ago, > and I'm coming to think that CamlP4, like Perl, is a write-only language ;-) > > [BTW, *_si in function names means "structure item", and *_csi means > "class structure item"] > Let me use this piece of code to show Camlp4 changes: > > let object_body loc decls = let object_body _loc decls = > let sub_objects = > let sos = > List.fold_right > ( fun idat lst -> > match idat.sub_obj with > | None -> lst > | Some so -> so::lst ) > decls [] in > <:class_str_item< declare $list:sos$ end >> let sub_objects = List.fold_right (fun idat lst -> match idat.sub_obj with | None -> lst | Some so -> <:class_str_item< $so$; $lst$ >>) decls <:class_str_item<>> > and accessors = > let accs = > List.fold_right > ( fun idat lst -> > match idat.setter with > | None -> idat.getter :: lst > | Some se -> idat.getter :: se :: lst ) > decls [] in > <:class_str_item< declare $list:accs$ end >> in and accessors = List.fold_right (fun idat lst -> match idat.setter with | None -> <:class_str_item< $idat.getter$; $lst$ >> | Some so -> <:class_str_item< $idat.getter$; $se$; $lst$ >>) decls <:class_str_item<>> in (sub_objects, accessors) > (sub_objects, accessors) > > let subconf_csi loc key decls = > let sub_objects, accessors = object_body loc decls > and pself = <:patt< self >> > and inheritance = > <:class_str_item< > inherit sub_config data defaults path as super > >> in > let obj_expr = > MLast.ExObj > (loc, Some pself, [inheritance; sub_objects; accessors]) in > let keylist_expr = <:expr< [$str:key$] >> in > let path_bind_expr = > <:expr< > let path = path @ $keylist_expr$ in $obj_expr$ > >> > and oname = key ^ "_" in > Some <:class_str_item< value $lid:oname$ = $path_bind_expr$ >> let subconf_csi _loc key decls = let sub_objects, accessors = object_body loc decls in <:class_str_item< value $lid:oname$ = let path = path @ [$str:key$] in object (self) inherit sub_config data defaults path as super; $sub_objects$; $accessors$; end >> > > let rootconf_si loc cname decls = > let sub_objects, accessors = object_body loc decls > and pself = <:patt< self >> > and inheritance = > <:class_str_item< > inherit root_config srcs dest data defaults as super > >> in > let oe = > MLast.ExObj > (loc, Some pself, [inheritance; sub_objects; accessors]) in > <:str_item< > value $lid:cname$ srcs dest = > let data = Dict.create () > and path = [] in $oe$ > >> let rootconf_si _loc cname decls = let sub_objects, accessors = object_body loc decls in <:str_item< value $lid:cname$ srcs dest = let data = Dict.create () and path = [] in object (self) inherit root_config srcs dest data defaults as super; $sub_objects$; $accessors$; end >> > > let main_si loc cname decls = > write_example decls; > let os = <:str_item< open Rascl >> > and oc = <:str_item< open ConfigObject >> > and od = <:str_item< open Dict >> > and defcreate = <:str_item< value defaults = create () >> > and defsetup0 = top_doin_expr loc [] decls in > let defsetup = <:str_item< $exp:defsetup0$ >> > and cl = rootconf_si loc cname decls in > let all = [os; oc; od; defcreate; defsetup; cl] in > <:str_item< declare $list:all$ end >> > let main_si _loc cname decls = <:str_item< open Rascl; open ConfigObject; open Dict; value defaults = create (); $exp:top_doin_expr _loc [] decls$; $rootconf_si loc cname decls$ >> -- Nicolas Pouillard ------=_Part_22259_27859434.1152087588772 Content-Type: text/plain; name=without-quotations.ml; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ep9f7occ Content-Disposition: attachment; filename="without-quotations.ml" bGV0IG9iamVjdF9ib2R5IF9sb2MgZGVjbHMgPQogIGxldCBzdWJfb2JqZWN0cyA9CiAgICBMaXN0 LmZvbGRfcmlnaHQKICAgICAgKGZ1biBpZGF0IGxzdCAtPgogICAgICAgICBtYXRjaCBpZGF0LnN1 Yl9vYmogd2l0aAogICAgICAgICB8IE5vbmUgLT4gbHN0CiAgICAgICAgIHwgU29tZSBzbyAtPiBB c3QuQ3JTZW0gKF9sb2MsIHNvLCBsc3QpKQogICAgICBkZWNscyAoQXN0LkNyTmlsIF9sb2MpCiAg YW5kIGFjY2Vzc29ycyA9CiAgICBMaXN0LmZvbGRfcmlnaHQKICAgICAgKGZ1biBpZGF0IGxzdCAt PgogICAgICAgICBtYXRjaCBpZGF0LnNldHRlciB3aXRoCiAgICAgICAgIHwgTm9uZSAtPiBBc3Qu Q3JTZW0gKF9sb2MsIGlkYXQuZ2V0dGVyLCBsc3QpCiAgICAgICAgIHwgU29tZSBzbyAtPgogICAg ICAgICAgICAgQXN0LkNyU2VtIChfbG9jLCBpZGF0LmdldHRlciwgQXN0LkNyU2VtIChfbG9jLCBz ZSwgbHN0KSkpCiAgICAgIGRlY2xzIChBc3QuQ3JOaWwgX2xvYykKICBpbiAoc3ViX29iamVjdHMs IGFjY2Vzc29ycykKbGV0IHN1YmNvbmZfY3NpIF9sb2Mga2V5IGRlY2xzID0KICBsZXQgKHN1Yl9v YmplY3RzLCBhY2Nlc3NvcnMpID0gb2JqZWN0X2JvZHkgbG9jIGRlY2xzCiAgaW4KICAgIEFzdC5D clZhbCAoX2xvYywgb25hbWUsIEFzdC5CRmFsc2UsCiAgICAgIEFzdC5FeExldCAoX2xvYywgQXN0 LkJGYWxzZSwKICAgICAgICBBc3QuQmlFcSAoX2xvYywgQXN0LlBhSWQgKF9sb2MsIEFzdC5JZExp ZCAoX2xvYywgInBhdGgiKSksCiAgICAgICAgICBBc3QuRXhBcHAgKF9sb2MsCiAgICAgICAgICAg IEFzdC5FeEFwcCAoX2xvYywgQXN0LkV4SWQgKF9sb2MsIEFzdC5JZExpZCAoX2xvYywgIkAiKSks CiAgICAgICAgICAgICAgQXN0LkV4SWQgKF9sb2MsIEFzdC5JZExpZCAoX2xvYywgInBhdGgiKSkp LAogICAgICAgICAgICBBc3QuRXhBcHAgKF9sb2MsCiAgICAgICAgICAgICAgQXN0LkV4QXBwIChf bG9jLCBBc3QuRXhJZCAoX2xvYywgQXN0LklkVWlkIChfbG9jLCAiOjoiKSksCiAgICAgICAgICAg ICAgICBBc3QuRXhTdHIgKF9sb2MsIGtleSkpLAogICAgICAgICAgICAgIEFzdC5FeElkIChfbG9j LCBBc3QuSWRVaWQgKF9sb2MsICJbXSIpKSkpKSwKICAgICAgICBBc3QuRXhPYmogKF9sb2MsIEFz dC5QYUlkIChfbG9jLCBBc3QuSWRMaWQgKF9sb2MsICJzZWxmIikpLAogICAgICAgICAgQXN0LkNy U2VtIChfbG9jLAogICAgICAgICAgICBBc3QuQ3JJbmggKF9sb2MsCiAgICAgICAgICAgICAgQXN0 LkNlQXBwIChfbG9jLAogICAgICAgICAgICAgICAgQXN0LkNlQXBwIChfbG9jLAogICAgICAgICAg ICAgICAgICBBc3QuQ2VBcHAgKF9sb2MsCiAgICAgICAgICAgICAgICAgICAgQXN0LkNlQ29uIChf bG9jLCBBc3QuQkZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgQXN0LklkTGlkIChfbG9jLCAi c3ViX2NvbmZpZyIpLCBBc3QuVHlOaWwgX2xvYyksCiAgICAgICAgICAgICAgICAgICAgQXN0LkV4 SWQgKF9sb2MsIEFzdC5JZExpZCAoX2xvYywgImRhdGEiKSkpLAogICAgICAgICAgICAgICAgICBB c3QuRXhJZCAoX2xvYywgQXN0LklkTGlkIChfbG9jLCAiZGVmYXVsdHMiKSkpLAogICAgICAgICAg ICAgICAgQXN0LkV4SWQgKF9sb2MsIEFzdC5JZExpZCAoX2xvYywgInBhdGgiKSkpLAogICAgICAg ICAgICAgICJzdXBlciIpLAogICAgICAgICAgICBBc3QuQ3JTZW0gKF9sb2MsIHN1Yl9vYmplY3Rz LCBhY2Nlc3NvcnMpKSkpKQpsZXQgcm9vdGNvbmZfc2kgX2xvYyBjbmFtZSBkZWNscyA9CiAgbGV0 IChzdWJfb2JqZWN0cywgYWNjZXNzb3JzKSA9IG9iamVjdF9ib2R5IGxvYyBkZWNscwogIGluCiAg ICBBc3QuU3RWYWwgKF9sb2MsIEFzdC5CRmFsc2UsCiAgICAgIEFzdC5CaUVxIChfbG9jLCBBc3Qu UGFJZCAoX2xvYywgQXN0LklkTGlkIChfbG9jLCBjbmFtZSkpLAogICAgICAgIEFzdC5FeEZ1biAo X2xvYywKICAgICAgICAgIEFzdC5NY0FyciAoX2xvYywgQXN0LlBhSWQgKF9sb2MsIEFzdC5JZExp ZCAoX2xvYywgInNyY3MiKSksCiAgICAgICAgICAgIEFzdC5FeE5pbCBfbG9jLAogICAgICAgICAg ICBBc3QuRXhGdW4gKF9sb2MsCiAgICAgICAgICAgICAgQXN0Lk1jQXJyIChfbG9jLCBBc3QuUGFJ ZCAoX2xvYywgQXN0LklkTGlkIChfbG9jLCAiZGVzdCIpKSwKICAgICAgICAgICAgICAgIEFzdC5F eE5pbCBfbG9jLAogICAgICAgICAgICAgICAgQXN0LkV4TGV0IChfbG9jLCBBc3QuQkZhbHNlLAog ICAgICAgICAgICAgICAgICBBc3QuQmlBbmQgKF9sb2MsCiAgICAgICAgICAgICAgICAgICAgQXN0 LkJpRXEgKF9sb2MsCiAgICAgICAgICAgICAgICAgICAgICBBc3QuUGFJZCAoX2xvYywgQXN0Lklk TGlkIChfbG9jLCAiZGF0YSIpKSwKICAgICAgICAgICAgICAgICAgICAgIEFzdC5FeEFwcCAoX2xv YywKICAgICAgICAgICAgICAgICAgICAgICAgQXN0LkV4SWQgKF9sb2MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgQXN0LklkQWNjIChfbG9jLCBBc3QuSWRVaWQgKF9sb2MsICJEaWN0IiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBc3QuSWRMaWQgKF9sb2MsICJjcmVhdGUiKSkpLAog ICAgICAgICAgICAgICAgICAgICAgICBBc3QuRXhJZCAoX2xvYywgQXN0LklkVWlkIChfbG9jLCAi KCkiKSkpKSwKICAgICAgICAgICAgICAgICAgICBBc3QuQmlFcSAoX2xvYywKICAgICAgICAgICAg ICAgICAgICAgIEFzdC5QYUlkIChfbG9jLCBBc3QuSWRMaWQgKF9sb2MsICJwYXRoIikpLAogICAg ICAgICAgICAgICAgICAgICAgQXN0LkV4SWQgKF9sb2MsIEFzdC5JZFVpZCAoX2xvYywgIltdIikp KSksCiAgICAgICAgICAgICAgICAgIEFzdC5FeE9iaiAoX2xvYywgQXN0LlBhSWQgKF9sb2MsIEFz dC5JZExpZCAoX2xvYywgInNlbGYiKSksCiAgICAgICAgICAgICAgICAgICAgQXN0LkNyU2VtIChf bG9jLAogICAgICAgICAgICAgICAgICAgICAgQXN0LkNySW5oIChfbG9jLAogICAgICAgICAgICAg ICAgICAgICAgICBBc3QuQ2VBcHAgKF9sb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQXN0 LkNlQXBwIChfbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN0LkNlQXBwIChfbG9j LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3QuQ2VBcHAgKF9sb2MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXN0LkNlQ29uIChfbG9jLCBBc3QuQkZhbHNlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN0LklkTGlkIChfbG9jLCAicm9vdF9jb25m aWciKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzdC5UeU5pbCBfbG9jKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3QuRXhJZCAoX2xvYywgQXN0LklkTGlk IChfbG9jLCAic3JjcyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzdC5FeElk IChfbG9jLCBBc3QuSWRMaWQgKF9sb2MsICJkZXN0IikpKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFzdC5FeElkIChfbG9jLCBBc3QuSWRMaWQgKF9sb2MsICJkYXRhIikpKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBBc3QuRXhJZCAoX2xvYywgQXN0LklkTGlkIChfbG9jLCAiZGVm YXVsdHMiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAic3VwZXIiKSwKICAgICAgICAgICAg ICAgICAgICAgIEFzdC5DclNlbSAoX2xvYywgc3ViX29iamVjdHMsIGFjY2Vzc29ycykpKSkpKSkp KSkKbGV0IG1haW5fc2kgX2xvYyBjbmFtZSBkZWNscyA9CiAgQXN0LlN0U2VtIChfbG9jLCBBc3Qu U3RPcG4gKF9sb2MsIEFzdC5JZFVpZCAoX2xvYywgIlJhc2NsIikpLAogICAgQXN0LlN0U2VtIChf bG9jLCBBc3QuU3RPcG4gKF9sb2MsIEFzdC5JZFVpZCAoX2xvYywgIkNvbmZpZ09iamVjdCIpKSwK ICAgICAgQXN0LlN0U2VtIChfbG9jLCBBc3QuU3RPcG4gKF9sb2MsIEFzdC5JZFVpZCAoX2xvYywg IkRpY3QiKSksCiAgICAgICAgQXN0LlN0U2VtIChfbG9jLAogICAgICAgICAgQXN0LlN0VmFsIChf bG9jLCBBc3QuQkZhbHNlLAogICAgICAgICAgICBBc3QuQmlFcSAoX2xvYywgQXN0LlBhSWQgKF9s b2MsIEFzdC5JZExpZCAoX2xvYywgImRlZmF1bHRzIikpLAogICAgICAgICAgICAgIEFzdC5FeEFw cCAoX2xvYywgQXN0LkV4SWQgKF9sb2MsIEFzdC5JZExpZCAoX2xvYywgImNyZWF0ZSIpKSwKICAg ICAgICAgICAgICAgIEFzdC5FeElkIChfbG9jLCBBc3QuSWRVaWQgKF9sb2MsICIoKSIpKSkpKSwK ICAgICAgICAgIEFzdC5TdFNlbSAoX2xvYywgQXN0LlN0RXhwIChfbG9jLCB0b3BfZG9pbl9leHBy IF9sb2MgW10gZGVjbHMpLAogICAgICAgICAgICByb290Y29uZl9zaSBsb2MgY25hbWUgZGVjbHMp KSkpKQo= ------=_Part_22259_27859434.1152087588772--