What does it mean by
There are possibly 2 questions in this question. I'll answer them 1 by 1
Part 1: h-t-m-l message
After knowing the basic Elm syntax, we could be reading the following "return values" like this
userFromJWT : String -> Maybe User -- returns a User value or nothing
split : String -> List String -- returns a list of String
With the help from our prior programming experience, we treat the return values as
String and jumps directly to think in terms of "How do I use a
var u *User value?
u.name?" and "How do I use a
var s String?
We don't actually "see" the words
List; our attention was focused on
If we proceed with these instincts alone, we'll fumble when we see unfamiliar types. We'd ask the wrong questions
view : Model -> Html Msg -- returns an h-t-m-l message... but how do I return such a message?
userEmail : Json.Decode.Decoder String -- returns a json decode decoder string... but how do I return such a string?
There are no answers to the questions because there's a misunderstanding of the grammar. To avoid being misled by my prior programming experience, I do this one weird trick instead:
Just focus on the first word
Html Msg ^^^^ -- and read "Html" type Json.Decode.Decoder String ^^^^^^^^^^^^^^^^^^^ -- and read "Json.Decode.Decoder" type HelloWorld (Html msg) (Json.Decode.Decoder String) ^^^^^^^^^^ -- and read "HelloWorld" type
Then look at the documentation for that word; look for functions that returns that word
Here are some functions that I found with text search
-> Html on in the
Html docs page
text : String -> Html msg div : List (Attribute msg) -> List (Html msg) -> Html msg span : List (Attribute msg) -> List (Html msg) -> Html msg -- note: unfamiliar types like `Attribute` usually refers to a type defined in the same module, i.e. `Html.Attribute`. You may have to search around for it
And calling any of the these functions will be able to give us a value of
Html type, just provide the necessary input argument values.
Here are some functions that I found returning
Decoder in the docs page of
Json.Decode (there wasn't a page on
string : Decoder String int : Decoder Int list : Decoder a -> Decoder (List a) field : String -> Decoder a -> Decoder a oneOf : List (Decoder a) -> Decoder a
Same idea: calling any of the these functions will be able to give us a value of
Json.Decode.Decoder type, just provide the necessary input argument values.
Part 2 Ok, but what is this
In an Elm Browser program we are required to provide a
view function that returns
Html type. We can deduce Elm takes this return value and renders the corresponding DOM nodes in the browser.
view : model -> Html msg view model = Html.h1 [ Html.Attributes.class "greeting" ] [ Html.text "Hello" ]
Html module does not export the internal details of this type for us to look at (aka it's an opaque type). The module only exports a bunch of functions for us to call, to obtain various
Html values. And really that's all we can know about it.