Browse thread
[Caml-list] References to polymorphic variants
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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