anchor.diff:                        <@@
                           let ctx = (%%args.[0]:>obj) :?> SoqlContext
                           let oauth = ctx.GetIdentity()
  -                        let tableUrls = oauth |> RestApi.getTablesUrls |> Async.RunSynchronously
  +                        let tableUrls = oauth |> RestApi.getTablesUrls
                           let url = tableUrls.Item tableName
                           let getTable = getTableFromUrl oauth
                           let table = url |> getTable |> Async.RunSynchronously
  
positive.code: 
          let authJson = File.ReadAllText authFile
          let authparams = ImpersonationParam.FromJson authJson
          //let oauth = authenticateWithCredentials authparams |> Async.RunSynchronously
        
          ProvidedConstructor([], 
                InvokeCode=(
  
negative.code: 
  module RestApi =
    //let cache = new MemoryCache("RestApi")
    // Experimental file cache
    let cache = FileCache (Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".cache"))
    let cacheAndReturns<'t> k (f:unit -> Async<'t>) : 't =
      let key = computeKey k
      match cache.Get<'t> key with
      | Some item -> item
      | None -> 
          async {
            let! item = f()
            cache.Add<'t> key item (TimeSpan.FromMinutes 10.)
            //let policy = new CacheItemPolicy()
            //policy.SlidingExpiration <- TimeSpan.FromMinutes 10.
            //cache.Add(key, result, policy) |> ignore
            return item
          } |> Async.RunSynchronously
    let authenticate (authparams:ImpersonationParam) =
      cacheAndReturns "oauth" (fun _ -> authenticateWithCredentials authparams)
    let getTablesUrls oauth =
      cacheAndReturns "tableNames" (fun _ -> getObjectsDescUrls oauth)
    let loadTableList (authparams:ImpersonationParam) (f:TableDesc -> unit) =
      let oauth = authenticate authparams
      let tableUrls = getTablesUrls oauth
      let getTable = getTableFromUrl oauth
      for url in tableUrls.Values do //|> Seq.take 5 do
        let key = sprintf "key_%s" url
        let table = cacheAndReturns key (fun _ -> getTable url)
        f table
  
  [<TypeProvider>]
  type SalesforceProvider () as this =
  