JSFiddle - React, Tailwind, and code Playground

JavaScript

function sequence(){
    var start = arguments[0] || 0;
    var step = arguments[1] || 1;
    return function(){
        var result = start;
        start += step;
        return result;
    }
}

function take(fu, count){
    var result = [];
    for(var i =0; i <= count; i++){
        result.push(fu());
    }
    return result
}

function map(fu, array)
{
    var result = [];
    array.forEach(function(element, index, array){
        result.push(fu(element));
    });
    return result;
}

function fmap(fu, sequence)
{
    return function() {
        return fu(sequence());
    }
}


function partial5(fu)
{
    var arg_closure  = [].slice.call(arguments, 1);
    var fu_arg = [];
    return function(){
        for(var arg in arguments){
            fu_arg.push(arguments[arg])
        }
        return fu.apply(null, arg_closure.concat(fu_arg));
    }
}

function partial(fu)
{
    var arg_closure  = [].slice.call(arguments, 1);
    return function(){
        var index = 0;
        for(var arg in arg_closure){
            if(arg_closure[arg] == undefined){
                arg_closure[arg] = arguments[index++];
            }
        }
        var fu_arg = [].slice.call(arguments, index);
        return fu.apply(null, arg_closure.concat(fu_arg));
    }
}

function bind(fu, obj)
{
    return function()
    {
        return fu.apply(obj);
    }
}


function test(a, b, c, d) { return 'a=' + a + ',b=' + b + ',c=' + c + ',d=' + d; }
var test1_3 = partial(test, 1, undefined, 3);
console.log(test1_3(5, 9)); // a=1,b=5,c=3, d=9