Previous Episode: 031: Elm Code Generation

Joël Quenneville (Twitter)Joël's blog post Elm's Universal Patternmap2Maybe.map2Metaphors

Some common metaphors for Elm's Universal Pattern (Applicative Pattern).

Mapping

Combining

Lifting

Wrapping and unwrapping boxes

Blog post on Two ways of looking at map functions

ExamplesRandom generatorsApply mapping functions to vanilla value functions to keep things cleanTips

Separate branching code from doing code (discussed in-depth in Joël's blog post Problem Solving with Maybe)

Stay at one level of abstraction

Json decoders as combining functions

Scott Wlaschin Railway Oriented Programming

Dillon's blog post Combinators - Inverting Top-Down Transforms

The JSON structure and Elm type don't have to mirror each other - start with your ideal type and work backwards

Applicative pattern

Applicative needs 1) way to construct, 2) map2 or andMap

Json.Decode.Pipeline.required function

Record constructorsPractice writing it with an anonymous function to convince yourself it's equivalentRecord constructors are just a plain old elm functionmap2 doesn't take a type, it takes a function -NoRedInk/elm-json-decode-pipeline is a useful reference for implementing this kind of api on your ownApplicative Laws in HaskellMonomorphic vs polymorphicParser Combinatorselm/parser episodeJoël's blog posts on the ThoughtBot blogJoël's Random generators talkJoël's Maybe talk

Some more blog posts by Joël that related to Elm's Universal Pattern:

Running out of mapsPipeline Decoders in Elm

Joël's journey to building a parser combinator:

Nested cases - https://ellie-app.com/b9nGmZVp9Vca1Extracted Result functions - https://ellie-app.com/b9qtqTf8zYda1Introducing a Parser alias and map2 - https://ellie-app.com/b9MwZ3y4t8ra1Re-implementing with elm/parser - https://ellie-app.com/b9NZhkTGdfya1Getting Unstuck with Elm JSON Decoders - because mapping is universal, you can solve equivalent problems with the same pattern (described in this post)

Twitter Mentions