caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Andreas Rossberg <rossberg@ps.uni-sb.de>
To: caml-list@inria.fr
Cc: Marco Maggesi <maggesi@math.unifi.it>
Subject: Re: [Caml-list] mutable lists
Date: Fri, 14 Sep 2001 14:48:36 +0200	[thread overview]
Message-ID: <3BA1FCA4.9B1CA56@ps.uni-sb.de> (raw)
In-Reply-To: <87heu67ysf.fsf@sisiphos.math.unifi.it>

Marco Maggesi wrote:
> 
> I noticed that OCaml do not have a library for mutable lists as, say,
> Lisp or Scheme where most procedure that operate on lists have both
> "functional" and "destructive" variants (like `append' and `append!').
> Is there any special theoretical reason for that?

Mainly that functional lists are considered nicer and much easier to use
(and thus more likely to be used right). Moreover, like all functional
data structures, they are persistent, ie. you can have multiple versions
of the same list or sublist simultanously.

> One more question about phantom types that are discussed in a parallel
> thread in these days.  Is it possible to use phantom types to prevent
> destructive operation on some lists?

Yes. For example, Matthias Blume's ML encoding of the C type system I
already mentioned in another post encodes C's constness annotations. The
basic idea is to have phantom types

	type ro (* read-only *)
	type rw (* read/write *)

and make your (mutable) list type polymorphic over them:

	type ('a,'r) list

Then you can specify operations in the signature as follows:

	val nil :      ('a,'r) list
	val cons :     'a -> ('a,'r) list  -> ('a,'r) list
	val length :   ('a,'r) list -> int
	val set_tail : ('a,rw) list -> ('a,rw) list -> unit
	val hash :     ('a,ro) list -> int

This prohibits destructively modifying the tail of a read-only list from
the outside as well as using a mutable list for hashing, while length
applies to any sort of list.

	- Andreas

-- 
Andreas Rossberg, rossberg@ps.uni-sb.de

"Computer games don't affect kids; I mean if Pac Man affected us
 as kids, we would all be running around in darkened rooms, munching
 magic pills, and listening to repetitive electronic music."
 - Kristian Wilson, Nintendo Inc.
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


      reply	other threads:[~2001-09-14 12:49 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-09-14 12:16 Marco Maggesi
2001-09-14 12:48 ` Andreas Rossberg [this message]

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=3BA1FCA4.9B1CA56@ps.uni-sb.de \
    --to=rossberg@ps.uni-sb.de \
    --cc=caml-list@inria.fr \
    --cc=maggesi@math.unifi.it \
    /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).