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
  • 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
// There is an state.
var counter = 1;

function addCounterAndIncreaseIt(num) {
    // Output does not depend only on input.
    num += counter;

    // Has a side effect.
    counter++;

    return num;
}

var a = addCounterAndIncreaseIt(1);

// a is 2.
// counter is 2.

var b = addCounterAndIncreaseIt(1);

// b is 3.
// counter is 3.
function add(a, b) {
    return a + b;
}

var a = add(1, 2);
var b = add(1, 2);

// a is 3.
// b is 3.

Setting up the environment

npm install -g elm

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!

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

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

Type aliases

The Elm Architecture

Like Redux but without JS

(Also called Flux)

Just do it!

That's all folks!

Questions?

Some resources

Some examples

Some spam

About the session