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.
