const pluckDeep = key => obj => key.split('.').reduce((accum, key) =>
accum[key], obj)
const compose = (...fns) => res => fns.reduce((accum, next) => next(accum), res)
const unfold = (f, seed) =>
{ const go = (f, seed, acc) =>
{ const res = f(seed) return res ? go(f, res[1], acc.concat([res[0]])) : acc }
return go(f, seed, [])}