anchor.diff:  
       let mapAppMessage map = function
           | AppMessage.Message msg -> AppMessage.Message (map msg)
  -        | Draw -> Draw
           | Replay (x,messageList) -> Replay (x,messageList |> List.map (fun (id, m) -> id, map m))
   
       let mapProducer map p = mapAction map p
  
positive.code:                 PreviousState = app.Model
                  Message = message
              }
          let renderState = requestDraw scheduleDraw app.RenderState
          
          let actions = createActions post actions
  //        notifySubs modelChanged
  
          {app with Model = model; RenderState = renderState}, (fun () -> (notifySubs modelChanged))::actions
  
      let handleDraw viewFn post app = 
          render post viewFn app
          |> (fun app -> {app with RenderState = NoRequest},[])
  
      let calculateModelChanges initState update actions = 
          let execUpdate r a =
  
negative.code:             let event = Fable.Import.Browser.CustomEvent.Create("FableArchNotifySubs", eventInit) 
              elem.dispatchEvent(event) |> ignore
  
          let mutable state = createInitApp postMessage
  
          let handleEvent (e:Fable.Import.Browser.Event) =
              let evt = e :?> Fable.Import.Browser.CustomEvent
              let (state', actions)  : App<'TModel, 'TMessage, 'TView>*(unit -> unit) list = 
                  match (evt.detail :?> (AppMessage<'TMessage, 'TModel>)) with
                  | Message message ->
                      handleMessage post notifySubs message state
                  // | Draw -> 
                  //     handleDraw postMessage state
                  | Replay (model, messages) ->
                      handleReplay post notifySubs (model, messages) state
              state <- state'
              actions |> List.iter (fun x -> x())
  
  