This isn't too hard in some languages and I prefer it, but there are other languages (like C#) where class names are long and descriptive (e.g. ImmutableSortedDictionary) and it becomes harder to read instead of easier.
I often have something like this among the top level `using` statements.
using FooMemo = System.Collections.Immutable.ImmutableSortedDictionary<string, Foo>;var localcache = cachemaster.cacheFor(foo);
Now you have no idea what it is until you dig into the (hopefully correct) API docs, or use an IDE that can untangle things.
(I'll agree it can be a bit tricky with LINQ and anonymous types in C#, but I think `var` usage is worth that trade-off)