An introduction to Elm

Some rules

  • This is not a class. Interrumpt me!
  • Do you have a question? Ask away!
  • I might be wrong. Correct me!

Disclaimer

  • I am no expert
  • I am backend developer
  • I actually do mostly PHP
  • You will see some serius bad jokes

Before we get started

Let's get rid of something

An Elm developer

is an Elmo

Something about me

What is Elm?

Funct lang
Compiled
For the Web

Why Elm?

Not Javascript
Fast
Good practices

What is Functional Programing?

Almost exclusive use of Pure Functions

What is a Pure Function?

  • Has no side effects
  • No state values
  • Has attributes
  • Return depends only on input

Why Pure Functions?

  • Reusable
  • Composable
  • Testable
  • Cacheable
  • Parallelizable
  • ...

Functional Programming

VS

Functional Programming Languages

Setting up the environment

npm install -g elm

alias elm='docker run -it --rm -v "$(pwd):/code" -w "/code" -e "HOME=/tmp" -u $UID:$GID -p 8000:8000 codesimple/elm:0.17'

What comes with Elm?

REPL

An interactive shell that lets you interact with values and functions directly.

Reactor

Dinamically compiles Elm files on demand and starts a server to test them on the browser.

Make

The Elm compiler.

 

Generates the HTML or JavaScript output.

Package

Package manager.

 

  • Downloads dependencies.
  • Publishes packages.
  • Updates dependencies.
  • Shows differences between versions

A bit more about packages

  • Only handles contributed packages
  • Enforces semantic versioning
  • Find them at http://package.elm-lang.org/

That's pretty cool but...

SHOW
ME THE
CODE!

Let's write some

FUNCTIONS!

Partial applications

Forward pipe operator

|>

Anonymous functions

Let ... In ...

Prefix functions
 VS
Infix functions

Function composition

Elm Static Types

  • Types are inferred
  • Friendly errors
  • No runtime exceptions

Totally not

JAVA

Elm Variable Types

What types do you know?

  • String
  • Char
  • Bool
  • Float
  • Int
  • Lists
  • Tuples
  • Objects?

Elm Records

Elm Records

Kind of a JS object

Some rules

  • Fields most exists
  • Cannot be null
  • Group of related fields
  • No self references

Accesing properties

Updating properties

Are we missing something?

Where is the

null?

null is null

I mean... There is no null

Null, I call it my billion-dollar mistake

Tony Hoare, inventor of null

Union types

A value that could be of multiple types

Union types

Pattern matching

Maybe and Result

Type aliases

Just do it!

The Elm Architecture

Like Redux but without JS

(Also called Flux)

That's all folks!

Questions?

Some resources

Some examples

Some spam

An introduction to Elm

By david_hernandez

An introduction to Elm

  • 2,053