From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Delivered-To: caml-list@yquem.inria.fr Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by yquem.inria.fr (Postfix) with ESMTP id BC092BC48 for ; Wed, 23 Mar 2005 21:26:10 +0100 (CET) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by nez-perce.inria.fr (8.13.0/8.13.0) with ESMTP id j2NKQAeW000671 for ; Wed, 23 Mar 2005 21:26:10 +0100 Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id VAA12155 for ; Wed, 23 Mar 2005 21:26:09 +0100 (MET) Received: from out1.smtp.messagingengine.com (out1.smtp.messagingengine.com [66.111.4.25]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id j2NKQ8LY029873 for ; Wed, 23 Mar 2005 21:26:09 +0100 Received: from frontend3.messagingengine.com (frontend3.internal [10.202.2.152]) by frontend1.messagingengine.com (Postfix) with ESMTP id 84AD0C63B1B; Wed, 23 Mar 2005 15:26:07 -0500 (EST) X-Sasl-enc: 62ejkGuMejNzxOhNaGOaig 1111609565 Received: from [172.16.112.115] (burnham.ljcrf.edu [192.231.106.2]) by frontend3.messagingengine.com (Postfix) with ESMTP id DD75128689; Wed, 23 Mar 2005 15:26:04 -0500 (EST) Date: Wed, 23 Mar 2005 12:25:44 -0800 (PST) From: Martin Jambon X-X-Sender: martin@localhost To: Jeffrey Cook Cc: caml-list@inria.fr Subject: Re: [Caml-list] Records with default values In-Reply-To: <88707140050323114156bcb9fb@mail.gmail.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Miltered: at nez-perce with ID 4241D0E2.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Miltered: at concorde with ID 4241D0E1.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; caml-list:01 foo:01 foo:01 rec:01 syntax:01 defines:01 recursive:01 recursive:01 rec:01 wrote:01 int:01 jambon:02 jambon:02 string:03 let:03 X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on yquem.inria.fr X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=disabled version=3.0.2 X-Spam-Level: On Wed, 23 Mar 2005, Jeffrey Cook wrote: > What I would like is the following: > > type bob = { > foo : string ; > bar : int := 0 ; > } > > let x = { foo = "hello" } I would go for a "create_bob" function with labelled arguments, some of them being optional: let rec create_bob ~foo ?(bar = 0) () = { foo = foo; bar = bar } Implementing a syntax extension that defines "create_bob" automatically is typically something that can be done with Camlp4 :-) It supports recursive type definitions such as: type t = { x : t option = Some { x = None } } or even (since create_t is recursive): type t = { x : t option = Some (create_t ~x:None ()) } which would be expanded into: type t = { x : t option } let rec create_t ?(x = Some (create_t ~x:None ())) () = { x = x } Martin -- Martin Jambon, PhD http://martin.jambon.free.fr