6 timeless articles about learning Elm
Learning Elm? When I started learning it in 2016, Joël Quenneville’s technical writing was a huge resource—and it still is.
Joël’s clear, well-reasoned writing explains how to solve common issues and leverage Elm’s type system.
Here are 6 timeless articles from Elm’s “Coach Q”:
✅ Booleans and Enums
https://thoughtbot.com/blog/booleans-and-enums
If you come from languages that don’t have union types, it’s natural to reach for the familiar Bool
and String
types to model your data.
In Elm, we can do better! Joël uses concrete, clear examples to show us how.
⚙️ Maybe Mechanics
https://thoughtbot.com/blog/maybe-mechanics
Elm makes certain bugs impossible by making you declare a nullable value explicitly.
But knowing when and how to use the Maybe
type is its own skill. Joël explains clearly what to do in the most common situations.
⚖️ Problem Solving with Maybe
https://thoughtbot.com/blog/problem-solving-with-maybe
Maybe
is useful, but using it for each instance of a nullable value can overwhelm your codebase.
Joël shows how to make maintenance easier and how to model for more clarity.
😵💫 What’s Weird with Maybe List
https://thoughtbot.com/blog/whats-weird-with-maybe-list
Combining Maybe
with types that have their own null states can make your program states ambiguous.
Joël provides helpful alternatives and makes a case for when Maybe (List a)
is useful.
🎲 Rolling Random Romans
https://thoughtbot.com/blog/rolling-random-romans
Generating random values in Elm is a challenging beginner topic. How do you produce random values when all functions are pure?
Joël helps introduce the Generator
type and breaks the problem down into simple steps.
🪲 Debugging DOM event handlers in Elm
https://thoughtbot.com/blog/debugging-dom-event-handlers-in-elm
Elm’s helpful constraints make web development easier. But debugging the boundary between JavaScript and Elm (e.g. decoding JSON values) can be confusing.
Joël shares helpful tips for “seeing into” decoders.
This post was originally a Twitter thread as part of Ship 30 for 30.