/**
* Functions and types for currying and partial application with
* typescript code.
*/
export type F1 = (a: A) => B;
export type F2 = (a: A, b: B) => C;
export type F3 = (a: A, b: B, c: C) => C;
export type F4 = (a: A, b: B, c: C, d: D) => E;
export type F5 = (a: A, b: B, c: C, d: D, e: E) => F;
export type F6 = (a: A, b: B, c: C, d: D, e: E, f: F) => G;
export const f1 = (f: F1) => f;
export const f2 = (f: F2) => (a: A) => (b: B) => f(a, b);
export const f3 = (f: F3) =>
(a: A) => (b: B) => (c: C) => f(a, b, c);
export const f4 = (f: F4) =>
(a: A) => (b: B) => (c: C) => (d: D) => f(a, b, c, d);
export const f5 = (f: F5) =>
(a: A) => (b: B) => (c: C) => (d: D) => (e: E) => f(a, b, c, d, e);
export const f6 = (f: F6) =>
(a: A) => (b: B) => (c: C) => (d: D) => (e: E) => (_f: F) => f(a, b, c, d, e, _f);