JSFiddle - React, Tailwind, and code Playground

by kentaromiura

HTML

<script src="https://gist.github.com/raw/4531883/954e971e0ce4e87fc1d5dea6444583906ea2b829/Monad.js"></script>

JavaScript

var Query = function(data){
  if (data instanceof Monad) {
    this.data = data;
  }else{
    this.data = new Monad(function(){return data});
  }
};

Query.learn = function(feature, action){
       
        Query.prototype[feature] = function(){ 
            var me = this;
            var params = Array.prototype.slice.call(arguments);

            var monad = me.data.bind(function(getdata){
                params.unshift(getdata);
              
                return function(){
                    return action.apply(me, params);
                }   
            });
            
            return new Query(monad);
        };
        
};

Query.learn('above', function (getdata, value){
  return getdata().filter(function(x){return x > value})
})

Query.learn('below', function (getdata, value){
      return getdata().filter(function(x){return x < value});
})

Query.learn('sort', function (getdata, f){
      if (typeof f !== 'function') f = undefined;
    	return getdata().sort(f);
})

Query.prototype.execute = function(){
  var fx = this.data.value();
  return fx();
}

alert(new Query([1,2,3,4,5,6,7,8,9,10]).above(2).below(8).execute())

alert(new Query([2,1,3,4,12,5,7,9,6,8,10]).above(2).below(8).sort().execute())