Why don’t you enrich your Msg type like so:

type Msg = ... | Several (List Msg)

and add a generic branch to your update function for processing a message
of the Several kind (something in the spirit of: update (Several msgs) =
List.foldr (... calling update recursively in an appropriate way ...) ...
msgs)?

Then when you call Task.perform you make it generate a *single* Msg that is
a Several [msg1, msg2] value. That way, you do have the “production of two
messages” at the place you want it expressed.
​

2016-10-19 13:51 GMT+02:00 Austin Bingham <[email protected]>:

> Yes, my current approach does seem pretty solid from a theoretical point
> of view, but it feels like a poor expression of my intent. I have to create
> this "synthetic" intermediate msg which only exists for the purposes of the
> recursion, and then I have to handle the production of two messages in a
> different part of the code (the update function) from where I really ask
> for them (the call to Task.perform).
>
> I guess what I'm getting hung up on is the fact that this is all
> necessitated by the design of Task.perform. What I'm trying to do may be so
> marginal that it doesn't make sense to try modifying Task.perform to
> accommodate it, and that's not really what I'm looking for anyway. I just
> wanted to see if there was some existing trick for doing a task-local
> expression of multiple msgs.
>
> On Wednesday, October 19, 2016 at 1:11:30 PM UTC+2, Simon wrote:
>>
>> Sounds like you a recursively apply the update function, and that sounds
>> like pretty solid functional programming
>>
>>
>> On Wednesday, 19 October 2016 11:51:16 UTC+2, Austin Bingham wrote:
>>>
>>> Is there a way to make Task.perform produce a batched "Cmd msg" on
>>> success (or failure, for that matter)? I've got a case where, on success, I
>>> want to send out more than one Msg, but because the success handler for
>>> Task.perform can only generate one msg this isn't straightforward.
>>>
>>> What I'm doing now is creating an intermediate msg from the success
>>> handler. When my update function handles this intermediate msg, it is then
>>> able to generate the batched Cmd of two msgs that I want. This seems to
>>> work well, but it feels like pattern that only exists because of
>>> Task.perform's design.
>>>
>>> So, is there a better way? Am I missing something that would let me
>>> remove this intermediate message, or is that just the way things have to
>>> work?
>>>
>> --
> 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 [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to