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
}