Tue, 12 Mar 2002 15:52:29 -0700
Andre W B Furtado wrote:
> I found the following text when visiting the Clean (a functional language)
> "Clean is the only functional language in the world which has a special type
> system, uniqueness typing. It enables to update function arguments
> destructively retaining the purity of the language."
I believe Mercury borrowed their uniqueness type (mode) system from
Clean. But since Mercury is functional/logical then I guess its still
true that Clean is the only functional language with a uniqueness type
> Then I have some questions:
> 1. Can anyone explain what does "update function arguments destructively"
Uniquely typed values are guaranteed to be referenced at most once under
program evaluation, these values can be modified in-place. As an
example, suppose I have an array and I want to modify an element. In
general I need to create a whole new copy of the array in order to make
the modification since there may be other places in the program that
require access to the old array. However, if I know that the old array
has no other references (because the array has a unique type) then I do
not need to make a copy, I can just modify the original array. This has
obvious efficiency benefits.
> 2. If this is a desirable thing, why does Haskell not implement it?
- Uniqueness types, of course, require replacing the type system, this
is a non-trivial task,
- Destructive updates can already be accomplished with compiler
supported libraries using monads,
- Uniqueness types invalidate some program transformations.
On the other hand I think uniqueness types are quite useful.
Particularly as they allow much more flexible interaction between
mutable data-structures than monadic approaches. I don't know of any
concrete reasons a uniqueness type system couldn't be added to Haskell.
This seems like a fine time to insert a plug for my Master's thesis,
which describes a denotational semantics of uniqueness types: