caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Christophe Raffalli <Christophe.Raffalli@univ-savoie.fr>
To: Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
Cc: Xavier.leroy@inria.fr, caml-list@inria.fr
Subject: Semantic of label: The best (only ?) solution to merge both mode
Date: Wed, 29 Mar 2000 10:42:45 +0200	[thread overview]
Message-ID: <38E1C205.813AD040@univ-savoie.fr> (raw)
In-Reply-To: <20000319112913P.garrigue@kurims.kyoto-u.ac.jp>


I posted a first solution to merge modern and classic mode. It was a bit
wrong. But there is indeed a reasonnable solution:

The trick is not to consider the absence of label as a specific label
like the actual modern mode does.

Then we can have:
- possibility to write or not label when applying a function
- possibility to permutte arguments if labels are written
- optional arguments

---

BUT we need a restriction over admissible types. One can choose between
two restrictions:

- Strong restriction: all the arguments have a label in types. Only
arrows of the form l:t -> t' are allowed.

- Weak restriction: all the arguments without labels in types comes
after arguments with labels. If a function returns a polymorphic results
(type 'a) all arguments have labels. (So function like List.assoc or
List.fold_left still must have a label for all the arguments).

These restrictions are stable by substitution so they are meaningful and
implementable.

These restrictions are reasonable because they only force you to add
labels when defining functions. Not when applying them ! It does not
cost much to add labels when defining functions especially if you do not
have to write labels when you apply arguments to the function. 

Then you can implement the following rule for applying a function to an
argument:

f (a:l) means a is the argument corresponding to the first occurence of
the 
        label l in the type of f (optional or not) (permuttation are 
        possible)

f a     means a is the argument corresponding to the first non
optionnal    
        argument of f

This is quite simple to explain and use and
modifying the actual code to get this is trivial (I can post it if you
want, but it does bootstrap because I did not modify the library which
does not respect any of the restrictions).

I see only two problems:
	
- One must make existing library compatible with one of the restriction:
I think the restriction is not too strong because we have not to always
write labels when applying functions.

- If you do not write labels you can not capture at compile time bugs
caused by incorrect permuttation of arguments. But the user is free to
write the label !

What do you think about this ?

-- 
Christophe Raffalli
Université de Savoie
Batiment Le Chablais, bureau 21
73376 Le Bourget-du-Lac Cedex

tél: (33) 4 79 75 81 03
fax: (33) 4 79 75 87 42
mail: Christophe.Raffalli@univ-savoie.fr
www: http://www.lama.univ-savoie.fr/~RAFFALLI



  parent reply	other threads:[~2000-03-29 17:22 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-03-14 16:53 Syntax for label Don Syme
2000-03-14 18:05 ` Pierre Weis
2000-03-15  3:15 ` Syntax for label, NEW PROPOSAL Jacques Garrigue
2000-03-15  6:58   ` Christophe Raffalli
2000-03-15 21:54     ` Julian Assange
2000-03-15 11:56   ` Wolfram Kahl
2000-03-15 13:58   ` Pierre Weis
2000-03-15 15:26     ` Sven LUTHER
2000-03-17  7:44       ` Pierre Weis
2000-03-15 17:04     ` John Prevost
2000-03-17 10:11       ` Jacques Garrigue
2000-03-15 17:06     ` Markus Mottl
2000-03-15 19:11     ` Remi VANICAT
2000-03-17  8:30       ` Pierre Weis
2000-03-17 14:05         ` Jacques Garrigue
2000-03-17 16:08           ` Pierre Weis
2000-03-18 10:32           ` Syntax for label, NEW SOLUTION Christophe Raffalli
2000-03-19  2:29             ` Jacques Garrigue
2000-03-20 18:25               ` Christophe Raffalli
2000-03-22  8:37                 ` Claudio Sacerdoti Coen
2000-03-21 23:29               ` John Max Skaller
2000-03-29  8:42               ` Christophe Raffalli [this message]
2000-03-29  9:53                 ` Semantic of label: The best (only ?) solution to merge both mode Christophe Raffalli
2000-03-30  9:49                   ` John Max Skaller
2000-03-30  9:39                 ` John Max Skaller
2000-03-31  4:34                   ` Jacques Garrigue
2000-04-01  1:53                     ` John Max Skaller
2000-04-02 19:24                     ` Christophe Raffalli
2000-04-04  5:50                       ` Jacques Garrigue
2000-04-03  7:57                     ` backward compatibility Christophe Raffalli
2000-03-15 21:30     ` Syntax for label, NEW PROPOSAL John Max Skaller
2000-03-16  2:55     ` Jacques Garrigue
2000-03-17 15:13       ` Pierre Weis
2000-03-17 17:33         ` Wolfram Kahl
2000-03-18 11:59         ` Jacques Garrigue
2000-03-21 16:51       ` Pascal Brisset
2000-03-23 11:14         ` Nicolas barnier
2000-03-24  9:54           ` labels & ocaml 3 & co David Mentré
2000-03-24 12:19             ` David Mentré
2000-03-21 22:22       ` Unsigned integers? John Max Skaller
2000-03-22 16:22         ` Sven LUTHER
2000-03-23  2:08           ` Max Skaller
2000-03-23  7:50             ` Sven LUTHER
2000-03-24  2:50             ` Jacques Garrigue
2000-03-24 15:59               ` Xavier Leroy
2000-03-25  4:03               ` John Max Skaller
2000-03-24 14:50             ` Xavier Leroy
2000-03-22 17:05         ` Jean-Christophe Filliatre
2000-03-22 19:10           ` Markus Mottl
2000-03-23  2:41           ` Max Skaller
2000-03-22 19:47         ` Xavier Leroy
2000-03-23 12:55           ` John Max Skaller
2000-03-16  8:50     ` Syntax for label, NEW PROPOSAL Pascal Brisset
2000-03-17 11:15       ` Sven LUTHER
2000-03-18  0:04     ` Syntax for label, ANOTHER " Steven Thomson
2000-03-15 20:39   ` Syntax for label (and more) Xavier Leroy
2000-03-17 10:03     ` Christian RINDERKNECHT
2000-03-17 17:19       ` Christophe Raffalli
2000-03-21  1:29     ` Markus Mottl

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=38E1C205.813AD040@univ-savoie.fr \
    --to=christophe.raffalli@univ-savoie.fr \
    --cc=Xavier.leroy@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=garrigue@kurims.kyoto-u.ac.jp \
    /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).