The many signs you're in Elm denial

In JavaScript land we are doing your best to make it easy on ourselves. We I use libraries, frameworks, build tools and even compilers to try to make JavaScript easier to use and more palatable. I don't blame you. For instance I couldn't imagine doing a UI of any size without React.

However, if you put fur all over your pig, trying to teach him to fetch and attaching a voice changer perhaps we just need to admit that we just want a dog. I think many of you are in this stage, where you're trying to fix JavaScript but you really want to just use Elm. Here are the signs;

You compile your JavaScript

This is the first sign. It's the sign that you aren't happy with the language. I'm not talking about bundling or minification but when you compile JavaScript just to add features or make it prettier. Babel is perhaps the most subtle because you can convince yourself that you're still using the same JavaScript, it's just from the future. However most if not all are using features that very well many may never get added to the language. If that's the case you'll be writing Babel, not JavaScript. That build step will never go away. People using CoffeeScript and Typescript, same goes for you. Even those just doing JSX.

The sad thing about all these transpilers and compilers is that they give you far less benefit than the Elm compiler. Most of them don't do Static Typing and the ones that do make them optional or make you write them everywhere.

I'm Elm every .elm file is fully statically typed. You literally don't have to write any type signatures yet the language will just figure it out by the context. Not to mention the compiler is super helpful and friendly. Last but not least it can gerentee there's no runtime exceptions. Not to mention it's faster than most JavaScript based compilers because it's multi threaded.

You use React

If you're using React you probably believe that pure functions rendering the view is a good idea.

Elm has what most would recognize as a react implementation that is actually faster in many cases due to prevasive immutability that makes the diffing easier. Elm has the added benefit that it's syntax is very minimal so instead of using JSX it has a simple DSL that's really just functions that take two lists. One for the attributes like href and one for the children. If you feel that one way data flow and reactive rendering is the right way than you might as well use a language that enforces it.

You use Redux

This is the easiest one. Redux is shamelessly inspired by Elm. It's the architecture every Elm program follows.

Elm has the added benefit of not letting people do dumb things like making an object oriented wrapper around their stores or secretly attaching state to the window. Not to mention accidentally mutating their objects and creating a hard debugging session for themselves.

You use Lodash, Randa or other functional programming libraries or practices

JavaScript is a functional language in many ways, however it's also a prototypal object oriented language too. Many people even write procedural style jQuery code. Some just want to use classes for everything and knock off the "script" part. Imagine the language had one paradigm? Elm is a pure functional language. That's it. It's far more cohesive and simple because of it.

You make things immutabile or at least would if it weren't so hard

Immutably is nice to make your code simpler because it means that functions can't modify your objects without you realizing after you pass them as arguments. Although there's libraries to add this to JS they are hard to use, and are generally going against most of the grain of the language. Elm is immutabile everywhere. You couldn't modify anything in place of you tried.

You add Static Typing and/or linting

The final sign. If you're addStatic Typingping in the form of: