Have you actually used Clean in production code? Can you share some of the tradeoffs of that approach?
Looking at Clean's documentation it certainly seems nice, but I know of no other language that had adopted Uniqueness typing.
[Clojure's Transients (http://clojure.org/transients) perhaps?]