I really like Elm. I find it very compelling for doing web front end work. I have to say I find the idea of using Elm much less compelling for doing server work.
The other difference is that the models of what one tries to accomplish are very different on the server vs the client. On the client you are generally only interested in one stream of events for one user. The web platform handles concurrency of different users by having each user have their own browser.
A server may have to handle a large number of users at one time. In 2016 it is not crazy to think about having a server handle 100,000 users on a machine with 24 cores or more. I want a platform and model that fully supports that.
For my money the best platform for that is Erlang (or Elixir). In Erlang you have a runtime that can handle millions of isolated independent processes running on a multi core system. The Erlang runtime was designed to build highly reliable systems (Telephone switches) and has been doing so for many years.
In recent years it has been made much more compelling by the addition of Elixir to the Erlang community. Erlang/Elixir has all of the tools to build the kinds of high end systems that I want to build and test them and run them at scale.
That being said if I wanted to have types I might consider using Haskell on the backend. For now I like using Erlang for servers. If you are not an old Erlang hand check out phoenix on Elixir as a web platform.
The one minus is that in general you can’t share any code between the
client and the server. There are some projects out there that will
take Haskell types and turn them into Elm Types, but last i checked it
did not support algebraic types. I would like to have a tool that
would take an Erlang/Elixir
-type and turn it into an Elm Type, If anyone
is looking for a cool project that would be a good place to start.