sealed class Kind { class First() : Kind() class Second() : Kind() } fun foo() { val kinds = listOf(First(), Second(), First()) bar(kinds.filter { it is First }) //this fails because resulting type is List } fun bar(firsts: List) {}