A solution I am currently experimenting with is to wrap the Msg of each component into a union type:
type AddressedMsg = ToSelf Msg | ToParent OutMsg | ToRoot RootMsg All relevant functions of the component which output ( Model, Cmd Msg ) change to ( Model, Cmd AddressedMsg ) The update function (of any component in the tree) is now: update : AddressedMsg -> Model -> ( Model, AdressedMsg ) update msg model = case msg of ToSelf msg' -> handleMsg msg' model ToParent outMsg -> -- translate outMsg to new message for parent Inside the view, I bundled my taggers to include the address, e.g. 'ToSelf Increment' to increase counter 'ToParent RemoveMe' to notify parent counter needs to be removed. Inside parent's update function is similar and the confidentiality is preserved. Whenever the parent of this component is called (e.g Modify 5 msg in case of the counter). When the Msg is of type ToSelf, then the parent calls the update of the child. -- 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 elm-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.