they would definitely need to specify self:: a bunch. The fact that the right-hand side of use is resolved relative to the crate-root while the right-hand side of type is resolved relative to the current block is a significant difference between them, not something to be glossed over.
Consider for example the following:
fn main() {
// Below `use` does not work for this case;
// `self` in a path refers to a module,
// not to a function body's scope.
// use self::Foo;
#[deriving(Show)]
struct Foo;
type Bar = Foo;
fn bar(b: Bar) {
println!("Bar: {}", b);
}
bar(Foo);
}