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 mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by sympa.inria.fr (Postfix) with ESMTPS id 5F5267EE20 for ; Tue, 20 Nov 2012 02:57:46 +0100 (CET) Received-SPF: None (mail1-smtp-roc.national.inria.fr: no sender authenticity information available from domain of berenger@riken.jp) identity=pra; client-ip=134.160.33.176; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="berenger@riken.jp"; x-sender="berenger@riken.jp"; x-conformance=sidf_compatible Received-SPF: Pass (mail1-smtp-roc.national.inria.fr: domain of berenger@riken.jp designates 134.160.33.176 as permitted sender) identity=mailfrom; client-ip=134.160.33.176; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="berenger@riken.jp"; x-sender="berenger@riken.jp"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: Pass (mail1-smtp-roc.national.inria.fr: domain of postmaster@postman.riken.jp designates 134.160.33.176 as permitted sender) identity=helo; client-ip=134.160.33.176; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="berenger@riken.jp"; x-sender="postmaster@postman.riken.jp"; x-conformance=sidf_compatible; x-record-type="v=spf1" X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiABABfiqlCGoCGwmWdsb2JhbABFhiCpapJtAQEBAQEICwsHFCeCHgEBBAEjFTYKEQsYAgIFBBIIAwICCQMCAQIBMwERBg0GAgEBDgmHYAMJBgutLoI9hmADiV6BIosSg3qBEwOIWI0kgRyET41W X-IronPort-AV: E=Sophos;i="4.83,282,1352070000"; d="scan'208";a="182248041" Received: from postman4.riken.jp (HELO postman.riken.jp) ([134.160.33.176]) by mail1-smtp-roc.national.inria.fr with ESMTP; 20 Nov 2012 02:57:44 +0100 Received: from postman.riken.jp (postman4.riken.jp [127.0.0.1]) by postman.riken.jp (Postfix) with SMTP id E74248280F2 for ; Tue, 20 Nov 2012 10:57:41 +0900 (JST) Received: from [172.27.98.103] (rikad98.riken.jp [134.160.214.98]) by postman.riken.jp (Postfix) with ESMTPA id B6F977F8042 for ; Tue, 20 Nov 2012 10:57:39 +0900 (JST) Message-ID: <50AAE393.4010705@riken.jp> Date: Tue, 20 Nov 2012 10:57:39 +0900 From: Francois Berenger User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: caml-list References: <50A9C3BB.2050900@riken.jp> <50A9CB66.1020207@ens-lyon.org> <50A9D378.4020403@riken.jp> <50AA5462.9090201@free.fr> <50AADF0C.7000903@riken.jp> In-Reply-To: <50AADF0C.7000903@riken.jp> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-PMX-Version: 5.6.0.2009776, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2012.11.20.14817 Subject: Re: [Caml-list] module alias in a .mli file On 11/20/2012 10:38 AM, Francois Berenger wrote: > On 11/20/2012 12:46 AM, Tiphaine Turpin wrote: >> In fact, the solution >> >> module V3 : module type of Vector3 >> >> does not work completely, because, the equality between Vector3 and V3 >> is lost, which poses problem with the types defined by Vector 3. What >> works is: >> >> include module type of struct module V3 = Vector3 end > > It's a little verbose but might be closer to what I was looking for. Indeed, now I can write (and compile) a .mli file with: --- include module type of struct module BA = Bigarray end include module type of struct module BA3 = Bigarray.Array3 end [...] mutable grid : (int, BA.int8_unsigned_elt, BA.c_layout) BA3.t [...] --- Which is more compact than what I had previously. Thanks! :) F. >> Here is a full example: >> >> module M : sig >> >> module Vector3 : sig type t end >> (* module V3 : module type of Vector3 *) >> include module type of struct module V3 = Vector3 end >> >> end = struct >> >> module Vector3 = struct type t end >> module V3 = Vector3 >> >> end >> >> open M >> let id (x : Vector3.t) : V3.t = x >> >> >> Regards, >> >> Tiphaine >> >> >> On 11/19/12 13:44, Paolo Donadeo wrote: >>> >>> Actually this is not true, Martin explained how. :-) >>> >>> >>> -- >>> Paolo >>> Sent by Gmail from Android >>> >>> Il giorno 19/nov/2012 11:35, "David House" >> > ha scritto: >>> >>> Annoyingly though, there is no way to create a module alias in an >>> mli. >>> >>> If, in an ml file, you have to refer often to >>> Some_very_long_module_name, it can quite convenient to define an >>> alias >>> by doing "module Mod = Some_very_long_module_name" (or, locally, >>> "let >>> module Mod = Some_very_long_module_name in"). But there is no way of >>> doing this in an mli: you have to use the long name every time. >>> >>> This is especially annoying if you have some big type that you >>> want to >>> expose in the mli. You really just want to copy-paste out of the ml >>> file and stick it into the mli, but then you have to expand all the >>> module aliases. (It's just a couple of goes with M-%, but still...) >>> >>> On Mon, Nov 19, 2012 at 6:36 AM, Francois Berenger >>> > wrote: >>> > On 11/19/2012 03:02 PM, Martin Jambon wrote: >>> >> >>> >> On Sun 18 Nov 2012 09:29:31 PM PST, Francois Berenger wrote: >>> >>> >>> >>> Hello, >>> >>> >>> >>> Here is my stupid question of the day: >>> >>> can't I declare the following in a .mli file? >>> >>> >>> >>> module V3 = Vector3 >>> >> >>> >> >>> >> No, because "= Vector3" specifies an implementation. >>> >> An mli file is a module interface, and module interfaces never >>> contain >>> >> implementations. >>> >> >>> >> However, you may want to do this, which does what it says: >>> >> >>> >> module V3 : module type of Vector3 >>> > >>> > >>> > Thanks a lot! That's exactly what I needed. :) >>> > >>> > >>> > >>> > >>> > -- >>> > Caml-list mailing list. Subscription management and archives: >>> > https://sympa.inria.fr/sympa/arc/caml-list >>> > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners >>> > Bug reports: http://caml.inria.fr/bin/caml-bugs >>> >>> -- >>> Caml-list mailing list. Subscription management and archives: >>> https://sympa.inria.fr/sympa/arc/caml-list >>> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners >>> Bug reports: http://caml.inria.fr/bin/caml-bugs >>> >> > >