I've been programming Scala here and there and every so often get stuck in a "how the hell do I do this basic thing?" moment. So, I'm gradually working my way through "Programming in Scala", as I thought I should finally get more of an idea of this language works.
I definitely like the application of the "everything is a library" strategy for implementation of what would be core features in other languages. However, one example leaves me wary, "::". A List may be constructed (val l = a :: b :: Nil) and deconstructed ((a :: b :: Nil) = l) using the same syntax. However, this is only possible because "::" is both a method on List and a case class. Along with the right-associativity of any operator ending in ":" these conspire to give the illusion of the "::" operator that is seen in other languages, like ML.
This all seems a little too "just-so" for me. It's if they really wanted to use Lists like in ML and engineered the defaults (like right-associativity) to make it easy. This default doesn't really help make other, non-List operators, very obvious, like "/:" and ":" (for foldLeft and foldRight, if I remember correctly).
There is quite a lot of pragmatism in the Scala language and libraries, which I like. However, some of it seems a little too skewed towards particular features and may lack generality.