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);
  })
  
})();