From: Pierre Weis <Pierre.Weis@inria.fr>
To: Jerome.Vouillon@inria.fr (Jerome Vouillon)
Cc: caml-list@inria.fr
Subject: Re: Array interface question
Date: Sun, 24 Jan 1999 22:36:45 +0100 (MET) [thread overview]
Message-ID: <199901242136.WAA13264@pauillac.inria.fr> (raw)
In-Reply-To: <19990124164403.11999@pauillac.inria.fr> from "Jerome Vouillon" at Jan 24, 99 04:44:03 pm
> > Perhaps the solution is to have an improved implementation of the 'a
> > option type, where a NULL pointer would mean "None" and anything else
> > would be the element of type 'a.
> >
> > Is there anything wrong with this approach? [except that it could break
> > some interfaced C code that relies on NULL pointers in "private" types..]
>
> The problem is that you need to be able to differentiate None from
> Some None, Some (Some None), ...
>
> -- Jerome
Exactly, even if nobody thinks to write this kind of strange
expressions, the option datatype is powerful enough to represent
arithmetic.
On the other hand, the problem of NULL pointers is easy to solve: we
just need a unique object to represent None, and this object has not
to be NULL, and in fact it cannot be 0, if we want to differentiate
None and Some 0 (Some being supposedly omitted). (An Atom in terms
of the Caml memory manager would perfect for this purpose).
The Some (Some ...) problem could be solve if option where not only a
datatype but ... an option of record field names (or even constructor
names), analoguous to the mutable annotation for record fields. You
could write
type person = { option name : string; option age : int};;
This way the None values can be introduced by the compiler when
building a value of type person, for each optional field with no
associated value. The Some constructors would be ommitted from the
representation as desired. At pattern matching you may write None as a
valid pattern for an optional field, and write the normal expected
pattern otherwise (no need to write a Some constructor). In addition,
you could set once an optional field with some value, the compiler
checking that this field is indeed None before setting the new value.
This is absolutely similar to the mutable annotation that was
introduced to avoid the systematic insertion of reference cells in
records, hence leading to mutable values without extra indirections
(and more intuitive typings in my mind). The introduction of the
notion of ``option'' at the langage level would lead to the same
advantages: more compact representation of values, more natural
handling of the notion, especially for construction of values, pattern
matching, and typing.
Pierre Weis
INRIA, Projet Cristal, Pierre.Weis@inria.fr, http://cristal.inria.fr/~weis/
next prev parent reply other threads:[~1999-01-24 21:40 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-01-22 19:10 Brian Rogoff
1999-01-22 19:21 ` Pierre Weis
1999-01-22 20:05 ` Brian Rogoff
1999-01-23 10:47 ` Anton Moscal
1999-01-23 10:57 ` David Monniaux
1999-01-24 15:44 ` Jerome Vouillon
1999-01-24 21:36 ` Pierre Weis [this message]
1999-01-28 19:57 ` Brian Rogoff
1999-01-23 14:00 ` Size of arrays Juan Jose Garcia Ripoll
1999-01-24 22:31 ` Pierre Weis
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=199901242136.WAA13264@pauillac.inria.fr \
--to=pierre.weis@inria.fr \
--cc=Jerome.Vouillon@inria.fr \
--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;
as well as URLs for NNTP newsgroup(s).