title: How to implement interface having method returning Task (non-generic) in F#
body: <p>Say I have interface:</p>
  
  <pre><code>interface IProductRepository
  {
      Task SaveProduct(Product p);
  }
  </code></pre>
  
  <p>previously implemented by C# class:</p>
  
  <pre><code>class CSharpProductRepository : IProductRepository
  {
      public Task SaveProduct(Product p)
      {
          _db.Products.Add(p);
          return _db.SaveChangesAsync();
      }
  }
  </code></pre>
  
  <p>Now I want to implement the same in F#:</p>
  
  <pre><code>type FSharpProductRepository =
      interface IProductRepository with
          member this.SaveProduct(p : Product) : Task = this.SaveProduct(p) // error 1
  
      member this.SaveProduct(p : Product) = async {
          db.Products.Add(p)
          return db.SaveChangesAsync() |&gt; Async.AwaitTask // error 2
      }
  </code></pre>
  
  <p>But getting an error (1):</p>
  
  <blockquote>
    <p>This expression was expected to have type Task but here has type Async&lt;'a></p>
  </blockquote>
  
  <p>and (2):</p>
  
  <blockquote>
    <p>Type constraint mismatch. The type Task is not compatible with type Task&lt;'a></p>
  </blockquote>