// // @flow // // credit @gcanti, taken from https://github.com/gcanti/flow-static-land/blob/e36cd55b8f8541e81828ec39964bdb6f5ccbec91/src/Fun.js // export type Fn1 = (a: A, ...rest: Array) => B // export type Fn2 = (a: A, b: B, ...rest: Array) => C // export type Fn3 = (a: A, b: B, c: C, ...rest: Array) => D // export type CurriedFn2 = Fn1> & Fn2 // export type CurriedFn3 = Fn1> & // Fn2> & // Fn3 // declare function curry(f: Fn2): CurriedFn2 // eslint-disable-line no-redeclare // declare function curry(f: Fn3): CurriedFn3 // eslint-disable-line no-redeclare // declare function curried(f, length, acc) { // return function() { // const combined = acc.concat(Array.prototype.slice.call(arguments)) // return combined.length >= length // ? f.apply(this, combined) // : curried(f, length, combined) // } // } // export function curry(f: Function) { // // eslint-disable-line no-redeclare // return curried(f, f.length, []) // }