import { Arity5, Curry5 } from '../types' import { curry2 } from './curry2' import { curry3 } from './curry3' import { curry4 } from './curry4' export function curry5(fn: Arity5): Curry5 export function curry5( fn: Arity5 ): Curry5 export function curry5(fn: Arity5): Curry5 { function curried(a: A, b: B, c: C, d: D, e: E): any { switch (arguments.length) { case 1: return curry4((b: B, c: C, d: D, e: E) => fn(a, b, c, d, e)) case 2: return curry3((c: C, d: D, e: E) => fn(a, b, c, d, e)) case 3: return curry2((d: D, e: E) => fn(a, b, c, d, e)) case 4: return (e: E) => fn(a, b, c, d, e) default: return fn(a, b, c, d, e) } } return curried as Curry5 }