Play with Elm! - Lambda Days€¦ · Play with Elm! Rethink Web Development. About Me Choucri FAHED...

Preview:

Citation preview

Play with Elm!

Rethink Web Development

About Me

Choucri FAHED

CTO of Finstack

Scala, FP, Elm, Idris, Blockchains, AI, Universal Income… good food

Summary

● Why Elm?

● What’s Elm?

● TEA (The Elm Architecture)

● Elm vs ScalaJS

● Elm in Scala Projects

Why Elm?

Created by Evan Czaplicki in 2012

“If typed functional programming is so great, how come nobody uses it?” Let's be mainstream!

How it feels to learn JavaScript in 2016

Objective: NO RUNTIME ERRORS!

What’s Elm?

● Simple language○ Statically typed, strict, purely functional○ Compiles to JavaScript

● Simple framework / libraries○ TEA (The Elm Architecture)○ Use “Obvious names” No M-word

● Simple and user focused tools○ Friendly compiler error messages○ Time travel debugger, elm-format…○ Automatic semver enforcement with elm-package

Values - Literals

Values - Lists & Tuples

● Lists: All 4 are equivalent below

● Tuples

Since 0.18

Values - Union Types

Values - Records

Functions

What else?

● If and let expressions● No for or while loops● Operators● JavaScript interop with ports● Modules

For more Elm syntax

That’s it?!

● No type classes● No higher kinded types (ex: Functor[F[_]])

○ First order kinds like Monoids supported only

Feel frustrated? Try PureScript

TEA - The Elm Architecture

Simple and amazingly scalable pattern

(overly simplified view below)

Model or Staterecord type(managed)

View(managed by

elm-html)

elm-htmlruntime

view()function

Messagesunion type

update()function

*code you need to write in blue

TEA - Model

TEA - Update

TEA - View

TEA - Main

Since 0.18

Performance

Benchmark: Adding 100 items in the TodoMVC app

Ecosystem

● Write HTML with elm-html● Write CSS with elm-css● Material Design with elm-mdl● Make HTTP calls with elm-http● Unit testing with elm-test● …

Guess the pattern? More Awesome Elm

Learn More

● http://elm-lang.org/● Elm Slack● http://exercism.io/languages/elm● Elm Weekly Newsletter● On Twitter

○ @elmlang○ @czaplic○ @rtfeldman○ @elmcastio○ @elmstuff

Elm vs ScalaJS

ScalaJS Elm

Opinionated No Highly

JS Interoperability Easy Hard (discouraged)

SPA Framework scalajs-react, udash.io elm-html (TEA)

Runtime Size 100KB 10KB

Build Tool SBT elm-package

Semantic Versioning No Yes

IDE Support Excellent in Intellij Excellent in Atom

Debugger Standard IDE tools Time-travel debugger

Ecosystem Huge Small but growing fast

Elm in Scala Projects

SBT Elm plugin

Check out examples folder

Elm records generated from Scala case classes with scala-elm-types

Show time!

Recommended