Clean
（クリーン）は、プログラミング言語の一つで、純粋関数型言語である。 とよく似ている。
により、参照透過性を保ちつつ、ファイルの破壊的な更新などができる。これは、参照透過性を保つためには値を複製した上で結果として返す必要があるが、その後複製元を二度と使用しない（参照しない）ことが保証できるのであれば、わざわざ複製せずとも直接破壊的に値を更新しても構わない、という考え方に基づく。例えば、変数aに1を加算するには
のようにして、以降a2を使用する。もし今後もa = 1という前提で使用するならばこの方法しかないが、そうでなければaは無駄になる。しかし、プログラマはa = 1を二度と使用しないとわかっていても処理系にはわからない。それを処理系に知らせる手段が一意型（一意性型属性）である。処理系がa = 1という定義を二度と使用しないとわかりさえすればa2は不要となり、aを破壊的に更新していけばよい。無論a = 1であることを期待してaを使用すると期待通りに動かなくなるが、それは最初に処理系と交わした約束を破ったということにほかならず、コンパイラの型推論システムはaを一意型に型付けしない。つまり、aの管理はコンパイラの型推論システムが責任を持って行うことになる。