дааа, очень хаскел ориентированная статья :) Kotlin doesn’t distinguish between pure and impure function - ага, а ещё нет разницы между mutable и immutable объектами, поэтому многие функторы приходится писать, исходя из того, что все объекты mutable, что приводит к бесконечному копированию. это вот прям засада kotlin JDK. Ну и иерархия. Если делать MutableMap<K, V> : Map<K, V>, то когда работаешь с Map<K, V> непонятно, не может ли она вдруг оказаться Mutable, а для многих вещей это важно. Можно явно проверять интерфейс MutableMap, но это ничего в общем-то не гарантирует, так как можно ведь сделать мапу, которая будет мутабельна, но имплементить будет только Map