barbiturat
7/22/2017 - 1:30 PM

composeK

composeK

composeK(s => Maybe.Just(s + 1), s => Maybe.Just(s + 1), s => Maybe.Just(s))(5) //=> Maybe.Just(7) 

//////////////////////////////////////////////////////////////////////////////


composeK(concat, concat, concat, sym => () => sym)('a')('b') //=> "abbb"
composeK(concat, concat, concat, s => Maybe.Just(s))('a')('b') //=> "abbb"

//////////////////////////////////////////////////////////////////////////////



const getTimeFromStart = startTime => Date.now() - startTime;
const makeFuture = startTime => ms => Future((reject, resolve) => {
  console.log('start: ' + ms, 'timeFromStart: ' + getTimeFromStart(startTime));
  return setTimeout(() => {
    console.log('finish: ' + ms, 'timeFromStart: ' + getTimeFromStart(startTime)); 
    resolve(ms);
  }, ms)
});
 
const futureOfMs = makeFuture(Date.now());
const fut = compose(always, futureOfMs);
const futuRes = composeK(fut(3000), fut(5000), fut(10))();

futuRes.fork(err => console.error(err), data => console.log('data: ' + data));  //=>
// start: 10
// timeFromStart: 0
// finish: 10
// timeFromStart: 23
// start: 5000
// timeFromStart: 23
// finish: 5000
// timeFromStart: 5024
// start: 3000
// timeFromStart: 5024
// finish: 3000
// timeFromStart: 8025
// data: 3000

// So, method starts all the futures successively.