From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 5586980211 for ; Wed, 13 Sep 2017 20:56:36 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mjambon@gmail.com; spf=Pass smtp.mailfrom=mjambon@gmail.com; spf=None smtp.helo=postmaster@mail-pg0-f49.google.com Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of mjambon@gmail.com) identity=pra; client-ip=74.125.83.49; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="mjambon@gmail.com"; x-sender="mjambon@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of mjambon@gmail.com designates 74.125.83.49 as permitted sender) identity=mailfrom; client-ip=74.125.83.49; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="mjambon@gmail.com"; x-sender="mjambon@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-pg0-f49.google.com) identity=helo; client-ip=74.125.83.49; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="mjambon@gmail.com"; x-sender="postmaster@mail-pg0-f49.google.com"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3A++y2lheNUg1inbwLML6z5qNFlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxc28bB7h7PlgxGXEQZ/co6odzbGJ4+a9ASQp2tWojjMrSNR0TRgLiM?= =?us-ascii?q?EbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpQg8FRnHEi89?= =?us-ascii?q?ZrmsW92as8Pi3Om3/9jXYh5UrDu7e7J7ahus/ivLscxDpIJ4Nqc3gjnAp3FPfa?= =?us-ascii?q?wCwGFhIFiUmT7z486x+Nho9CEG6KFpzNJJTaivJ/dwdrdfFjlzbjk4?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0AiAgC8frlZfzFTfUpdHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBhSiDd5pHgUkrmDoKhT4ChFVDFAEBAQEBAQEBAQEBEgEBCQsLCCY?= =?us-ascii?q?xgjMMDIJOAQUjFQgBGx4DDAYFCw0CAiYCAiECEQEFARwTBgIBAReJfQEDFaBxQ?= =?us-ascii?q?IwLggUFARyDCgWDWwoZJw1XgxUBAQEBAQUBAQEBARsCBgkBCHyCHYICgVCCDoJ?= =?us-ascii?q?9gliCbIJHgmEFkjiOBTyPXIR3i0QRhx+MV4gsAgQCBAUCBhQkgRU2gS4yIQgcF?= =?us-ascii?q?UoahHCCMlaLXwEBAQ?= X-IPAS-Result: =?us-ascii?q?A0AiAgC8frlZfzFTfUpdHAEBBAEBCgEBFwEBBAEBCgEBhSi?= =?us-ascii?q?Dd5pHgUkrmDoKhT4ChFVDFAEBAQEBAQEBAQEBEgEBCQsLCCYxgjMMDIJOAQUjF?= =?us-ascii?q?QgBGx4DDAYFCw0CAiYCAiECEQEFARwTBgIBAReJfQEDFaBxQIwLggUFARyDCgW?= =?us-ascii?q?DWwoZJw1XgxUBAQEBAQUBAQEBARsCBgkBCHyCHYICgVCCDoJ9gliCbIJHgmEFk?= =?us-ascii?q?jiOBTyPXIR3i0QRhx+MV4gsAgQCBAUCBhQkgRU2gS4yIQgcFUoahHCCMlaLXwE?= =?us-ascii?q?BAQ?= X-IronPort-AV: E=Sophos;i="5.42,389,1500933600"; d="scan'208";a="237387027" Received: from mail-pg0-f49.google.com ([74.125.83.49]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 13 Sep 2017 20:56:35 +0200 Received: by mail-pg0-f49.google.com with SMTP id 188so2026837pgb.2 for ; Wed, 13 Sep 2017 11:56:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=ZLDsElb3EiigQzb9MYZX1sY+MkN60XYVIUFgwIw54kc=; b=qAQhyt5jq1vfOR/HmSXall6kkhKRToA8+3+r41KnOaJudFACF7kmBOoYKvs3ijoBns RX90Y7+pGKB4qNXsBNY5qjlMQ2Pt2sUsphhgR35Km9Bfxc5UA2BlbOxGu2e5bKSviMjx NIFd+AJAO93yYbiJvU4Lz4HB/6wZlhUv3CB9AOBbFfPM3/1EK3GApLZhXso18EdlO2bP DdO4R0Lt489M6qDSWqUNNLNzlAGb1fVDyL0bt1H3iTS3/WSGEZkOBrYlzGj86Lc3WCyR exCiE+xUPo+F4peNvp2Vmo/7HAwtEOCD9fQUKF21UhCE7oZ7rHryZaolSz1M/75RqUX3 CLpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=ZLDsElb3EiigQzb9MYZX1sY+MkN60XYVIUFgwIw54kc=; b=QeUQ21tddHTtGXqLpPRnuoR/sQy3dvfuDUR90EeTN+Ccv25BR40blN7prvDa2wTzYk TUDwuA7hwhrVPFVD94P5op+q18G6McnQbtAdQB9GK8eT1Vzrbyed8aKNno9/zUIRcZo8 YVRkSNDyxjQTfTrqIonpFji9vNir3CblxwBNOXQiVlnKO53Ne9DlfA+R7XwWRgc7y4cX Ngz/PTgW7GdguIIkhT8grLvkZBfwLNqLI6Bj7hV/ED8fNrCrlIAr2Bg/YuvdnJKtd8fG WYFhSMTrf+0jpmzNQ0pn5BNUl6l5/2OWxyx2kznlkiZ1o8lxO6Qj9tZ/sj+jjjwr8PLl JCBQ== X-Gm-Message-State: AHPjjUh2NOepU8NKug4Wzwtu1ldl4erXx3vpNN8e5kMr6B33AyiMpfCi m+sFyjb9QRs6WOvS4iM= X-Google-Smtp-Source: ADKCNb6Va6UYTPJMgI8ym9mlrsrjnBs2WyuTfvkPOd13oQ74xmm+tGlGMHD0jUbC3g05ECu/ojIXbg== X-Received: by 10.98.200.76 with SMTP id z73mr19462974pff.154.1505328992836; Wed, 13 Sep 2017 11:56:32 -0700 (PDT) Received: from [10.1.10.13] (c-73-189-41-37.hsd1.ca.comcast.net. [73.189.41.37]) by smtp.gmail.com with ESMTPSA id k67sm11848492pga.46.2017.09.13.11.56.31 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 Sep 2017 11:56:31 -0700 (PDT) To: caml-list@inria.fr References: From: Martin Jambon Message-ID: <8efb84a4-eb53-1e7f-8b7a-406834a3e41d@gmail.com> Date: Wed, 13 Sep 2017 11:56:30 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Validation-by: martin@mjambon.com Subject: Re: [Caml-list] Default value in module On 09/12/2017 02:29 PM, Paul A. Steckler wrote: > On Tue, Sep 12, 2017 at 5:21 PM, Yotam Barnoy wrote: >> The easiest thing to do is to create a prototype module with the value >> you want, and to include that module (include Foo) in any module you >> want to have that basic structure. > > Yes, but that means I have to write "include Foo" to get the default > value. My goal is to avoid writing anything extra when I'm using the > default value. I personally find this solution quite reasonable. You'd write this: module type A = sig val x : int end module A_defaults = struct let x = 42 end module A1 : A = struct include A_defaults let x = 17 end module A2 : A = struct include A_defaults end which is really nicely written as: module A2 : A = A_defaults Now if you have extra module items to add or to override, the cost of inserting the line `include A_defaults` becomes quickly negligible, as in the `B1` definition below: module type B = sig val x : int val y : int val z : int end module B_defaults = struct let x = 42 let y = 17 end module B1 : B = struct include B_defaults let y = 21 let z = -1 end Martin