From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Delivered-To: caml-list@yquem.inria.fr Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id A4D48BC84 for ; Tue, 26 Apr 2005 15:45:32 +0200 (CEST) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id j3QDjWGN009623 for ; Tue, 26 Apr 2005 15:45:32 +0200 Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id PAA27026 for ; Tue, 26 Apr 2005 15:45:31 +0200 (MET DST) Received: from copper.three-tuns.net (copper.three-tuns.net [193.201.200.235]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id j3QDjVWl009620 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 26 Apr 2005 15:45:31 +0200 Received: from mark by copper.three-tuns.net with local (Exim 4.50) id 1DQQNX-0003CQ-7a for caml-list@inria.fr; Tue, 26 Apr 2005 14:45:31 +0100 Date: Tue, 26 Apr 2005 14:45:31 +0100 From: Mark Shinwell To: caml-list@inria.fr Subject: Re: [Caml-list] Type inference question Message-ID: <20050426134531.GB10841@three-tuns.net> References: <17006.11606.297786.728905@gargle.gargle.HOWL> <20050426131907.GA10841@three-tuns.net> <426E44FE.2000003@ps.uni-sb.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <426E44FE.2000003@ps.uni-sb.de> User-Agent: Mutt/1.5.9i Sender: Mark Shinwell X-Miltered: at concorde with ID 426E45FC.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Miltered: at concorde with ID 426E45FB.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; shinwell:01 shinwell:01 caml-list:01 inference:01 rossberg:01 stdin:01 sml:01 nonexpansive:01 mutable:01 ocaml:01 ocaml:01 semantics:01 26,:98 wrote:01 wrote:01 X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on yquem.inria.fr X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.0.2 X-Spam-Level: On Tue, Apr 26, 2005 at 03:41:18PM +0200, Andreas Rossberg wrote: > Mark Shinwell wrote: > > > >However, in the Marshal example above, we have > > > > Marshal.from_channel stdin [] > > > >in the first part of the "let". In the SML terminology, this is not a > >"nonexpansive expression"[*] (unlike "fun x -> x"). Therefore, I would > >have thought that the appearance of such an expression here would > >prohibit generalisation (in order to prevent possible unsoundness in the > >presence of mutable state). This is presumably not the case in OCaml: > >can someone explain why? > > Recent versions of OCaml employ a slightly relaxed variant of the value > restriction that allows generalising of variables in covariant position, > because that is always safe. Ah, yes---I had forgotten about that. Thanks. Mark -- Mark Shinwell -- email: Mark.Shinwell@cl.cam.ac.uk Theory and Semantics Group, University of Cambridge Computer Laboratory