Kotlin has a complete and elegant type hierarchy – if that is the right word, since it is a directed acyclic graph rather than a tree – described with diagrams at http://www.natpryce.com/articles/000818.html and https://blog.kotlin-academy.com/the-beauty-of-kotlin-typing-system-7a2804fe6cf0
What I'm not clear about is how generics fit into all this.
How do generic types like List and Map, and specializations thereof like List<Int> and Map<String, Int> fit into the type hierarchy?