docs: function (fn) { var cache = {}  // barrier-enabled impl, eliminates redundant fetches
                                                      // in this version, any subsequent calls join at barrier (which opens when result is fetched)
          switch (_.numArgs (fn)) {
              case 1:
                  return function (then) {             
                      if (!cache.already) {
                          fn.call (this, (cache = _.barrier ())) }
                      cache (then) }
              case 2:
                  cache = {}
                  return function (value, then) {    
                      if (!(value in cache)) {
                          fn.call (this, value, (cache[value] = _.barrier ())) }
                      cache[value] (then) }
              default:
                  throw new Error ('_.cps.memoize: unsupported number of arguments') } }