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 C8C927F719 for ; Tue, 28 Jan 2014 22:44:09 +0100 (CET) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of gabriel.scherer@gmail.com) identity=pra; client-ip=209.85.214.41; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of gabriel.scherer@gmail.com designates 209.85.214.41 as permitted sender) identity=mailfrom; client-ip=209.85.214.41; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@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-bk0-f41.google.com) identity=helo; client-ip=209.85.214.41; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="postmaster@mail-bk0-f41.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArcBAFsk6FLRVdYpm2dsb2JhbABAGoNEVrx4gQsIFg4BAQEBAQYLCwkUKIIlAQEBBEABGx0BAwwGBQsNLiEBAREBBQEcBhOHcAEDEQ02nVyMXIMJknIKGScNZIc4EQEFDIxeghUHhDgEljyBbIEyiyyDVBgpgxuBPzs X-IPAS-Result: ArcBAFsk6FLRVdYpm2dsb2JhbABAGoNEVrx4gQsIFg4BAQEBAQYLCwkUKIIlAQEBBEABGx0BAwwGBQsNLiEBAREBBQEcBhOHcAEDEQ02nVyMXIMJknIKGScNZIc4EQEFDIxeghUHhDgEljyBbIEyiyyDVBgpgxuBPzs X-IronPort-AV: E=Sophos;i="4.95,738,1384297200"; d="scan'208";a="55623850" Received: from mail-bk0-f41.google.com ([209.85.214.41]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 28 Jan 2014 22:44:09 +0100 Received: by mail-bk0-f41.google.com with SMTP id na10so643074bkb.0 for ; Tue, 28 Jan 2014 13:44:08 -0800 (PST) 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 :cc:content-type; bh=7KRbZ8EW4vrQ27cn6FOvZ6zVpeiBKLr+DYYkn1ikEoE=; b=t2Cg0rXlafLsQFUHXUMzlNdWOFWCNh4Ma9lCT0SMEwm8EBSiPFINXVJhW+BuVNOguW lUyWlu1ubJKe0qYy1Q62c6WAbgT/loWPuqdQxgpaMINf5jXYsEgy+fvjDLoD60F/odk7 MTo+2ayY47yexEAD0Cuyev2kU8fB2tRp7OgxGpygAVp/3EI8fWU7stTDgrqSgSD45d08 UJrMyHYEzTzGsev+ANORuNRAWTSL7FfW6ni80uIBWkj1Mh9vLwopH+/4HJYcTz0Uuo2w Bf96JA6Tp4442i+cS5clq72ovwAHnAElgYDg/+mzLXfyhBOPdGT/FBUgBV3WMNZdN/O6 W85Q== X-Received: by 10.204.54.197 with SMTP id r5mr3488205bkg.27.1390945448331; Tue, 28 Jan 2014 13:44:08 -0800 (PST) MIME-Version: 1.0 Received: by 10.205.45.5 with HTTP; Tue, 28 Jan 2014 13:43:28 -0800 (PST) In-Reply-To: References: From: Gabriel Scherer Date: Tue, 28 Jan 2014 22:43:28 +0100 Message-ID: To: Ashish Agarwal Cc: Caml List Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [Caml-list] ocaml 4.00.1 and 4.01.0 behave differently on module type constraint The change of behavior was part of PR#6090: http://caml.inria.fr/mantis/view.php?id=6090 It was a case of the type-checker refusing more programs than necessary. My understanding of the compatibility story of the type-system is that future versions will not rule out semantically valid programs accepted by previous ones (note that buggy programs previously accepted could be ruled out), but may accept strictly more semantically valid programs. If you need to be sure that your code compile under older versions, you should test them explicitely. On Tue, Jan 28, 2014 at 10:19 PM, Ashish Agarwal wrote: > Is the following an expected change from OCaml 4.00.1 to 4.01.0? > > Module Foo defines a private type and this module is included in Common. The > signature within Common is defined using `module type of` with a constraint. > The different behavior shown below occurs when the private type is a record, > but not if it is a base type like string or int. In that case, the code > compiles with both 4.00.1 and 4.01.0. > > $ cat a.ml > module Foo : sig > type t = private {a:int} > end = struct > type t = {a:int} > end > > module Common : sig > module F : module type of Foo with type t = Foo.t > end = struct > module F = Foo > end > > $ ocaml -version > The OCaml toplevel, version 4.01.0 > > $ ocaml a.ml > (* no errors *) > > Now, change version of OCaml being used. > > $ ocaml -version > The OCaml toplevel, version 4.00.1 > > $ ocaml a.ml > File "a.ml", line 9, characters 6-33: > Error: Signature mismatch: > Modules do not match: > sig module F : sig type t = Foo.t = private { a : int; } end end > is not included in > sig module F : sig type t = Foo.t = { a : int; } end end > In module F: > Modules do not match: > sig type t = Foo.t = private { a : int; } end > is not included in > sig type t = Foo.t = { a : int; } end > In module F: > Type declarations do not match: > type t = Foo.t = private { a : int; } > is not included in > type t = Foo.t = { a : int; } > File "a.ml", line 8, characters 37-51: Expected declaration > File "a.ml", line 2, characters 7-26: Actual declaration > A private type would be revealed. >