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 }