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 mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 012807EE89 for ; Fri, 28 Oct 2016 15:01:53 +0200 (CEST) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=nicolas.ojeda.bar@lexifi.com; spf=None smtp.mailfrom=nicolas.ojeda.bar@lexifi.com; spf=None smtp.helo=postmaster@vrout10.yaziba.net Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of nicolas.ojeda.bar@lexifi.com) identity=pra; client-ip=185.56.204.32; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="nicolas.ojeda.bar@lexifi.com"; x-sender="nicolas.ojeda.bar@lexifi.com"; x-conformance=sidf_compatible Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of nicolas.ojeda.bar@lexifi.com) identity=mailfrom; client-ip=185.56.204.32; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="nicolas.ojeda.bar@lexifi.com"; x-sender="nicolas.ojeda.bar@lexifi.com"; x-conformance=sidf_compatible Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@vrout10.yaziba.net) identity=helo; client-ip=185.56.204.32; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="nicolas.ojeda.bar@lexifi.com"; x-sender="postmaster@vrout10.yaziba.net"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3AT2w5oRZhyePoBqJYyE3jkMP/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZpc+/bnLW6fgltlLVR4KTs6sC0LuM9f+7EjFeqdbZ6TZZL8wKD0dEwe?= =?us-ascii?q?wt3CUeQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGxH4KBYn?= =?us-ascii?q?br+tQt2ap42N2uuz45zeZRlTzHr4OOsqbUb+kQKEjckfkI1vYog1xwfConZSM7?= =?us-ascii?q?BNxWp5I1/VkRLx+syw8YQlrnx4tPco9soGWqL/KfcWV7tdWRInOGcx7dajkhvO?= =?us-ascii?q?QQLHzHIGGjEQkxFPBwHeqhb4U5v49CHzrMJ51TmbM8ywRrcxD2fxp5x3QQPl3X?= =?us-ascii?q?9UfwUy93va34kp1PpW?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0C3AQBzSxNYgCDMOLlcHAEBBAEBCgEBG?= =?us-ascii?q?AEFAQsBgn8BAQEBAYF0B6Quh16HRocihiMCgXoHQhEBAQEBAQEBAQEBARIBAQs?= =?us-ascii?q?LCQkbMoIzBAEVAQSCEQEBAwESEQRSBQsLCzcCAiEBEgEFARwGEwgaiBgDDwgEA?= =?us-ascii?q?aM1gTI/MotGiHUNg28BAQEHAQEBAQEiixKCR4UEglsBBI5Mixc1h2WFGoMokAS?= =?us-ascii?q?Ic4Qcgj8THoEPAjRxhRpwAYYogUoBAQE?= X-IPAS-Result: =?us-ascii?q?A0C3AQBzSxNYgCDMOLlcHAEBBAEBCgEBGAEFAQsBgn8BAQE?= =?us-ascii?q?BAYF0B6Quh16HRocihiMCgXoHQhEBAQEBAQEBAQEBARIBAQsLCQkbMoIzBAEVA?= =?us-ascii?q?QSCEQEBAwESEQRSBQsLCzcCAiEBEgEFARwGEwgaiBgDDwgEAaM1gTI/MotGiHU?= =?us-ascii?q?Ng28BAQEHAQEBAQEiixKCR4UEglsBBI5Mixc1h2WFGoMokASIc4Qcgj8THoEPA?= =?us-ascii?q?jRxhRpwAYYogUoBAQE?= X-IronPort-AV: E=Sophos;i="5.31,410,1473112800"; d="scan'208,217";a="242758606" Received: from vrout10.yaziba.net ([185.56.204.32]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 28 Oct 2016 15:01:52 +0200 Received: from mtaout20.int.yaziba.net (mtaout20.int.yaziba.net [10.4.20.37]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by vrout10.yaziba.net (mx10.yaziba.net) with ESMTPS id BE7A451F2B for ; Fri, 28 Oct 2016 15:01:51 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mtaout20.int.yaziba.net (Postfix) with ESMTP id D954A16026A for ; Fri, 28 Oct 2016 15:01:51 +0200 (CEST) X-Virus-Scanned: amavisd-new at mtaout20.int.yaziba.net Received: from mtaout20.int.yaziba.net ([127.0.0.1]) by localhost (mtaout20.int.yaziba.net [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id KHNKthGTaK5b for ; Fri, 28 Oct 2016 15:01:51 +0200 (CEST) Received: from mail-qk0-f178.google.com (mail-qk0-f178.google.com [209.85.220.178]) by mtaout20.int.yaziba.net (Postfix) with ESMTPSA id AC490160362 for ; Fri, 28 Oct 2016 15:01:51 +0200 (CEST) Received: by mail-qk0-f178.google.com with SMTP id o68so85290695qkf.3 for ; Fri, 28 Oct 2016 06:01:51 -0700 (PDT) X-Gm-Message-State: ABUngvfytP4qz5PzjcrhUwlOzSa2oaC3a317NqtBTzQ+02mcVcZZs2QTbfg22/+rEEKzpaPMoY8MFWU3lVHiOg== X-Received: by 10.55.16.147 with SMTP id 19mr1366152qkq.255.1477659710700; Fri, 28 Oct 2016 06:01:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.237.53.109 with HTTP; Fri, 28 Oct 2016 06:01:30 -0700 (PDT) In-Reply-To: References: From: Nicolas Ojeda Bar Date: Fri, 28 Oct 2016 15:01:30 +0200 X-Gmail-Original-Message-ID: Message-ID: To: Shayne Fletcher Cc: "caml-list@inria.fr users" Content-Type: multipart/alternative; boundary=001a11475b1027c706053fec7646 X-DRWEB-SCAN: ok X-VRSPAM-SCORE: -100 X-VRSPAM-STATE: legit X-VRSPAM-CAUSE: gggruggvucftvghtrhhoucdtuddrfeelvddrjeefgdeitdcutefuodetggdotefrucfrrhhofhhilhgvmecuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepjghfhfffkffuvfgtsegrtderredttdejnecuhfhrohhmpefpihgtohhlrghsucfqjhgvuggruceurghruceonhhitgholhgrshdrohhjvggurgdrsggrrheslhgvgihifhhirdgtohhmqeenucfkphepvddtledrkeehrddvvddtrddujeeknecurfgrrhgrmhepmhhouggvpehsmhhtphhouhht X-VRSPAM-EXTCAUSE: mhhouggvpehsmhhtphhouhht Subject: Re: [Caml-list] Functor signature "inheritance" --001a11475b1027c706053fec7646 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Shayne, One approach is to name the *output* signature of the functors: module type EQ_PROD_S =3D sig module X : EQ module Y : EQ type t =3D X.t * Y.t val eq: t * t -> bool end module type EQ_PROD =3D functor (X : EQ) (Y : EQ) -> EQ_PROD_S with module X :=3D X and module Y :=3D Y module type ORD_PROD_S =3D sig include EQ_PROD_S val lt : t * t -> bool end module type LT_PROD =3D functor (X : EQ) (Y : EQ) -> LT_PROD_S with module X :=3D X and module Y :=3D Y etc. Cheers, Nicolas On Fri, Oct 28, 2016 at 2:44 PM, Shayne Fletcher < shayne.fletcher.50@gmail.com> wrote: > If one wants to include a functor signature in another... > > module type EQ =3D sig > type t > val eq : t * t -> bool > end > > module type EQ_PROD =3D functor (X : EQ) (Y : EQ) -> > sig > type t =3D X.t * Y.t > val eq : t * t -> bool > end > > module type ORD =3D sig > include EQ > val lt : t * t -> bool > end > > module type LT_PROD =3D functor (X : EQ) (Y : EQ) -> > sig > include EQ_PROD (*What do I say here?*) > end > > =E2=80=8B... How does one do that? Is there a syntax for this sort of thi= ng?=E2=80=8B > > -- > Shayne Fletcher > --001a11475b1027c706053fec7646 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Shayne,

One approach is t= o name the *output* signature of the functors:

mod= ule type EQ_PROD_S =3D sig
=C2=A0 =C2=A0 module X : EQ
= =C2=A0 =C2=A0 module Y : EQ
=C2=A0 =C2=A0 type t =3D X.t * Y.t
=C2=A0 =C2=A0 val eq: t * t -> bool
end

=
module type EQ_PROD =3D functor (X : EQ) (Y : EQ) ->
=C2=A0 =C2=A0 EQ_PROD_S with module X :=3D X and module Y :=3D Y

module type ORD_PROD_S =3D sig
=C2=A0 =C2=A0 inc= lude EQ_PROD_S
=C2=A0 =C2=A0 val lt : t * t -> bool
= end

module type LT_PROD =3D functor (X : EQ) (Y : = EQ) ->
=C2=A0 =C2=A0 LT_PROD_S with module X :=3D X and module= Y :=3D Y

etc.

Cheer= s,
Nicolas



On Fri, Oct 28, 2016 at = 2:44 PM, Shayne Fletcher <shayne.fletcher.50@gmail.com><= /span> wrote:
If one wants to include a functor signature in another..= .

mod= ule type EQ =3D sig
=C2=A0 type t
= =C2=A0 val eq : t * t -> bool
end

=
module type EQ_PROD =3D functor (X : EQ) (Y : EQ) ->
sig
=C2=A0 =C2=A0 = type t =3D X.t * Y.t
=C2=A0 =C2=A0 val eq : t * t -> bool
=C2=A0 end
=C2=A0 include EQ
=C2=A0 val lt : t * t -> boo= l

module type LT_PROD =3D functor (X : EQ) (Y : EQ) ->
sig
=C2= =A0 include EQ_PROD (*What do I say here?*)
end

=E2=80=8B... How does one do t= hat? Is there a syntax for this sort of thing?=E2=80=8B

--
Shayne Fletcher

--001a11475b1027c706053fec7646--