In general I’d say that UML is focused on object oriented designs and not
really suitable for a functional-object oriented hybrid like Scala. It
doesn’t cover important concepts and parts of the language are just not
adressed in a suitable way (i.e. Traits). Thus most Scala developers might
use UML (if at all) to illustrate aspects of their static design, i.e. the
domain model or an ADT, or perhaps a high level view on some
functionalities (i.e. a state machine).
But to be honest, you don’t see UML diagrams any more in most projects.
Of course it’s just episodic, but my experience is that people use whatever is appropriate to express what they want to show. From Visio diagrams to mockups, from handwritten block diagrams to UML. With today’s IDEs you just don’t need to draw diagrams of your application, but a high level diagram illustrating the overall system, its building blocks, and perhaps some class diagrams to get an idea of the current domain are helpful. Use whatever you like and don’t get constrained by UMLs own laws.
What I didn’t see in any project since ages is a strict application of UML (read as: as a language) that would be used to describe the software design upfront. I hope that this idea died altogether with the n-th iteration of the let’s-generate-our-code-from-UML-diagrams approach.
As others have mentioned before UML is unsuitable to express a functional design in an efficient way. It’s targeted on object oriented designs where the pieces can (in most cases) be directly associated with a container, i.e. a class and it lacks an appropriate representation of functional ‘design patterns’. Archetypes can’t really replace that.
Let me add: UML is discussed so much and used so little that we have scientific surveys showing how little UML is used. I’m sure they are not perfect, but no worse than other user studies in software engineering. One link: