import { Curried2 } from './curry'; export function flip(f: (a: a) => (b: b) => c): (b: b) => (a: a) => c; export function flip(f: (a: a, b: b) => c): (b: b, a: a) => c; export function flip(f: ((a: a, b: b) => c) | ((a: a) => (b: b) => c)): Curried2; export function flip(f: ((a: a, b: b) => c) | ((a: a) => (b: b) => c)): any { const arity = f.length; return arity > 1 ? (b: b, a: a) => f(a, b) as c : (b: b, ...as: a[]) => as.length === 0 ? (a: a) => (<(a: a) => (b: b) => c>f)(a)(b) : (<(a: a) => (b: b) => c>f)(as[0])(b) as c; }