let tests = [
  function(x: (a: string, b: string) => void) {
    let y = x.bind(x, 'foo');
    y('bar'); // ok
    y(123); // error, number !~> string
  },

  // callable objects
  function(x: { (a: string, b: string): void, ... }) {
    let y = x.bind(x, 'foo');
    y('bar'); // ok
    y(123); // error, number !~> string
  },

  // non-callable objects
  function(x: { a: string, ... }) {
    x.bind(x, 'foo'); // error
  },

  // callable objects with overridden `bind` method
  function(x: {(a: string, b: string): void, bind(a: string): void, ...}) {
    x.bind('foo') as void; // ok
    x.bind(123) as void; // error, number !~> string
  },

];

class A {}

A.bind(3);
