Concurrent Clean : 一意型

まず、一意型の書き方はこんな感じ。

f :: *a -> *a

一意型でも、非一意型でもよい場合は、こんな感じ。

f :: u:a -> v:a

これは、このように書いてもよい。

f :: .a -> .a

片方が一意型なら、もう片方も一意型である必要がある場合は、こう。

f :: u:a -> u:a

入力が一意型なら、出力も一意型である必要があるが、入力が非一意型なら、出力はどちらでもよいという場合は、こう。

f :: u:a -> v:a, [v<=u]