The update function cannot split, but it can become a proxy function:
type Msg
= MessageFromFunctionalityA FunctionaliyAMsg
| MessageFromFunctionalityB FunctionaliyBMsg
update : Msg -> Model -> Model
update proxyMsg model =
case proxyMsg of
MessageFromFunctionalityA msg ->
updateForFunctionalityA msg model
MessageFromFunctionalityB msg ->
updateForFunctionalityB msg model
This would be a simple implementation. You can create components as @pdamoc says, which is what you do when you have specialized init, update, model, subscriptions, etc.