@friend Ooh, that's a brilliant example! More fine grained types definitely allows you to offer a smaller, more relevant set of possibilities in completion.
Are there examples of IDE services deliberately leveraging elaborate type systems?
I'm struggling to think of what a richer type system enables in the IDE space. The existence of void* in C, interface{} in Go, or a lack of generics, doesn't seem to have limited possibilities.
https://www.msreverseengineering.com/blog/2018/2/26/concrete-and-abstract-interpretation-explained-through-chess uses chess to describe concrete and abstract interpretation: considering state spaces, approximating, and dealing with intractably large sets of possibilities!