existingUser :: Monad m => (Name -> User -> m a) -> Msg -> User -> m Msg
existingUser pUser   (Msg name0 inId msg)    u@(User _ outId) =
    if inId /= outId ||
       msg  /= expect outId
    then return (mkMsg name0 outId)
    else updateUser pUser u
existingUser :: Monad m => (Name -> User -> m a) -> Msg -> User -> m Msg
existingUser pUser   (Msg name0 inId msg)    u@(User _ outId) =
    if inId /= outId ||
       msg  /= expect outId
    then return (mkMsg name0 outId)
    else updateUser pUser u
existingUser pUser   (Msg name0 inId msg)    u@(User _ outId) =
    if inId /= outId ||
       msg  /= expect outId
    then return (mkMsg name0 outId)
    else updateUser pUser u