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 410457FACB for ; Thu, 4 Sep 2014 15:54:19 +0200 (CEST) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of yotambarnoy@gmail.com) identity=pra; client-ip=209.85.216.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="yotambarnoy@gmail.com"; x-sender="yotambarnoy@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of yotambarnoy@gmail.com designates 209.85.216.42 as permitted sender) identity=mailfrom; client-ip=209.85.216.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="yotambarnoy@gmail.com"; x-sender="yotambarnoy@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-qa0-f42.google.com) identity=helo; client-ip=209.85.216.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="yotambarnoy@gmail.com"; x-sender="postmaster@mail-qa0-f42.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqcBAKFuCFTRVdgqlGdsb2JhbABZhDuCeMx7AX0IFhABAQEBBwsLCRIrhAQBAQMBEhEEGQEbHgMBCwYFBAc3AgIhAQERAQUBHAYTIogLAQMJCJp9a4srgXKDEIk8ChknDWaFVgERAQUOjRKCNIJ5gVMBBI8pizOCEI5qhEYYKYUuIS+CTwEBAQ X-IPAS-Result: AqcBAKFuCFTRVdgqlGdsb2JhbABZhDuCeMx7AX0IFhABAQEBBwsLCRIrhAQBAQMBEhEEGQEbHgMBCwYFBAc3AgIhAQERAQUBHAYTIogLAQMJCJp9a4srgXKDEIk8ChknDWaFVgERAQUOjRKCNIJ5gVMBBI8pizOCEI5qhEYYKYUuIS+CTwEBAQ X-IronPort-AV: E=Sophos;i="5.04,466,1406584800"; d="scan'208";a="93030084" Received: from mail-qa0-f42.google.com ([209.85.216.42]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 04 Sep 2014 15:54:18 +0200 Received: by mail-qa0-f42.google.com with SMTP id dc16so5477990qab.15 for ; Thu, 04 Sep 2014 06:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=6wNufkDImD+Pd7j1uvXx/gVHHfV+aSavPzTpXix+F3A=; b=SRagq3wZXZFOyYTIlZJBa31zMvL+LWmO6HNqV1/IVdErqHsg4IEVCDdohsbw7jGTT/ VWVZkxwZVOhgjmVYXgJV2Ho3dt05GVryAQjmdSQAcQP99xjKHgUdWsUgTmWa++n26P1J xVM5MIYdTPd/v5f7/lzhGB8uMO7SBe/Hs2svvcuf81BrTvd3oKNe90yoQcmY5jiLw4n4 Nypf1ykdj7xeg2ZuuuW+5jirh+TjbuTiUGV58xgaGDSDNlbZRbcrew9E79pPwbMrHD7k 7JCxk0uWWsTgthHAwTnS3aGFYFmXkfUDlQHS+8M5rE7ntKZ/AYReNZod2qc2CrLD3NcJ s5uA== X-Received: by 10.224.173.7 with SMTP id n7mr7275509qaz.15.1409838857630; Thu, 04 Sep 2014 06:54:17 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.174.68 with HTTP; Thu, 4 Sep 2014 06:53:57 -0700 (PDT) In-Reply-To: References: From: Yotam Barnoy Date: Thu, 4 Sep 2014 09:53:57 -0400 Message-ID: To: Ocaml Mailing List Content-Type: multipart/alternative; boundary=047d7b5da6c74cbd6005023db01f Subject: Re: [Caml-list] help with functors --047d7b5da6c74cbd6005023db01f Content-Type: text/plain; charset=UTF-8 Here's an attempt to clarify the question: I have a functor F and a functor G. I apply F to module M outside of G to create F', and within G I also apply F to M to create F''. Additionally, G is applied to M to create G'. How do I make the compiler understand that F' outside G' is the same as F'' inside G'? Yotam On Wed, Sep 3, 2014 at 1:20 PM, Yotam Barnoy wrote: > Working with ocaml's functional data structures has quickly become a job > of connecting different functors together, and I'd appreciate some help. > > I have the following layout: > > module rec OrderedKey : OrderedKeyType = struct > type t = Value.value_t > let compare = compare > let filter_idxs idxs = function > | Value.VTuple l -> Value.VTuple(list_filter_idxs idxs l) > | _ -> invalid_arg "not a vtuple" > end > > and ValueBag : IBag.S with type elt = Value.value_t = > IBag.Make(OrderedKey) > > and ValueMMap : IMultimap.S with type elt = Value.value_t and type bag = > ValueBag.t = > IMultimap.Make(OrderedKey) > > and Value : sig ... type value_t = ... end = Value > > The situation is as such: my multimap (IMultimap) contains an internal > specialization of the IBag functor called an InnerBag. It attempts to > return said bag, which is equivalent to the external ValueBag in structure. > However, I don't know how to tell ocaml that the type 'bag' which is > abstract in IMultimap is exactly the same as the external ValueBag. I tried > to do that above, but what I get is a mismatch between IMultimap's internal > InnerBag.t and the external ValueBag.t. > > Any help would be appreciated. > > Yotam > > --047d7b5da6c74cbd6005023db01f Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Here's an attempt to clarify the question:

I have a functor F and a functor G. I apply F to module M outside o= f G to create F', and within G I also apply F to M to create F''= ;. Additionally, G is applied to M to create G'. How do I make the comp= iler understand that F' outside G' is the same as F'' insid= e G'?

Yotam


On Wed, Sep 3, 2014 at 1:20 PM, Yotam Barnoy <= yotambarnoy@gmail.com> wrote:
Working with ocaml's fu= nctional data structures has quickly become a job of connecting different f= unctors together, and I'd appreciate some help.

I have the following layout:

module rec OrderedKey : OrderedKeyType =3D struct<= /div>
=C2=A0 =C2=A0 type t =3D Value.value_t
=C2=A0 =C2=A0 le= t compare =3D compare
=C2=A0 =C2=A0 let filter_idxs idxs =3D func= tion
=C2=A0 =C2=A0 =C2=A0 | Value.VTuple l -> Value.VTuple(lis= t_filter_idxs idxs l)
=C2=A0 =C2=A0 =C2=A0 | _ -> invalid_arg "not a vtuple"
=C2=A0 =C2=A0 end

and ValueBag : IBag.S wi= th type elt =3D Value.value_t =3D
=C2=A0 IBag.Make(OrderedKey)

and ValueMMap : IMultimap.S with type elt =3D Value.= value_t and type bag =3D ValueBag.t =3D
=C2=A0 IMultimap.Make(OrderedKey)

and Value := sig ... type value_t =3D ... end =3D Value

= The situation is as such: my multimap (IMultimap) contains an internal spec= ialization of the IBag functor called an InnerBag. It attempts to return sa= id bag, which is equivalent to the external ValueBag in structure. However,= I don't know how to tell ocaml that the type 'bag' which is ab= stract in IMultimap is exactly the same as the external ValueBag. I tried t= o do that above, but what I get is a mismatch between IMultimap's inter= nal InnerBag.t and the external ValueBag.t.

Any help would be appreciated.

Yotam

<= /font>

--047d7b5da6c74cbd6005023db01f--