Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: "Issac Trotts" <ijtrotts@ucdavis.edu>
To: caml-list@inria.fr
Subject: Re: [Caml-list] References to polymorphic variants
Date: Wed, 25 Feb 2004 15:07:19 -0800	[thread overview]
Message-ID: <20040225230719.GA1148@manzanita> (raw)
In-Reply-To: <20040225224109.GC3578@localhost>

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


  reply	other threads:[~2004-02-25 23:07 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-25 16:05 nickgrey
2004-02-25 22:41 ` Eric C. Cooper
2004-02-25 23:07   ` Issac Trotts [this message]
2004-02-26  1:49     ` Eric C. Cooper
2004-02-26  1:53       ` Eric C. Cooper
2004-02-26  4:39         ` Jacques Garrigue
2004-02-25 22:56 ` [Caml-list] Re: Caml-list " Remi Vanicat

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040225230719.GA1148@manzanita \
    --to=ijtrotts@ucdavis.edu \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox