[clean-list] uniqueness question

John van Groningen johnvg at cs.ru.nl
Mon Nov 16 16:57:02 MET 2009


Carlos Aya wrote:
>Does anyone know why the following type signature is invalid?
>
>second :: *a .a -> *a
>second x y = x
>
>I am getting this message
>Error [matrices.icl,12,second]: a inconsistently attributed (4)

The same uniqueness attribute must be used for all occurrences of
a type variable in a function type.

>I came across this trying to type a more complex function with 
>arrays, but it boils down to signature above.
>
>Why the uniqueness attribute has to be the same for two independent 
>parameters that just happen to have the same type?

A type '*a' cannot be coerced to 'a', because 'a' could be a partial
application with a unique argument. It this were allowed the unique
argument could be used more than once. Because the opposite coercion
(from 'a' to '*a') is also not possible, the compiler requires that
all occurences of a type variable have the same uniqueness attribute
(as mentioned above).

This is explained in section "Higher-Order Uniqueness Types" (page 18) of:

Barendsen, Erik and Smetsers, Sjaak.  Uniqueness  typing for 
functional languages  with graph rewriting semantics, In Mathematical 
Structures in Computer Science 6, pp. 579-612. (abstract,  pdf 
version)

http://www.st.cs.ru.nl/papers/1996/bare96-uniclosed.pdf

Kind regards,

John van Groningen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/clean-list/attachments/20091116/d5e626ed/attachment.html>


More information about the clean-list mailing list