Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] References to polymorphic variants
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Issac Trotts <ijtrotts@u...>
Subject: Re: [Caml-list] References to polymorphic variants
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