55
votes

Coming from react, I am learning to understand Elm.

In the Todomvc example code, there is the following code snippet:

-- How we update our Model on a given Msg?
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
  case msg of
    NoOp ->
      model ! []        <-- What is this?

What I (think I) understand, is that the update function takes in a msg of type Msg and a model of type Model, and returns a tuple of containing a Model and a Cmd Msg.

But how should I read the return statement?

model ! []

What does this statement mean? return a "model [something] empty list"?
Did I miss something in the docs where this is explained? (Googling "elm !" did not get me far :)

2

2 Answers

66
votes

Update for Elm 0.19

Elm 0.19 has removed the exclamation point operator. You must now construct the tuple manually, as in (model, Cmd.none).

Original Answer for Elm 0.18

The exclamation point in model ! [] is just a short-hand function for (model, Cmd.batch []), which is the type returned from typical update statements. It is defined here

7
votes

Note that this syntax is going away in the next version of Elm (0.19) so don't get into the habit of using it ;-)

You can use today, and with 0.19:

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
  case msg of
    NoOp ->
      (model, Cmd.none)