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?
Effectsjust kinda integrate it into IO? - Athan Clarktasksport in line 116. - Chad Gilbert