anchor.diff:  
     //let tap msg x = debug "[%s] %A" msg x; x
   
  -  let (|TypeParameterPrefix|_|) =
  -      let prefixes = set ["QUOTE"; "INFIX_AT_HAT_OP"]
  -      fun token -> 
  -        if prefixes |> Set.contains token.TokenName then Some()
  -        else None
  -
     // Returns symbol at a given position.
     let getSymbol source line col lineStr (args: string array): Symbol option =
         let defines =
  
positive.code:       // we'll get (IDENT, left=2, lenght=5).
        let tokens = 
          tokens
          |> List.fold (fun (acc, (lastToken, lastRightCol)) token ->
               if token.LeftColumn <= lastRightCol then 
                  acc, (lastToken, lastRightCol)
               else 
                  match token with
                  | TypeParameterPrefix ->
                      acc, (Some token, (getCorrectRightCol token) - 1)
                  | _ ->
                      let token =
                          match lastToken with
                          | Some TypeParameterPrefix when isIdentifier token ->
                               { token with LeftColumn = token.LeftColumn - 1
                                            FullMatchedLength = token.FullMatchedLength + 1 }
                          | _ -> token
                      token :: acc, (Some token, (getCorrectRightCol token) - 1)
             ) ([], (None, 0))
          |> fst
           
        // One or two tokens that in touch with the cursor (for "let x|(g) = ()" the tokens will be "x" and "(")
        let tokensUnderCursor = tokens |> List.filter (fun x -> x.LeftColumn <= col && getCorrectRightCol x >= col)
  
        // Select IDENT token. If failes, select OPERATOR token.
        let tokenUnderCursor =
          match List.tryFind isIdentifier tokensUnderCursor with
          | Some x -> Some x
          | _ -> List.tryFind isOperator tokensUnderCursor
  
        match tokenUnderCursor with
        | Some tok when (isIdentifier tok || isOperator tok) -> 
            Some { Line = line
                   LeftColumn = tok.LeftColumn
                   RightColumn = getCorrectRightCol tok
                   Text = lineStr.Substring(tok.LeftColumn, tok.FullMatchedLength) }
        | _ -> None
  
    /// Constructs options for the interactive checker for the given file in the project under the given configuration.
    member x.GetCheckerOptions(fileName, projFilename, source, files, args, targetFramework) =
  
negative.code:   | UpdateAndGetTypedInfo of ParseRequest * AsyncReplyChannel<TypedParseResult>
    | GetTypedInfoDone of AsyncReplyChannel<TypedParseResult>
  
  type SymbolKind =
      | Ident
      | Operator
      | GenericTypeParameter
      | StaticallyResolvedTypeParameter
      | Other
  
  type Symbol =
      { Kind: SymbolKind
        Line: int
        LeftColumn: int
        RightColumn: int
        Text: string }
      member x.Range = x.Line, x.LeftColumn, x.Line, x.RightColumn
  
  type DraftToken =
      { Kind: SymbolKind
        Token: TokenInformation 
        RightColumn: int }
      static member Create kind token = 
          { Kind = kind; Token = token; RightColumn = token.LeftColumn + token.FullMatchedLength - 1 }
      member x.IsOperator = match x.Kind with Operator -> true | _ -> false
  
  /// Provides functionality for working with the F# interactive checker running in background
  type LanguageService(dirtyNotify) =
  