JSFiddle - React, Tailwind, and code Playground
by kentaromiura
HTML
<script src="https://rawgit.com/kentaromiura/4531883/raw/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())