How to turn a Msg into a Cmd Msg?
Only Use Sparsely: Better split the update function into multiple smaller functions.
Problem
Solution
Alternative Solution
type Msg =
LoginSucceeded User
| InfoMessage String
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
LoginSucceeded newUser ->
( { model | currentUser = newUser }
, Cmd.none
)
InfoMessage message ->
( { model | message = Just message }
, Cmd.none
)
type Msg =
LoginSucceeded User
| InfoMessage String
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
LoginSucceeded newUser ->
( { model | currentUser = newUser }
, sendMsg <| InfoMessage "Login Successful"
)
InfoMessage message ->
( { model | message = Just message }
, Cmd.none
)
​
sendMsg : msg -> Cmd msg
sendMsg msg =
Task.succeed msg
|> Task.perform identity
type Msg =
LoginSucceeded User
| InfoMessage String
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
LoginSucceeded newUser ->
( model
|> updateUser newUser
|> updateMessage "Login Successful"
, Cmd.none
)
InfoMessage message ->
( model |> updateMessage message
, Cmd.none
)
​
updateUser : User -> Model -> Model
updateUser user model =
{ model | currentUser = user }
​
updateMessage : String -> Model -> Model
updateMessage message model =
{ model | message = Just message }
This is the a better solution

Question

How can I display a Message after a user logged in?

Answer

Use the following function:
sendMsg : msg -> Cmd msg
sendMsg msg =
Task.succeed msg
|> Task.perform identity

Further reading