Say I have some model, action set, and update function as follows:
type alias Model = Int
type Action = Succ
update : Action
-> Model
-> (Model, Effects Action)
update action model =
case action of
Succ ->
( model+1
, Effects.task <| Task.succeed Succ
)
This will obviously spin an infinite loop into hades, but I need to know a crucial detail: Will the action sparked by the task see the model+1
version (such that this task sparks the "next" model), or will it be run in parallel to the current model version, model
? Essentially, will StartApp
store the model in the left of the tuple before running the effects to get the new Action?
The reason I ask this, is from the logs I'm getting from this simple debouncer I've been writing: http://lpaste.net/160866
When I'm using this module, I'm specifically setting debounceBounce = True
in the model when I spark the loop:
type alias AppModel =
{ appDebouncer : DebounceModel
}
type AppAction
= DebounceAction DebounceAction
| Finished
| Start
updateAppAction : AppAction
-> AppModel
-> (AppModel, Effects AppAction)
updateAppAction action model =
case action of
DebounceAction a ->
let (newDebounce, eff) =
updateDebounce Finished a model.appDebounce
in ( { model | appDebounce = newDebounce }
, Effects.tick (handleContinue DebounceAction) eff
)
Start ->
( { model | appDebounce =
let debouncer = model.appDebounce
in { debouncer | debounceBounce = True }
}
, Effects.tick (DebounceAction << Tick)
)
-- ...
I've found many logs on my machine that specifically shows that the initial model in the loop does not have debounceBounce = True
set. Is there a clear reason for this?