blob: 9ab95f129fc8d4c8037803d3acae04625e002532 [file] [log] [blame] [edit]
import { reduceFn } from './reduce.js'
export function _arity(n, fn){
switch (n){
case 0:
return function (){
return fn.apply(this, arguments)
}
case 1:
return function (a0){
return fn.apply(this, arguments)
}
case 2:
return function (a0, a1){
return fn.apply(this, arguments)
}
case 3:
return function (
a0, a1, a2
){
return fn.apply(this, arguments)
}
case 4:
return function (
a0, a1, a2, a3
){
return fn.apply(this, arguments)
}
case 5:
return function (
a0, a1, a2, a3, a4
){
return fn.apply(this, arguments)
}
case 6:
return function (
a0, a1, a2, a3, a4, a5
){
return fn.apply(this, arguments)
}
case 7:
return function (
a0, a1, a2, a3, a4, a5, a6
){
return fn.apply(this, arguments)
}
case 8:
return function (
a0, a1, a2, a3, a4, a5, a6, a7
){
return fn.apply(this, arguments)
}
case 9:
return function (
a0, a1, a2, a3, a4, a5, a6, a7, a8
){
return fn.apply(this, arguments)
}
case 10:
return function (
a0, a1, a2, a3, a4, a5, a6, a7, a8, a9
){
return fn.apply(this, arguments)
}
default:
throw new Error('First argument to _arity must be a non-negative integer no greater than ten')
}
}
export function _pipe(f, g){
return function (){
return g.call(this, f.apply(this, arguments))
}
}
export function pipe(){
if (arguments.length === 0){
throw new Error('pipe requires at least one argument')
}
return _arity(arguments[ 0 ].length,
reduceFn(
_pipe,
arguments[ 0 ],
Array.prototype.slice.call(
arguments, 1, Infinity
)
))
}