Skip to content

Do you consider learning Elm?

twitter logo ・1 min read  

Hi devs, want to ask you to take a moment and vote in the poll if you consider learning Elm. Is the Elm the thing still? I am also very interested in your opinion why yes, why not, so waiting for comments. Please click the link to the poll below:

twitter logo DISCUSS (34)
markdown guide

If not for use in production, I found it to be the most delightful foray into functional programming languages. I'm an object-oriented programmer by academia, and Elm has helped me learn more about functional programming languages.

If you're already familiar with pure functional languages like Haskell then that's going to help you understand Elm easier. Elm boasts a lot of neat features for a language geared towards developing SPAs, such as fast renders, small bundle sizes, and no runtime exceptions.


Didnt you find it limiting? Theres a lot of stuff other fp languages have and elm just cant do, its ok for just rendering but once you want to write code which is just a little bit more generalised you find out how many things elm lacks...


Elm was built with a specific goal in mind: provide a delightful experience to develop SPAs.

0.18 seemed limiting, but with 0.19 I feel like they really tried to create a more flexible and fully-baked architecture.

Agree that Elm is delightful language, but isn't 19 more restrictive then 18?

Can you provide an example of what you mean? Do you mean compiler/build-wise or from an architecture/conventions perspective?

Language perspective. Just looked at realese notes from 19 and there is no language changes, 18 was removing the syntax, so my mistake. But still if 19 did not extend the language then what did you mean by fact that you were limited by 18 but not by 19.

Elm's architecture in 0.19 for making SPAs significantly improved. They improved the developer's abilities to make a SPA that worked a little more seamlessly.

The only real downside to 0.19 was the fact that every owner of every Elm package had to recompile against 0.19 for it to be compatible with the latest version. I remember for a lot of people who wanted to use 0.19, they had to wait until their favorite libraries could be 0.19 compatible.

No, not exactly I was right, Elm 19 removed possibility for own operators and using binary functions as infix. Just found it out that release notes did not say anything about that. There was major community argument about these. I also see that move as at least problematic.


A limitation can sometimes be very productive.
ok, e.g. elm does not support type classes. But I can almost always understand the elm code of others very quickly compared to Haskell or Purescript code. These languages offer so many possibilities that most people can't know everything. Therefore you have to understand the concepts behind functional programming more (e.g. monads, functors, applicatives...), additionally operators overloading is often used.

As another good example for limitation I see e.g. in the programming language world is Go(lang). But you just have to see what cool stuff is built with it.
I think, simple is often better....

I share your opinion. Thanks for that!

Monads and stuff might be scary at first but once you learn about them they help you write more expressive code (dont tell me a bunch of binds are cleaner than do-notation)

The thing is that it is. Do notation looks like imperative code and when you don't get what is happening behind the curtain it looks familiar and you think you see what is that. When you understand Haskell concepts and Monad Typeclasses, do notation is crazy confusing to catch.

It's like somebody wanted to emulate imperative code in pure language.

Of course after a while this feeling go away. but I don't see do notation as must have.

Whoa whoa whoa, since when does do-notation look like imperative code, it's just syntactic sugar for working with monads

I also brought up computational expression, take async/await, a lot of languages have it now (c#, js, rust, py etc) but it came from the async workflow f# had to offer

It looks like it or at least simulates motion of simple effectfull step by step instructions. In the same way async/await looks like synchronous code. There is a reason for both - it's just more handy and readable. It's syntactic sugar exactly that is why it's not just have.

Do-notation isnt effectful code only, it can work with any monad, the same way you can call .bind on an Io/Eff by hand

I didn't say it is related only to IO. But for such it looks like one. I am not against do notation I am also not stating it's wrong, I am just saying it's not must to have and being only suger can be added to Elm in any moment.

How can sintactic sugar for monads be addable to elm when elm doesnt even support typeclasses?

That would be a problem. But we could be having some do notation for specific Monads, like async await is for continuations.

But then we would need something like computstional expressions to use user defined notations


I consider Elm to be one of the most interesting languages out there.
The way it leverages purity to ensure no runtime exceptions (also eliminating most bugs) and no risk 3rd party libraries greatly influenced my way of thinking about functional programming; from a bit of a gimmick to something with potentially serious business value.

In practice, it's competing with Haskell for my favourite language. Haskell has better polymorphism but Elm is way cleaner and even safer.


Hi, thanks for your reply. Can you elaborate about how Elm is safer from Haskell?

  • Elm's functions are nearly total (you still get the halting problem). Haskell's are not.
  • Elm doesn't allow you or 3rd parties to sneak in side-effects somewhere.
  • Elm doesn't allow unsafe casting.
  • TEA is more limited than IO monads.

Haven't looked into Elm for a bit, but when I first checked it out it seemed a little framework-y and limiting when compared to PureScript. It seems like Elm might be more focused on ease of use rather than depth of functionality. When looking into FP Elm might be a good starting point with a later transition into PureScript if needed. Either way there's a lot of interesting concepts worth learning!


I learned it, wouldn't use it, everythin it does it does well, but it doesn't do much. There's a lot of stuff it's missing which makes writing generalised code impossible...


Hi Matei, thanks for the comment.
What exactly is missing in the language and you are pointing here? Do you mean expressiveness tools like typeclasses, or smth different?


Typeclasses, do-notation (pr computstional expressions), HKTS, row polymorphism, curried types(actuslly idk if elm has this, if it does then my bad)

Also operator overloading, or at least some operators for binding, mapping, applying etc


I'd like the language design, very clean and simple, and great for beginners in functional programming. What I hate since v.19.0 that I can't write my own Javascript FFI code. I know ports, but that's more of a crutch. I understand the intention behind it, to keep the standard library clean and to prevent runtime errors, but I have the feeling that it limits me as a programmer. Therefore I don't really use elm at the moment :(

Purescript is an interesting alternative, but very hard to learn, compared to elm. Also does not come close to the programming error help/assistance of elm.
F# is nice too (fable), but the community is very small and very windows and microsoft centered.


I did some f# on linux and had no problems with it!

If you want to learn ps and you are familiar with fp concepts just read the language reference!


I like it, had tried and would use if I could prioritize 😔


I see is nice, and does really nice job on whats designed to.

But I need to have the option to use OOP, so a functional-only lang wont do it for me.


Once you get the hang of functional languages you barely miss the objects.

I came from a strong OO background myself, so it was very strange at first, but it wasn't too bad after a while.


I know whats Functional, I wanted lang that can do both, Functional OOP hybrid.

You can make any OO language functional if you make all your methods static 🤣


Hi Juan, thanks for response. What is a reason that you need to use OOP?

Classic DEV Post from Sep 23 '19

Pay your rent from open source 💸

hello world! 👋 This is my first #discuss thread and I want it to be on something relevant...

Maciej Sikora profile image
I am Software Developer, currently interested in static type languages (TypeScript, Elm, Reason) mostly in the frontend land

Hey there reader...

Do you prefer sans serif over serif?

You can change your font preferences in the "misc" section of your settings. ❤️