From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id AAA03409; Thu, 26 Feb 2004 00:07:38 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f 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 AAA04488 for ; Thu, 26 Feb 2004 00:07:37 +0100 (MET) Received: from pop19.ucdavis.edu (pop19.ucdavis.edu [169.237.105.29]) by concorde.inria.fr (8.12.10/8.12.10) with ESMTP id i1PN7Zae000850 for ; Thu, 26 Feb 2004 00:07:36 +0100 Received: from manzanita ([128.120.141.214]) by pop19.ucdavis.edu (8.12.10/8.12.9/it-std-5.2.0) with SMTP id i1PN7Y4U000289 for ; Wed, 25 Feb 2004 15:07:34 -0800 (PST) Received: by manzanita (sSMTP sendmail emulation); Wed, 25 Feb 2004 15:07:19 -0800 From: "Issac Trotts" Date: Wed, 25 Feb 2004 15:07:19 -0800 To: caml-list@inria.fr Subject: Re: [Caml-list] References to polymorphic variants Message-ID: <20040225230719.GA1148@manzanita> Mail-Followup-To: ijtrotts@ucdavis.edu, caml-list@inria.fr References: <20040225224109.GC3578@localhost> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040225224109.GC3578@localhost> User-Agent: Mutt/1.5.4i X-Miltered: at concorde by Joe's j-chkmail ("http://j-chkmail.ensmp.fr")! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; issac:01 trotts:01 ijtrotts:01 caml-list:01 2004:99 2004:99 3.07:01 3.07:01 val:01 foo:01 usr:01 ocamlc:01 foo:01 usr:01 ocamlc:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Wed, Feb 25, 2004 at 05:41:09PM -0500, Eric C. Cooper wrote: > On Wed, Feb 25, 2004 at 09:05:48AM -0700, nickgrey@softhome.net wrote: > > I want to be able to store an arbitrary polymorphic variant in a reference: > > > > let (x : ([> ] option) ref ) = ref None ;; > > > > (Not my actual code, I've boiled it down to a minimal example.) > > > > This won't compile because it "contains a type variable which cannot be > > generalized". > > It works in version 3.07+2: > > Objective Caml version 3.07+2 > > # let (x : [> ] option ref) = ref None;; > val x : _[> ] option ref = {contents = None} He's talking about compiling it, which is slightly different: $ cat foo.ml let (x : ([> ] option) ref ) = ref None ;; $ /usr/bin/ocamlc -c foo.ml File "foo.ml", line 1, characters 31-39: The type of this expression, _[> ] option ref, contains type variables that cannot be generalized $ /usr/bin/ocamlc -v The Objective Caml compiler, version 3.07+2 Standard library directory: /usr/lib/ocaml/3.07 The set of values that x can have is still unspecified, so there is implicitly a type variable whose value needs to be nailed down before the example can compile. Here's a way to work around it: type t = [ `bleh | `woof ];; let x = ref (None : t option);; -- Issac Trotts http://redwood.ucdavis.edu/~issac ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners