type Adder<T> = (a: T, b: T) => T;

function makeAdder<T>(): Adder<T> {
  return (a: T, b: T): T => {
    return a + b;
  };
}

var i32Adder = makeAdder<i32>();
i32Adder(1, 2);

var i64Adder = makeAdder<i64>();
i64Adder(1, 2);

// TODO:
// makeAdder<f64>()(1, 2);