Elm is a pioneering language in many ways and, in the words of its creator, a collection of "the greatest hits" of the ML family of languages. As such, it remains a great language to learn in order to get familiar with functional programming, but also to see how programming could be different, more intentional about reliability and in many ways more straightforward.
My books

Elm can require quite a mindset shift, particularly for somebody who is new to functional programming and static types. I wrote this book to guide people beyond the basics and into the practical tasks of creating applications with Elm: building UIs, styling, working with JSON, interacting with JavaScript code, testing and so on.

I've always found CSS is unintuitive and sprawling. When I began using mdgriffith/elm-ui
, for the first time
I was able to create fairly complex UI layouts with hardly any need to refer to the docs. It was a real breath of fresh air.
elm-ui
provides a much more intuitive approach to building UIs compared to HTML and CSS. I wrote this guide and created
a showcase of common UI patterns built with elm-ui
to help other people get started with elm-ui
.
My projects
- json2elm
- Elm Catalog
- elm-ui Patterns
- Elmstatic
Posts
- Impressions of React and TypeScript from an Elixir/Elm developer
- An elm-review rule to generate JSON decoders and encoders from a JSON sample
- Parse URLs with elm/url
- Generating pipeline and applicative decoders with json2elm
- Generating elm/json decoders with elm/json decoders
- Elm Catalog update: 1000+ packages and search
- elm-ui: The CSS Escape Plan is in early access
- More examples added to elm-ui patterns
- Compile-time checks on values in a list with phantom types
- Announcing elm-ui Patterns: a collection of elm-ui examples
- Elmstatic 0.7.0: improved performance
- An introduction to elm-animator, and using it with elm-ui
- Simple performant CSS animations in Elm with Animate.css
- Generating sitemaps with Elm
- Elm Catalog now lists tools in addition to packages
- Page state in Elm
- Elm Package Catalog: Complete and improved
- Type-safe markup for your static site with Elmstatic and elm-markup
- Elmstatic: better performance and live reload with watch mode
- Get improved Debug.log output in the browser console
- An introduction to elm-markup by way of Elmstatic
- Elm community and project stats: 2019 update
- Elm Package Catalog: Explore Elm packages and find the package you need
- How I generate static HTML from Elm code in Elmstatic
- Elmstatic, my Elm-to-HTML static site generator, upgraded to Elm 0.19!
- Combining HTTP requests with Task in Elm
- Map, filter, fold
- How UICards work: UI within UI in Elm
- UICards: create UIs without the laborious reload-navigation-input test loop
- Practical Elm book: Elm 0.19 update published
- Build complex forms with validation in Elm
- Restarting the Elm Weekly newsletter
- Make sure your views are bug-free by testing them with elm-test
- elm-ui: Forget CSS and enjoy creating UIs in pure Elm
- The missing part of the Elm guide: URL handling with Browser.application
- Minimal static boilerplate for Ellie
- The basic steps to publish a package with Elm 0.19
- A straightforward introduction to custom elements
- How to generate JSON from Elm values using Json.Encode
- Introduction to the elm/parser package
- Practical Elm book release date & Elm 0.19 updates
- Elm 0.19: details of what's new, how to install/upgrade, reading list
- Learning Elm in 2018: Comprehensive List of Resources
- Some thoughts on splitting Elm code into multiple files
- How Json.Decode.Pipeline chaining works
- Practical Elm for a Busy Developer: early access
- Json.Decode tricks: decode 8+ fields and nested sub-objects
- Using modules in Elm
- Elmstatic 0.3.1: generate subsections, make index pages, add page aliases
- Introducing Elmstatic: an Elm-to-HTML static site generator
- Decoding recursive JSON in Elm
- Generating static HTML from Elm code with elm-static-html-lib
- Is Elm going stale? The numbers say no.
- How to extract values from union types in Elm
- How to read Elm types like "Html msg"
- Decoding JSON to nested record fields in Elm