I think you're confusing `assoc-in` with `assoc`. The latter is trivial to type; the former is not.
The problem with typing `assoc-in`, is that the type of the vector of keys is derived from the type of the nested map in a way that's hard to generalize.
For example:
(assoc-in m [a] b)
Has (approximately) the type signature: Map a b -> a -> b -> Map a b
But: (assoc-in m [a b] c)
Has the type signature: Map a (Map b c) -> (a, b) -> c -> Map a (Map b c)
And so forth."But this requires more code. More code is error-prone and takes time to write and maintain."
No it doesn't; you can generate and run the tests from the function's spec automatically. If I run `(clojure.spec.test.alpha/check)` in Clojure, it will generate and run tests for all functions that have specs.