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.

First of all the reason I like Elm is that it makes doing front end work not suck. When building apps in the browser JavaScript is mandatory, You can’t avoid it. So having something that compiles to JavaScript is amazing.

On the server I don’t need to run JavaScript, I can run pretty much anything I want. In my case it is Erlang. The BEAM (Erlang runtime) is about the best runtime out there. It can handle massive amounts of concurrency and is very stable. Others may prefer other platforms but the key is that JavaScript is not required on the server, so you can choose the platform that works best for you.

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.