From: Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
To: BeckW@t-systems.com
Cc: caml-list@inria.fr
Subject: RE: [Caml-list] strange behaviour with variants and "cannot be g eneralized"
Date: Wed, 10 Sep 2003 17:18:30 +0900 [thread overview]
Message-ID: <20030910171830O.garrigue@kurims.kyoto-u.ac.jp> (raw)
In-Reply-To: <ADD42C8394EBD4118A3D0003470C18F00950F3D8@G9JJT.mgb01.telekom.de>
From: "Beck01, Wolfgang" <BeckW@t-systems.com>
> Didier Remy [mailto:remy@morgon.inria.fr] wrote:
>
> > Here is some explanation of
> >
> > 1) what happened in version 3.06 and
> > 2) how this is related to a relaxed form of value restriction,
> > 3) which is actually orthogonal to the solution implemented in 3.07
> >
> > [detailed explanation omitted]
>
> well, I was not aware that compilation of polymorphic variants is an area
> of ongoing research. In the OCaml manual, they are not mentioned under
> "Language extensions" but as a section in the chapter "An introduction to
> Objective Caml". There is a statement
>
> "In programs, polymorphic variants work like usual ones. You just
> have to prefix their names with a backquote character `."
>
> and this is not true, at least in 3.06. After spending another evening
> with weird type errors, I replaced polymorphic variants with ordinary
> ones. My project looks uglier now since I had to split up some files,
> but at least it compiles and runs.
Well the problem discussed above is not one of polymorphic variants,
but of polymorphism in general. And it is about type checking, not
compilation (the latter being pretty trivial).
The relaxed value restriction happens to make life easier with
variants, but this is not its only goal.
There is maybe a misunderstanding on the "work like" bit.
Honestly, if polymorphic variants where "just like" normal variants,
there would be no point in using them. The intended meaning, is that
they have the same operational semantics as normal variants, but the
typing is fully another story. And there are a few warnings in the
manual about the need to write some types if want to avoid an overdose
of polymorphism. Polymorphic variants are not dangerous (actually
they're type safe!) but they can bite if you're not careful.
I understand your disappointment, and just hope you will look again at
this feature after getting more used to the type checker.
Answering to Didier Remy, when I introduced the relaxed value
restriction I intended first to do both improvements simultaneously,
but I stopped short of it for several reasons.
* the improvement you describe would require extensive changes in the
type checker, as all the work on polymorphism is currently delegated
to the handling of let.
* the combination with the relaxed restriction makes it even trickier
* in many cases, the relaxed restriction does already the job
* even when this is not the case, this improvement is purely
syntactic, so you can still expand your definition to solve the
problem, as Wolfgang discovered himself
* actually there is an exception, if a record type mixes both mutable
and immutable fields
type 'a mix = {data: 'a ; mutable count: int}
let r = {data = (fun x -> x); count = 0}
There is no solution here, short of changing the type to use a
reference rather than a mutable field.
But it might also be the case that you just want to put the identity
there. In that case we have now polymorphic fields.
type mix = {data: 'a. 'a -> 'a ; mutable count: int}
let r = {data = (fun x -> x); count = 0}
So, I think this is a good idea in itself, but before I try again
introducing this improvement, I need a few compelling examples to
justify the effort.
Cheers,
Jacques Garrigue
-------------------
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
next prev parent reply other threads:[~2003-09-10 8:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-09-10 7:10 Beck01, Wolfgang
2003-09-10 8:12 ` Fernando Alegre
2003-09-10 8:18 ` Jacques Garrigue [this message]
2003-09-10 10:39 ` skaller
2003-09-10 9:48 ` skaller
2003-09-10 11:34 ` Frederic De Jaeger
-- strict thread matches above, loose matches on Subject: below --
2003-09-09 14:13 Beck01, Wolfgang
2003-09-09 19:17 ` Didier Remy
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=20030910171830O.garrigue@kurims.kyoto-u.ac.jp \
--to=garrigue@kurims.kyoto-u.ac.jp \
--cc=BeckW@t-systems.com \
--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