| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/shared/elm/Shared/Update')
| -rw-r--r-- | src/shared/elm/Shared/Update/Sequence.elm | 37 | 
1 files changed, 37 insertions, 0 deletions
| diff --git a/src/shared/elm/Shared/Update/Sequence.elm b/src/shared/elm/Shared/Update/Sequence.elm new file mode 100644 index 0000000..ff33ae4 --- /dev/null +++ b/src/shared/elm/Shared/Update/Sequence.elm @@ -0,0 +1,37 @@ +module Shared.Update.Sequence exposing (sequence) + +-- Elm ------------------------------------------------------------------------- +import List + +-- Local Module ---------------------------------------------------------------- +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +sequence_step : ( +      (Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))) +      -> (Struct.Model.Type, (List (Cmd Struct.Event.Type))) +      -> (Struct.Model.Type, (List (Cmd Struct.Event.Type))) +   ) +sequence_step action (model, cmd_list) = +   let (next_model, new_cmd) = (action model) in +      case new_cmd of +         Cmd.none -> (next_model, cmd_list) +         _ -> (next_model, (cmd_list ++ new_cmds)) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +sequence : ( +      (List +         (Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))) +      ) +      -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +   ) +sequence actions model = +   let (final_model, cmds) = (List.foldr (sequence_step) (model, []) actions) in +      case cmds of +         [] -> (final_model, Cmd.none) +         [cmd] -> (final_model, cmd) +         _ -> (final_model, (Cmd.batch cmds)) | 


