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 D1ABC7F71A for ; Wed, 23 Apr 2014 11:50:51 +0200 (CEST) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of ontologiae@gmail.com) identity=pra; client-ip=209.85.215.48; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="ontologiae@gmail.com"; x-sender="ontologiae@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of ontologiae@gmail.com designates 209.85.215.48 as permitted sender) identity=mailfrom; client-ip=209.85.215.48; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="ontologiae@gmail.com"; x-sender="ontologiae@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-la0-f48.google.com) identity=helo; client-ip=209.85.215.48; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="ontologiae@gmail.com"; x-sender="postmaster@mail-la0-f48.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgcDAJyMV1PRVdcwlGdsb2JhbABZg1VXgw+nOJlrGXYIFg4BAQEBBwsLCRIqgk8EGQEbHgMSAwYHNwIEIAERAQUBIog/AQMRDY9ajHyDD4wQUYMNmAsKGScNZIYaAQUMjkiCeoFKBJh1gTePLRgphGM7 X-IPAS-Result: AgcDAJyMV1PRVdcwlGdsb2JhbABZg1VXgw+nOJlrGXYIFg4BAQEBBwsLCRIqgk8EGQEbHgMSAwYHNwIEIAERAQUBIog/AQMRDY9ajHyDD4wQUYMNmAsKGScNZIYaAQUMjkiCeoFKBJh1gTePLRgphGM7 X-IronPort-AV: E=Sophos;i="4.97,910,1389740400"; d="scan'208";a="69709536" Received: from mail-la0-f48.google.com ([209.85.215.48]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 23 Apr 2014 11:50:21 +0200 Received: by mail-la0-f48.google.com with SMTP id gf5so542528lab.7 for ; Wed, 23 Apr 2014 02:50:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=ScAu3LEftxYvRXFsSY0bt4AlOycghPMQWljpdm+ha9g=; b=xrsYMf9QUdWyfkG+nIIJp7dpYohYW533Zj8KKI//Uk8NJkae8HWu08X3ZvNJpSgR/m G+SgNM0UXjjWPRAes7aX6CWO5Y0HeaqgN2mdGuAGsE9TnRTZExVZPIH7cWbqf4QdXK4w EoTOmKS9tU4HCrIhTXG601TAt3Kps7pgBOM7DtZ9JAOSA8IhAeoL8zlujBU/Qpgmc4UI IkSPBtUj1+k+K2DLQdrBJwcQ5Qi5ooAEVqyFdI2hl+B07z1rKi+etZJzsHltHTd1GXJe ITAkJE6q7ZtzCErAI6fMmIfMy5OIB9n1XuC4AsHQjejJkJBMw/k8Uh0G21zMZtn0WNWn yKKw== X-Received: by 10.153.8.135 with SMTP id dk7mr35287771lad.18.1398246620654; Wed, 23 Apr 2014 02:50:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.152.105.116 with HTTP; Wed, 23 Apr 2014 02:50:00 -0700 (PDT) From: Pierre-Alexandre Voye Date: Wed, 23 Apr 2014 11:50:00 +0200 Message-ID: To: caml-list Content-Type: multipart/alternative; boundary=001a11347e9e21f2cb04f7b2a9e0 Subject: [Caml-list] Module inside an object --001a11347e9e21f2cb04f7b2a9e0 Content-Type: text/plain; charset=UTF-8 Hello, I would like to define a parameterized module inside an object by the type of this object. I have two module interlocked : (* Parameters*) module type A = sig type agent type intern_agent = { i : agent} val create : agent -> intern_agent end module type E = sig type event end module type StateType = sig type agent type event type state_t = { mutable name : string; mutable parentstate : state_t option; } end module State (A : A) (E : E) = struct type agent = A.agent type event = E.event type state_t = { mutable name : string; mutable parentstate : state_t option; } (*...*) end module Agent (S : StateType) = struct type agent = S.agent type event = S.event type state_t = S.state_t type agent_t = { mutable agent : agent ; } let create a1 = { agent = a1; } end (* An implementation of E*) type event1 = Event1 | Event2;; module E = struct type event = event1 end;; What I would like to do is something like that (which is syntacticly incorrect but represents what I would like to do) : class character = object (self :'self) val mutable position = (0,0) val agent = let A = (module Ag = struct type agent = 'self type intern_agent = { i : agent} let create a = { i = a } end) in let Ag = (module Agent(State(A)(E)) ) in Ag.create self method getPosition = position end;; How can I write this to be able to define a value which is an Agent parametrized by itself ? Thank you, -- Pierre-Alexandre Voye --------------------- https://twitter.com/#!/ontologiae/ http://linuxfr.org/users/montaigne --001a11347e9e21f2cb04f7b2a9e0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5IZWxsbyw8YnI+SSB3b3VsZCBsaWtlIHRv IGRlZmluZSBhIHBhcmFtZXRlcml6ZWQgbW9kdWxlIGluc2lkZSBhbiBvYmpl Y3QgYnkgdGhlIHR5cGUgb2YgdGhpcyBvYmplY3QuPGJyPjxicj48YnI+SSBo YXZlIHR3byBtb2R1bGUgaW50ZXJsb2NrZWQgOjxicj48YnI+KCogUGFyYW1l dGVycyopPGJyPm1vZHVsZSB0eXBlIEEgPSBzaWc8YnI+wqDCoMKgwqDCoMKg wqAgdHlwZSBhZ2VudDxicj4NCg0KwqDCoMKgwqDCoMKgwqAgdHlwZSBpbnRl cm5fYWdlbnQgPSB7IGkgOiBhZ2VudH08YnI+wqDCoMKgwqDCoMKgwqAgdmFs IGNyZWF0ZSA6IGFnZW50IC0mZ3Q7IGludGVybl9hZ2VudDxicj5lbmQ8YnI+ PGJyPm1vZHVsZSB0eXBlIEUgPSBzaWc8YnI+wqDCoMKgwqDCoMKgwqAgdHlw ZSBldmVudDxicj5lbmQ8YnI+PGJyPjxicj48YnI+bW9kdWxlwqAgdHlwZSBT dGF0ZVR5cGUgPSBzaWc8YnI+PGJyPsKgIHR5cGUgYWdlbnQ8YnI+DQrCoCB0 eXBlIGV2ZW50PGJyPg0KPGJyPsKgIHR5cGXCoCBzdGF0ZV90ID0ge8KgIDxi cj7CoMKgwqAgbXV0YWJsZSBuYW1lIDogc3RyaW5nOzxicj7CoMKgwqAgbXV0 YWJsZSBwYXJlbnRzdGF0ZcKgIDrCoCBzdGF0ZV90IG9wdGlvbjs8YnI+wqAg fTxicj5lbmQ8YnI+PGJyPjxicj5tb2R1bGUgU3RhdGUgKEEgOiBBKSAoRSA6 IEUpID0gc3RydWN0PGJyPjxicj7CoMKgwqDCoMKgwqDCoCB0eXBlIGFnZW50 ID0gQS5hZ2VudDxicj7CoMKgwqDCoMKgwqDCoCB0eXBlIGV2ZW50ID0gRS5l dmVudDxicj4NCg0KwqDCoMKgIHR5cGXCoCBzdGF0ZV90ID0ge8KgIDxicj7C oMKgIMKgwqDCoCDCoMKgwqAgwqBtdXRhYmxlIG5hbWUgOiBzdHJpbmc7PGJy PsKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgbXV0YWJsZSBwYXJlbnRzdGF0ZcKg IDrCoCBzdGF0ZV90IG9wdGlvbjs8YnI+wqDCoMKgIH08YnI+PGJyPjxicj7C oMKgwqAgKCouLi4qKTxicj5lbmQ8YnI+PGJyPjxicj48YnI+bW9kdWxlIEFn ZW50IChTIDogU3RhdGVUeXBlKSA9PGJyPsKgwqDCoMKgwqDCoMKgIHN0cnVj dDxicj4NCg0KwqDCoMKgwqDCoMKgwqDCoMKgIHR5cGUgYWdlbnQgPSBTLmFn ZW50PGJyPsKgwqDCoMKgwqDCoMKgwqDCoCB0eXBlIGV2ZW50ID0gUy5ldmVu dDxicj7CoMKgwqDCoMKgwqDCoMKgwqAgdHlwZSBzdGF0ZV90ID0gUy5zdGF0 ZV90PGJyPjxicj7CoMKgwqAgwqAgdHlwZcKgIGFnZW50X3QgPSB7PGJyPsKg wqDCoCDCoMKgwqAgwqAgbXV0YWJsZSBhZ2VudMKgwqDCoMKgwqAgOiBhZ2Vu dCA7PGJyPsKgwqDCoCDCoCB9PGJyPjxicj7CoMKgwqAgwqAgbGV0IGNyZWF0 ZSBhMcKgwqAgPSB7IDxicj4NCg0KwqDCoMKgIMKgwqDCoCDCoCBhZ2VudMKg wqDCoMKgwqDCoMKgwqDCoCA9IGExOzxicj7CoMKgwqAgwqAgfSA8YnI+ZW5k PGJyPjxicj48YnI+KCogQW4gaW1wbGVtZW50YXRpb24gb2YgRSopPGJyPnR5 cGUgZXZlbnQxID0gRXZlbnQxIHwgRXZlbnQyOzs8YnI+bW9kdWxlIEUgPSBz dHJ1Y3QgdHlwZSBldmVudCA9IGV2ZW50MSBlbmQ7Ozxicj48YnI+PGJyPjxi cj48YnI+V2hhdCBJIHdvdWxkIGxpa2UgdG8gZG8gaXMgc29tZXRoaW5nIGxp a2UgdGhhdCAod2hpY2ggaXMgc3ludGFjdGljbHkgaW5jb3JyZWN0IGJ1dCBy ZXByZXNlbnRzIHdoYXQgSSB3b3VsZCBsaWtlIHRvIGRvKSA6PGJyPg0KDQo8 YnI+PGJyPmNsYXNzwqAgY2hhcmFjdGVyID0gb2JqZWN0IChzZWxmIDomIzM5 O3NlbGYpPGJyPsKgdmFsIG11dGFibGUgcG9zaXRpb27CoMKgwqDCoMKgwqDC oCA9ICgwLDApPGJyPsKgdmFsIGFnZW50IMKgwqDCoCDCoMKgwqAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gPGJyPsKgwqDCoCDCoMKgwqAg wqDCoMKgIMKgwqDCoCBsZXQgQSA9IChtb2R1bGUgQWfCoCA9IHN0cnVjdCA8 YnI+wqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAg wqDCoMKgIMKgwqDCoCB0eXBlIGFnZW50ID0gJiMzOTtzZWxmIDxicj4NCg0K wqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDC oMKgIMKgwqDCoCB0eXBlIGludGVybl9hZ2VudCA9IHsgaSA6IGFnZW50fSA8 YnI+wqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAg wqDCoMKgIMKgwqDCoCBsZXQgY3JlYXRlIGEgPSB7IGkgPSBhIH0gPGJyPsKg wqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDC oMKgwqAgZW5kKTxicj7CoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDC oMKgIMKgaW48YnI+wqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIGxldCBB ZyA9IChtb2R1bGUgQWdlbnQoU3RhdGUoQSkoRSkpICkgaW48YnI+DQoNCsKg wqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCBBZy5jcmVhdGUgc2VsZjxicj7C oDxicj7CoG1ldGhvZCBnZXRQb3NpdGlvbsKgwqDCoMKgwqDCoMKgwqDCoCA9 IHBvc2l0aW9uPGJyPsKgPGJyPmVuZDs7PGJyPjxicj7CoDxicj48YnI+SG93 IGNhbiBJIHdyaXRlIHRoaXMgdG8gYmUgYWJsZSB0byBkZWZpbmUgYSB2YWx1 ZSB3aGljaCBpcyBhbiBBZ2VudCBwYXJhbWV0cml6ZWQgYnkgaXRzZWxmID88 YnI+PGJyPlRoYW5rIHlvdSw8YnI+DQoNCjxicj48L2Rpdj4tLSA8YnI+PGRp dj5QaWVycmUtQWxleGFuZHJlIFZveWU8YnI+LS0tLS0tLS0tLS0tLS0tLS0t LS0tPGJyPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vIyUyMS9vbnRv bG9naWFlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vdHdpdHRlci5jb20v IyEvb250b2xvZ2lhZS88L2E+PGJyPjxhIGhyZWY9Imh0dHA6Ly9saW51eGZy Lm9yZy91c2Vycy9tb250YWlnbmUiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8v bGludXhmci5vcmcvdXNlcnMvbW9udGFpZ25lPC9hPjxicj4NCg0KDQo8L2Rp dj48L2Rpdj4NCg== --001a11347e9e21f2cb04f7b2a9e0--