From: bluestorm <bluestorm.dylc@gmail.com>
To: Jacques Le Normand <rathereasy@gmail.com>
Cc: caml-list caml-list <caml-list@yquem.inria.fr>
Subject: Re: [Caml-list] Generalized Algebraic Datatypes
Date: Mon, 25 Oct 2010 11:44:48 +0200 [thread overview]
Message-ID: <AANLkTimw39FAapf3Ptecs40vAvO2G+qbAtPMizy-VeWy@mail.gmail.com> (raw)
In-Reply-To: <AANLkTinoNC+OY0Zo6Aju5gKuiajqjomcNJinfky1FAYf@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3908 bytes --]
It's very interesting.
First, I'm curious of the "historical" aspects of this work : where does it
come from ? Apparently there is work from you and Jacques Garrigue, but it's
hard to tell. Is it new, or a long-running experiment ?
In your "intuition" section (btw. there is a typo here, it should be (type
s) (x : s t)), you seem to present GADT as directly related to the new (type
s) construct. It's a bit surprising because it's difficult to know the
difference between this and classic type variables. I suppose it is because
only (type s) guarantee that the variable remains polymorphic, and you use
that to ensure that branch-local unifications don't "escape" to the outer
level ? Could you be a bit more explicit on this ?
It's also a bit difficult to know what's the big deal about "exhaustiveness
checks". As I understand it, you remark that with GADTs some case cannot
happen due to typing reasons, but the exhaustive check doesn't know about
it. Could you be a bit more explicit about what the exhaustiveness checker
does :
- is it exactly the same behavior as before, ignoring GADT specificities ?
(ie. you haven't changed anything)
- if not, what have you changed and how can we try to predict its reaction
to a given code ?
- what can we do when it doesn't detect an impossible case ? I suppose we
can't a pattern clause for it, as the type checker would reject it.
I'm not sure I understand the example of the "Variance" section.
Why is the cast in that direction ? It seems to me that even if we could
force t to be covariant, this cast (to a less general type) shouldn't work :
# type +'a t = T of 'a;;
# let a = T (object method a = 1 end);;
# (a :> < m : int; n : bool > t);;
Error: Type < a : int > t is not a subtype of < m : int; n : bool > t
Again, you "Objects and variants" and "Propagation" subsections are a bit
vague. Could you give example of code exhibiting possible problems ?
Finally, a few syntax trolls, in decreasing order of constructivity :
- is it a good idea to reproduce the "implicit quantification" of ordinary
types ? It seems it could be particularly dangerous here.
for example, changing
type _ t = Id : 'a -> 'a t
to
type 'a t = Id : 'a -> 'a t | Foo of 'a
introduce, if I'm not mistaken, a semantic-changing variable captures.
(I thought other dark corners of the type declarations already had this
behavior, but right now I can't remember which ones)
- if I understand it correctly, (type a . a t -> a) is yet another syntax
for type quantification. Why ? I thought (type a) was used to force
generalization, but ('a . ...)-style annotation already force polymorphism
(or don't they ?). Is it a semantic difference with ('a . 'a t -> 'a), other
than its interaction with gadts ? Can we use (type a . a t -> a) in all
places where we used ('a . 'a t -> 'a) before ?
- is there a rationale for choosing Coq-style variant syntax instead of just
adding a blurb to the existing syntax, such as
| IntLit of int : int t
or
| IntList of int return int t
?
Thanks.
On Mon, Oct 25, 2010 at 10:39 AM, Jacques Le Normand <rathereasy@gmail.com>
wrote:
> Dear Caml list,
>
> I am pleased to announce an experimental branch of the O'Caml compiler:
> O'Caml extended with Generalized Algebraic Datatypes. You can find more
> information on this webpage:
>
> https://sites.google.com/site/ocamlgadt/
>
>
> And you can grab the latest release here:
>
> svn checkout https://yquem.inria.fr/caml/svn/ocaml/branches/gadts
>
>
>
> Any feedback would be very much appreciated.
>
> Sincerely,
>
> Jacques Le Normand
>
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
>
[-- Attachment #2: Type: text/html, Size: 6095 bytes --]
next prev parent reply other threads:[~2010-10-25 9:45 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-25 8:39 Jacques Le Normand
2010-10-25 9:44 ` bluestorm [this message]
2010-10-26 5:30 ` [Caml-list] " Jacques Le Normand
2010-10-27 21:07 ` Florian Hars
-- strict thread matches above, loose matches on Subject: below --
2010-10-29 14:32 Dario Teixeira
2010-10-29 15:03 ` Jacques Le Normand
2010-10-29 15:53 ` Jacques Le Normand
[not found] ` <129751088.61814.1288367649864.JavaMail.root@zmbs4.inria.fr>
2010-10-29 16:02 ` Xavier Leroy
2010-10-29 16:42 ` Dario Teixeira
2010-10-25 10:17 Dario Teixeira
2008-04-28 5:35 Generalized algebraic datatypes Jacques Le Normand
2008-04-28 6:50 ` [Caml-list] " Gabriel Kerneis
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=AANLkTimw39FAapf3Ptecs40vAvO2G+qbAtPMizy-VeWy@mail.gmail.com \
--to=bluestorm.dylc@gmail.com \
--cc=caml-list@yquem.inria.fr \
--cc=rathereasy@gmail.com \
/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