You could use this trick:

case (state, msg) of
    (Displaying stuff, UpdateThis) -> ...
    (Displaying stuff, UpdateThat) -> ...
    (Loading, _) -> ...
    _ -> ... {- only if needed -}


On Tuesday, 17 January 2017 15:03:05 UTC+1, Tomáš Znamenáček wrote:
>
> Hello!
>
> I have an app that loads some JSON from a website and displays it. The 
> state of the app could be modelled a bit like this:
>
> type State =
>     Loading |
>     Displaying Stuff
>
> type alias Stuff = { … }
>
> Now I am writing the update function to handle messages:
>
> update : Msg -> State -> (State, Cmd Msg)
> update msg state = case msg of
>     UpdateThis -> …
>     UpdateThat -> …
>
> My problem is that the state can be either Loading or Displaying, but most 
> of the messages only make sense in the Displaying state, leading me to code 
> like this:
>
> update : Msg -> State -> (State, Cmd Msg)
> update msg state = case msg of
>     UpdateThis -> case state of
>         Displaying stuff -> …
>         _ -> (Failed "Invalid state", Cmd.none)
>     UpdateThat -> case state of
>         Displaying stuff -> …
>         _ -> (Failed "Invalid state", Cmd.none)
>
> Obviously, this is dumb. How can I “divide” the loading and the displaying 
> part of the app? (Assuming that UpdateThis and UpdateThat can only arrive 
> in the correct, Displaying state.)
>
> Thank you!
>
> T.
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to