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=0.0 required=5.0 tests=none autolearn=disabled version=3.1.3 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 75554BC69 for ; Fri, 4 Jan 2008 11:10:02 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAACaUfUfAXQInh2dsb2JhbACQEAEBAQgKKZos X-IronPort-AV: E=Sophos;i="4.24,244,1196636400"; d="scan'208";a="5716894" Received: from concorde.inria.fr ([192.93.2.39]) by mail2-smtp-roc.national.inria.fr with ESMTP; 04 Jan 2008 11:10:02 +0100 Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id m04AA182019306 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Fri, 4 Jan 2008 11:10:02 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao8CACaUfUeCNhAB/2dsb2JhbACqeg X-IronPort-AV: E=Sophos;i="4.24,244,1196636400"; d="scan'208";a="7433790" Received: from kurims.kurims.kyoto-u.ac.jp ([130.54.16.1]) by mail3-smtp-sop.national.inria.fr with ESMTP; 04 Jan 2008 11:10:00 +0100 Received: from localhost (orion [130.54.16.5]) by kurims.kurims.kyoto-u.ac.jp (8.13.8/8.13.8) with ESMTP id m04A9vA7003926; Fri, 4 Jan 2008 19:09:57 +0900 (JST) Date: Fri, 04 Jan 2008 19:09:57 +0900 (JST) Message-Id: <20080104.190957.68544872.keiko@kurims.kyoto-u.ac.jp> To: shawjef3@msu.edu Cc: caml-list@inria.fr Subject: Re: [Caml-list] restricting and hiding record fields for functors From: Keiko Nakata In-Reply-To: <477DED41.3040009@msu.edu> References: <477DED41.3040009@msu.edu> X-Mailer: Mew version 4.2 on Emacs 20.7 / Mule 4.1 (AOI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Miltered: at concorde with ID 477E05F9.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; restricting:01 functors:01 ocaml:01 struct:01 sig:01 val:01 struct:01 syntax:01 ocaml:01 caml-list:01 int:01 int:01 caml:02 garrigue:03 module:03 Hello. Maybe private row types are useful to you; see the Language extensions section of the OCaml manual: http://caml.inria.fr/pub/docs/manual-ocaml/manual021.html You can do something like this: module M = struct type t = < x:int; y:int> let r = object method x = 1 method y = 2 end end;; module F(X:sig type t = private val r: t end) = struct let x = X.r#x end;; module FM = F(M);; let x = FM.x;; I often prefer to use a syntax extension, found at http://www.math.nagoya-u.ac.jp/~garrigue/code/ocaml.html, which allows me to write let r = {| x = 1 method y = 2 |} instead of let r = object method x = 1 method y = 2 end With best regards, Keiko