From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id p4N7omHr014506 for ; Mon, 23 May 2011 09:50:48 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AsECAEQR2k3RVaG2kGdsb2JhbACEXJNKjXQIFAEBAQEJCQ0HFAQipFaCQotfPII1g1Q3iGIBAQMGgSWDZ4EHBIZKiUeLBTuDOA X-IronPort-AV: E=Sophos;i="4.65,255,1304287200"; d="scan'208";a="95189764" Received: from mail-gx0-f182.google.com ([209.85.161.182]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 23 May 2011 09:50:43 +0200 Received: by mail-gx0-f182.google.com with SMTP id 28so3133973gxk.27 for ; Mon, 23 May 2011 00:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:date:message-id:subject:from:to :content-type; bh=KkjbLB/ffjDVx8XS6McjEgY09WwFhfswgLWy1R4B2rQ=; b=GVsW+TnrBvHDkAoFZDYIW6OqoKbKQ2fdgowiY42JI8IiqFbj3bp5EYfTDjlprk31Or kOln5c2GKNSGZZhSjWWdU2rkn451qtmpr8Xo4oWcSCV29dnzHmn2UXYACzvFZWENWAvF FE1VgCDEaBZ+I8w8Fpge+wEjiXDKEaMD95dTQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=SHe7eYdNcP5uzPlOhI+PDQI+cPb1KeJ8RCkqAUr7pFqXEwm7zFJsEUXsIKsYBrWW2T 9AAv8R9KtnTO7Qlk9rppDX4vto6l0ge08A0tENYcmuVNKdFuiIFBpQPAOrAIZ/S9ns32 2laGc+9eKFet9RWy+EYj1vrSEO2Mjot3WLS7E= MIME-Version: 1.0 Received: by 10.150.61.8 with SMTP id j8mr2351722yba.219.1306137043271; Mon, 23 May 2011 00:50:43 -0700 (PDT) Received: by 10.151.6.21 with HTTP; Mon, 23 May 2011 00:50:43 -0700 (PDT) Date: Mon, 23 May 2011 10:50:43 +0300 Message-ID: From: Dmitry Grebeniuk To: caml-list@inria.fr Content-Type: text/plain; charset=UTF-8 Subject: [Caml-list] ocaml, objects, classes, type ascription, virtual methods Hello. I have a base class with virtual methods and an extended classes where these methods are implemented. When I'm ascribing type "base" to class "ext", I get an error: ============= OCaml version 3.13.0+dev3 (2011-03-07) # class virtual base = object method virtual m : unit end;; class virtual base : object method virtual m : unit end # class ext : base = object method m = () end;; Characters 6-43: class ext : base = object method m = () end;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Error: This class should be virtual. The following methods are undefined : m # ============= Is it the expected behaviour? It would be more useful to allow to constrain "class ext" by type "base" while providing an implementation for virtual methods. For now, I'm omitting the type ascription, but then I have less guarantees about extended classes' compatibility/interchangeability.