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