Compiler Driven Development
Adam Recvlohe
May 4th, 2017
What is CDD?
- Write code
- Compile code
- Read error messages
- Fix code
- See your code work
WHAT IS ELM?
ELM IS A STATICALLY TYPED FUNCTIONAL LANGUAGE THAT COMPILES DOWN TO JAVASCRIPT AND RUNS IN THE BROWSER.
🤔
IT NOW INCLUDES LIBRARIES FOR HTML AND CSS, ALLOWING YOU TO WRITE YOU ENTIRE APPLICATION IN ELM.
STATICALLY TYPED
ELM MAKES TYPE INFERENCES ABOUT YOUR CODE
MEANING, IT KNOWS WHAT DATA TYPES YOU ARE USING AND IF YOU ARE USING THEM CORRECTLY
import Html exposing (Html, text)
main = "Hello, world"
FUNCTIONAL
ELM IS COMPOSED OF PURE FUNCTIONS
MEANING, ELM FUNCTIONS DO NOT CREATE ANY SIDE-EFFECTS.
import Html exposing (Html, text)
import String
allUpper: String -> String
allUpper s =
toUpper s
main: Html a
main =
text allUpper "Hello, world"
TYPE ALIASES
TYPES ALIASES GIVE STRUCTURE TO YOUR DATA TYPES
MEANING, TYPE ALIASES ALLOW YOU TO DEFINE THE SHAPE OF YOUR DATA.
import Html exposing (Html, text)
import String
type alias Model =
{ count: Int
}
allUpper: String -> String
allUpper s =
String.toUpper s
main: Html a
main =
text (allUpper "Hello, world")
NOW LET'S CREATE OUR MODEL
WHAT DO YOU THINK OUR MODEL WILL BE?
SPOILER ALERT...A FUNCTION!
import Html exposing (Html, text)
import String
type alias Model =
{ count: Int
}
model = Model 0
-- model = { count: 0 }
{- This is a Record type -}
allUpper: String -> String
allUpper s =
String.toUpper s
main: Html a
main =
text (allUpper "Hello, world")
ALL DATA TYPES ARE IMMUTABLE
RECORDS, LISTS, STRINGS, ETC.
MESSAGES
MEANING, WHEN YOU WANT TO CHANGE THE STATE OF THE MODEL, YOU WILL USE MESSAGES.
UNION TYPES
ALLOWS YOU TO DESCRIBE NEW TYPES, JUST AS IF YOU WANTED TO DESCRIBE A NEW DATA TYPE.
THINK SWITCH STATEMENT!
type Msg
= Increment
| Decrement
view: Model -> Html Msg
view model =
div [] [ div [] [text (toString model.count) ]
, button [ onClick Increment ] [ text "Increment" ]
, button [ onClick Decrement ] [ text "Decrement" ]
]
UPDATES
UPDATES ARE HANDLED BY THE UPDATE FUNCTION, THAT MAKES CHANGES TO THE MODEL BASED ON THE MESSAGE PASSED.
update: Msg -> Model -> Model
update msg model =
case msg of
Increment ->
({ model | model = model + 1 })
Decrement ->
({ model | model = model - 1 })
_ ->
model
WIRE UP
ELM COMES WITH HELPER PROGRAMS THAT WIRE UP THE FUNCTIONS SO THAT THE MODEL, MSGS, AND UPDATES ARE PASSED THROUGH
main: Program Never Model Msg
main = Html.beginnerProgram
{ model = model
, update = update
, view = view
}
QUESTIONS, COMMENTS, CONCERNS?
Learn You a Elm for Greater Good
By Adam Recvlohe
Learn You a Elm for Greater Good
- 704