anchor.diff:  // --------------------------------------------------------------------------------------
   
   /// Creates a tool tip and start an async loop to switch between the given overloads.
  -/// When `helptextEvent` happens with `Hide`, the workflow stops & tool tip disappears
  -let createHelptextToolTip () =
  +/// When `helptextEvent` happens with `Hide` or `Show` (indicating that we are showing
  +/// another tool tip), the workflow stops & tool tip disappears.
  +let createHelptextToolTip (overloads:DTO.OverloadSignature[]) (position:JQueryCoordinates) =
   
       // Create tool tip for showing help text & add it to the right place
       let helptext =
           jq("<div class='type-tooltip tooltip'>
                 <div class='tooltip-inner'>TEST</div>
  -            </div>").appendTo(jq(".panes"))
  -    helptext.fadeOut() |> ignore
  +            </div>").appendTo(jq(".panes")).offset(position)
  +
   
       // Update the UI & wait for `Move` event (to change overload) or `Hide` to remove tooltip
  -    let rec loop (overloads:DTO.OverloadSignature[]) (position:JQueryCoordinates) i = async {
  +    let rec loop i = async {
   
           let toolTipInner = jq' helptext.[0].firstElementChild
           toolTipInner.empty() |> ignore
  
positive.code: 
          let! evt = Async.AwaitObservable helptextEvent.Publish
          match evt with
          | Show text ->
              helptext.fadeOut() |> ignore
              let! result = LanguageService.helptext text
              match result with
              | Some n ->
                  let li = (jq ".suggestion-list-scroller .list-group li.selected")
                  let o = li.offset()
                  let list = jq "autocomplete-suggestion-list"
                  if JS.isDefined o && li.length > 0. then
                      o.left <- o.left + list.width() + 10.
                      o.top <- o.top - li.height() - 10.
                      let helptextList = n.Data.Overloads |> Array.concat
                      if not (Array.isEmpty helptextList) then
                          return! loop helptextList o 0
                      else
                          return! loop [||] o 0
                  else return! loop [||] o 0
              | None -> return! loop [||] (createEmpty<JQueryCoordinates>()) 0
          | Next by -> return! loop overloads position ((i + by + overloads.Length) % overloads.Length)
          | Hide -> helptext.fadeOut().remove() |> ignore }
  
      // Start by displaying the first overload
      loop [||] (createEmpty<JQueryCoordinates>()) 0
  
  
  // --------------------------------------------------------------------------------------
  // Editor integration
  
negative.code:     | GetSuggestion of SuggestionRequest * ReplyChannel<Suggestion[]>
      | UpdateCompletion
  
  /// Helptext agent handles three events - `Show` is a request to show helptext for currently
  /// selected suggestion, `Next` is request to change overload showed in tooltip,
  /// and `Hide` hides current tooltip
  type HelptextEvent =
  