The dictionary meaning of expressive that I think you are trying to convey is, ‘serving to express; indicative of power to express’. Thesaurus gives some suggested alternatives for this meaning: articulate; thoughtful; eloquent. I think expressiveness is a good word for what you are tyring to talk about, all it takes is to mention that you mean it in a different way to the formal meaning of it as understood within computer science.
In addition to my comments in the other thread, I find Elm to be powerful in how it scales, through its module system and package system with enforced semantic versioning. (The Standard ML Signature and Structures can be represented quite well in Elm in other ways). Tagged union types eloquently name choices in your programs. Evan has produced the most thoughtful language many of us have ever used.
An important skill to learn when structuring more complex pieces of software, is how to use higher order functions, to allow functionality from another module or author to be injected or composed. In functional languages, higher order functions = call backs in imperative languages. The classic example is map over a list, where you supply the function to be applied to each element, as a call back or function pointer. Below is an example set of types that I used to structure a content editor; different editors are implemented for read/preview/write modes of operation and these orthogonally combine with templates and layouts. A single codebase for client or server side rendering was built around this, using these higher order types to articulate its structure.
type alias LinkBuilder msg =
String -> Html.Attribute msg
type alias Template msg =
LinkBuilder msg -> Editor msg -> Zipper Content -> Html msg
type alias Layout msg =
Template msg -> Template msg
type alias Editor msg =
Zipper Content -> Html msg
view : Dict String (Layout msg) -> Dict String (Template msg) -> LinkBuilder msg -> Editor msg -> Model.Content -> Html msg
There are many ways you can express code ideas well in Elm, and on many different ‘scales’. I don’t see it as limits of the language itself but limits of the programmer - you can’t be as expressive as a beginner as you can when you get really into it and learn and learn, just as a novice could not sing the opera as expressively as the maestro. I think in the learning regard Standard ML and Haskell as taught at university level CS courses provides a solid foundation; perhaps Standard ML is better for Elm, as you don’t miss so many features from Haskell that way.