anchor.diff:  
   [<AutoOpen>]
   module internal Util =
  +  type IDictionary<'k, 'v> with
  +    member this.TryGet k =
  +      match this.TryGetValue k with
  +       | (false, _) -> None
  +       | (_, v) -> Some v
  +    member this.Add (kvs: seq<'k * 'v>) =
  +      kvs |> Seq.iter this.Add
  +  module Dictionary =
  +    let create kvs =
  +      let d = Dictionary<_, _>()
  +      d.Add kvs
  +      d
  +
     let setupWhen (onEvent: IEvent<_, _>) =
       let mainCtx = ivar ()
       let handler =
  
positive.code:          onMain { main.EnterHeader.Text <- "" } >>.
           let item = {IsCompleted = Stream.Var.create false
                       Header = Stream.Var.create header}
           (Stream.Var.get itemsVar @ [item])
           |> Stream.Var.set itemsVar)
  
        changedCompleted
  
negative.code:                 if ctrl.Header.Focus () then
                    ctrl.Header.SelectAll () })
               Stream.ofObservableOnMain ctrl.Header.KeyUp
               |> Stream.filterFun (fun evt -> evt.Key = Key.Enter)
               |> Stream.mapIgnore
               |> Stream.merge (Stream.ofObservableOnMain ctrl.LostFocus
                                |> Stream.mapIgnore)
               |> Stream.subscribeJob (fun () -> onMain {
                  Keyboard.ClearFocus ()
                  ctrl.Header.Focusable <- false
                  match ctrl.Header.Text.Trim () with
                   | "" ->
                     ctrl.Header.Text <- Stream.Var.get item.Header
                   | text ->
                     ctrl.Header.Text <- text
                     return! Stream.Var.set item.Header text })
  
               Stream.ofObservableOnMain ctrl.IsCompleted.Click
  