No more runtime errors:
Let's learn Elm
Who's this guy?
- Cameron Alexander
- Landordable.com
- github/twitter: @SoftwareWarlock



What is Elm?
Elm is a programming language that compiles to JavaScript
Elm is functional
Elm is reactive

Before reactive programming
After reactive programming

Elm is statically and strongly typed
Why Elm?
It's fast

It's reliable
It's got cool stuff
The Basics
var numbers = [1, 2, 3];
var first = numbers[0];
var doubleFirst = first * 2;numbers =
[ 1, 2, 3 ]
first =
List.head numbers
doubleFirst =
first * 2JavaScript
Elm
var numbers = [];
var first = numbers[0];
var doubleFirst = first * 2;
// doubleFirst = NaNnumbers =
[]
first =
List.head numbers
doubleFirst =
first * 2
-- doubleFirst = ???JavaScript
Elm
Buuuuut.....
Elm is different

What's a maybe?

numbers =
[]
first =
Maybe.withDefault 0 (List.head numbers)
doubleFirst =
first * 2Here's how you handle it
function add(x, y) {
return x + y;
}
function(x, y) {
return x -y;
}
var added = add(1, 3);add: Int -> Int -> Int
add x y =
x + y
\x y -> x - y
added =
add 1 2How about some functions
var object = {
key: 'value',
key2: 'value2'
};
object.key; //returns 'value'
object.key2 = 'new value';
var list = [1, 2, 3];
list[0]; // returns 1
list.length; // returns 3record =
{ key = "value"
, key2 = "value2"
}
record.key -- returns "value"
{ record | key2 = "new value" }
list = [1, 2, 3]
List.head list -- returns Just 1
List.length list -- returns 3Data structures?
powerLevel > 9000 ? 'WHOA!' : 'meh'if powerLevel > 9000 then
"WHOA!"
else
"meh"If statements
import Html exposing (text)
main =
text "Hello, World!"Hello, World!
case aList of
[] -> "matches the empty list"
[x]-> "matches a list of one item, " ++ toString x
_ -> "matches anything else"Pattern matching
case List.head someList of
Just x -> "The first element is " ++ toString x
Nothing -> "The list was empty."type Bool = True | False
value = False
case value of
True -> "Value is true"
False -> "Value is false"Union types
type Maybe a = Just a | Nothing
maybe =
Just 42
case maybe of
Just x -> "Our maybe had the value of " ++ x
Nothing -> "Our maybe was nothing"Advanced stuff
Signals
Like callbacks, but not
Tasks
Like promises, but not
Tasks
Task.map
(\s -> s + " tasks")
(Task.succeed "Hello")
Task.succeed 2
`andThen` (\n -> Task.succeed (n + 2))$q.resolve("Hello").then(function(string) {
return string + " promises";
});
$q.resolve(2).then(function(n) {
return $q.resolve(n + 2);
});The Elm Architecture
Like a framework, but not
Questions?
Elm talk
By Cameron Alexander
Elm talk
- 1,259