From: Gabriel Scherer <gabriel.scherer@gmail.com>
To: Christopher Zimmermann <madroach@gmerlin.de>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] typing mutually recursive classes
Date: Wed, 24 Oct 2012 20:40:27 +0200 [thread overview]
Message-ID: <CAPFanBFpKi_0dCfrCp5_1d9rrhx5ykhJz=WJDFAaJkzDNW0xcA@mail.gmail.com> (raw)
In-Reply-To: <20121024200310.9c639f43a97263423e113500@gmerlin.de>
I don't really understand what you are trying to achieve with this
#foo types. What would even be the type of "set" in your example? You
cannot hold a mutable reference to a polymorphic type (#element list),
so I'm not sure what you would have but (element list). If you're
going to coerce your elements into the common (element) supertype
anyway, why insist on having flexible bounds? You could just use
(registry) and (element), coerce when needed (foo :> element), and get
rid of those pesky typing issues.
On Wed, Oct 24, 2012 at 8:03 PM, Christopher Zimmermann
<madroach@gmerlin.de> wrote:
> Hi,
>
> I have a problem with typing a system of mutually recursive classes.
>
> This piece of code fails to compile:
>
> class a =
> object end
> and b =
> object
> method foo: a -> int =
> fun s -> 3
> end;;
>
> Error: The universal type variable 'a cannot be generalized:
> it escapes its scope.
>
>
> But this compiles fine:
>
> class a =
> object end
> class b =
> object
> method foo: 'a. (#a as 'a) -> int =
> fun s -> 3
> end;;
>
>
> What I actually want to do is this:
>
> class element id (registry :#registry) =
> object
> method registry = registry
> end
>
> and registry =
> object
> val set = []
> method register :'a. (#element as 'a) -> unit =
> fun s ->
> set <- s :: set
> end
>
>
> Any ideas how to do this without parametrizing the classes?
>
> Christopher
>
>
> --
> Caml-list mailing list. Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
next prev parent reply other threads:[~2012-10-24 18:41 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-24 18:03 Christopher Zimmermann
2012-10-24 18:40 ` Gabriel Scherer [this message]
2012-10-24 19:32 ` [Caml-list] " Christopher Zimmermann
2012-10-24 20:35 ` Didier Cassirame
2012-10-24 21:30 ` Didier Cassirame
[not found] ` <CAPFanBHdh8xKsZC6fs2oXEOitjKLhZzVUdVmYT+6d0jL46YM0w@mail.gmail.com>
2012-10-24 21:04 ` [Caml-list] " Gabriel Scherer
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='CAPFanBFpKi_0dCfrCp5_1d9rrhx5ykhJz=WJDFAaJkzDNW0xcA@mail.gmail.com' \
--to=gabriel.scherer@gmail.com \
--cc=caml-list@inria.fr \
--cc=madroach@gmerlin.de \
/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;
as well as URLs for NNTP newsgroup(s).