That's why I like Limbo and later Go's implicit typing:
a := Foo():
a now has whatever type Foo() returns. If you change the definition of Foo then you don't have to cascade your type change through all of your source code.