This page covers Elm 0.18
Navigation
Next let's add buttons to navigate between views.
EditPlayer message
Change src/Players/Messages.elm to include two new actions:
...
type Msg
    = OnFetchAll (Result Http.Error (List Player))
    | ShowPlayers
    | ShowPlayer PlayerId
We added ShowPlayers and ShowPlayer.
Players List
The players' list needs to show a button for each player to trigger the ShowPlayer message.
In src/Players/List.elm. First add Html.Events:
import Html.Events exposing (onClick)
Add a new function for this button at the end:
editBtn : Player -> Html Msg
editBtn player =
    button
        [ class "btn regular"
        , onClick (ShowPlayer player.id)
        ]
        [ i [ class "fa fa-pencil mr1" ] [], text "Edit" ]
Here we trigger ShowPlayer with the id of the player that we want to edit.
And change playerRow to include this button:
playerRow : Player -> Html Msg
playerRow player =
    tr []
        [ td [] [ text (toString player.id) ]
        , td [] [ text player.name ]
        , td [] [ text (toString player.level) ]
        , td []
            [ editBtn player ]
        ]
Player Edit
Let's add the navigation button to the edit view. In /src/Players/Edit.elm:
Add one more import:
import Html.Events exposing (onClick)
Add a new function at the end for the list button:
listBtn : Html Msg
listBtn =
    button
        [ class "btn regular"
        , onClick ShowPlayers
        ]
        [ i [ class "fa fa-chevron-left mr1" ] [], text "List" ]
Here we send the ShowPlayers when the button is clicked.
And add this button to the list, change the nav function to:
nav : Player -> Html Msg
nav model =
    div [ class "clearfix mb2 white bg-black p1" ]
        [ listBtn ]
Players Update
Finally, src/Players/Update.elm needs to respond to the new messages.
import Navigation
And add two new branches to the case expression:
update : Msg -> List Player -> ( List Player, Cmd Msg )
update message players =
    case message of
        ...
        ShowPlayers ->
            ( players, Navigation.newUrl "#players" )
        ShowPlayer id ->
            ( players, Navigation.newUrl ("#players/" ++ id) )
Navigation.newUrl returns a command. When this command is run by Elm the location of the browser will change.
Test it
Go to the list http://localhost:3000/#players. You should now see an Edit button, upon clicking it the location should change to the edit view.
Up to this point your application code should look https://github.com/sporto/elm-tutorial-app/tree/018-07-navigation.