>>6
By the way, the functional languages Clean and Mercury actually do use uniqueness typing for their IO. Haskellers, on the other hand, thought monads arere cleaner (as they eliminate the need to explicitly thread state through a sequence of actions).