Scratch - PIPE
by jinam yu
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/async/3.1.1/async.min.js"></script>
<div id="output"></div>
JavaScript
(function(){
const Pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
const Curry = (fn, ...args) => {
return (fn.length <= args.length) ?
fn(...args) :
(...more) => Curry(fn, ...args, ...more);
}
let Dom = {
querySelector($query){
return document.querySelector($query);
},
innerText($str, $el){
$el.innerText = $str;
return $el;
}
};
const Convert = instance => {
const obj = {};
for(var key in instance){
obj[key] = Curry(Dom[key]);
}
return obj;
}
Dom = Convert(Dom);
const $dom = Pipe(
Dom.querySelector,
Dom.innerText('asdf'),
)("#output");
const task = (fn) => (...args) => {
const done = args.pop();
done(null, fn.apply(null, args));
}
async.waterfall([
next => next(null, "#output"),
task(Dom.querySelector),
], (err, ans) => {
Dom.innerText('asdf1111')(ans);
})
})();