But why not use a single character? With the double colon, something like foo::bar(xyz) looks like bar is “closer” to xyz, when in fact it's closer to foo.
let x: int = 0;
It's so that the compiler can distinguish between those two, and likely some other areas too.