Date: Sun, 10 Oct 1999 16:14:23 +1000
From: skaller <email@example.com>
To: John Prevost <firstname.lastname@example.org>
Subject: Re: Proposal for study: Add a categorical Initial type to ocaml
John Prevost wrote:
> skaller <email@example.com> writes:
> > A better name than $ is probably 'none'.
> > Boxed values can use a null pointer for none.
> > Integers and floats can be treated as follows:
> > do not initialise them at all, if -unsafe is
> > specified. Otherwise, use the spare value of integers
> > and some NaN for floats, and insert tests
> > for all read accesses.
> I have a question--how is this different (except for the efficiency of
> using null) from using a 'a option array? The array still must be
> initialized--in this case to all null, or in the unsafe case, well,
> it's unsafe.
It isn't, in theory, it is exactly the same (and therefore sound).
The difference lies in the way it is represented: using the initial
the 'a option wrapping is done by the system, not the client programmer
(sort of like a Haskell monad) and therefore is more robust, more
efficient, and leaves the client code cleaner. This is much the
same argument as for exceptions.
> If anything, I would argue that this points at representing 'a option
> specially for already boxed values by using a null pointer for None,
> rather than having a special strange value that comes out of arrays
> and magically creates exceptions.
That would make 'a option faster to use, but still require
the overhead of writing code that needless does matches where
it is known (dynamically) that only one of the cases can be used (such
a variable length array).
> Again, rather than introduce new features into the language, add a new
> unsafe optimization and make the option type more efficient for boxed
The initial is not 'strange',
rather it is fundamental, the dual of the 'unit' type.
-- John Skaller, mailto:firstname.lastname@example.org 1/10 Toxteth Rd Glebe NSW 2037 Australia homepage: http://www.maxtal.com.au/~skaller downloads: http://www.triode.net.au/~skaller
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:26 MET