I still hope we can get away without having explicit subtypes, but one other example could be:
- As a function user, show me a list of Functions which take exactly a list of strings
- As a function user, show me a list of Functions which take exactly a list of anything
- As a function user, show me a list of Functions which take exactly a pair of string and boolean
- As a function user, show me a list of Functions which take exactly a pair of string and something else
- ...
So basically generic types where the argument might be not given (i.e. anything). Those are not defined as subtypes (i.e. we don't say "string16 is a subtype of string") but rather these are structurally necessary subtypes (list of string is a subtype of list of anything) - which makes the hierarchy static and predictable.