032: Elm's Universal Pattern
Elm Radio
English - June 07, 2021 12:00 - 1 hour - 68.3 MBTechnology elm web-development functional-programming programming jamstack Homepage Download Google Podcasts Overcast Castro Pocket Casts RSS feed
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 cleanTipsSeparate 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 talkSome more blog posts by Joël that related to Elm's Universal Pattern:
Running out of mapsPipeline Decoders in ElmJoë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)