From: Lukasz Stafiniak <lukstafi@gmail.com>
To: Jacques Le Normand <rathereasy@gmail.com>
Cc: caml-list caml-list <caml-list@yquem.inria.fr>
Subject: Re: [Caml-list] GADT constructor syntax
Date: Sun, 5 Dec 2010 09:10:01 +0100 [thread overview]
Message-ID: <AANLkTinVSDB-XWXKvJPxDzhzxox-Vmxnw9Lw2ucLy0De@mail.gmail.com> (raw)
In-Reply-To: <AANLkTi=tXmna=Rk5nyQbYWNambBYUUk1=nRS=aGC0cfV@mail.gmail.com>
On Sat, Dec 4, 2010 at 10:06 PM, Jacques Le Normand
<rathereasy@gmail.com> wrote:
> in this case, yes, but if you have constraints then it is different. consider:
>
> type 'a term =
> | Ignore of 'a : int term
> | Embed of 'a
> constraint 'a = int
>
> this is different from:
>
> type 'a term =
> | Ignore of 'a : int term
> | Embed of 'a : 'a term
> constraint 'a = int
>
> (in fact, an error is flagged on the second one)
>
> Also, it can save the user some typing.
I don't think that it is very different. Standard-language constraints
are outside of implications, so they apply to each branch. It already
behaves this way in the standard language, basically restricting the
type family to "int term". So I don't see why
> | Embed of 'a : 'a term
> constraint 'a = int
shouldn't mean that Embed is "basically" Embed of int : int term. My
position is that if a type variable should be treated as local to a
branch, it should be explicitly quantified (using the dot notation,
for example "Ignore of 'a. 'a : int term", without any exceptions to
"existential" variables). And that the patterns
type X =
| Branch of Y
and
type X =
| Branch of Y : X
should be equivalent (where X could for example be 'a term).
I would accept concessions to my general outlook on the grounds of
being conservative over standard OCaml programmer intuitions and
conciseness of code... when they apply...
next prev parent reply other threads:[~2010-12-05 8:10 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-04 19:25 Jacques Le Normand
2010-12-04 19:36 ` [Caml-list] " gasche
2010-12-04 19:39 ` Basile Starynkevitch
2010-12-04 19:41 ` Lukasz Stafiniak
2010-12-04 20:14 ` Jacques Le Normand
2010-12-04 20:22 ` Lukasz Stafiniak
2010-12-04 20:54 ` Jacques Le Normand
2010-12-04 21:00 ` Lukasz Stafiniak
2010-12-04 21:06 ` Jacques Le Normand
2010-12-05 8:10 ` Lukasz Stafiniak [this message]
2010-12-05 8:16 ` Lukasz Stafiniak
2010-12-05 8:25 ` Lukasz Stafiniak
2010-12-05 8:35 ` bluestorm
2010-12-06 0:21 ` Jacques Garrigue
[not found] <1245532236.1431213.1291490707868.JavaMail.root@zmbs3.inria.fr>
2010-12-06 9:11 ` Daniel de Rauglaudre
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=AANLkTinVSDB-XWXKvJPxDzhzxox-Vmxnw9Lw2ucLy0De@mail.gmail.com \
--to=lukstafi@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