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